Azure:ストレージアカウントの種類とアクセス制限について
はじめに
Azureで提供しているクラウドサービス。そのアカウントの種類とそれぞれの内容、さらにそれらストレージを公開して利用した場合、アクセス制限を設定しないとセキリティ面で非常に不安が残ります。今回はそのアクセス制限をかける方法について確認していきます。
Azureのストレージアカウント
Azureストレージではアカウントとして数種類のアカウントが提供されています。これらそれぞれに特色があり、異なる機能のサポートを行い、独自の価格で分けられています。必要としている機能と利用方法を整理したうえでストレージアカウントの種類を吟味して検討する必要があります。
ストレージアカウントの種類
汎用v2アカウント
最新のAzureストレージの機能をサポートしており、汎用 v1 と BLOB ストレージ アカウントのすべての機能が使用できます。またAzureストレージは容量に対して最低価格を提供しており、「汎用v2アカウント」は他社と比較しても負けないトランザクション料金になっています。 そのためほとんどの場合でこちらの汎用 v2 ストレージ アカウントの使用を推奨しています。もし従来の「汎用v1」あるいは「BLOBストレージアカウント」であったとしてもデータのコピー等は必要なく、比較的簡単にこちらのバージョンへアップグレードを行えます。
【サポートしているサービス】
「BLOB (すべての種類: ブロック、追加、ページ)」「Data Lake Gen2」「Files」「ディスク」「キュー」「テーブル」
汎用 v1 アカウント
汎用v1ストレージアカウントは、全てのAzureストレージサービスにアクセスすることは可能ですが、最新の機能が制限されている場合や契約する容量単価もやや高いことがあります。特別な理由がない場合を除いて「汎用V2ストレージアカウント」の使用を推奨します。
【サポートしているサービス】
「BLOB (すべての種類)」「Files」「ディスク」「キュー」「テーブル」
BlockBlobStorageアカウント
プレミアムパフォーマンスレベルで、非構造化オブジェクトデータをブロックBLOBあるいは追加BLOBとして格納することに特化したストレージ アカウントになります。「汎用v2アカウント」とBlobStorageアカウントを比較した場合、BlockBlobStorageアカウントは待ち時間が一貫して短く、高いトランザクションレートを実現することが出来ます。しかし現在ホット、クール、アーカイブアクセス層への階層化をサポートしておらず、「ページ BLOB」「テーブル」「キュー」はサポートされていません。
【サポートしているサービス】
「BLOB (ブロック BLOB と追加 BLOB のみ)」
FileStorageアカウント
プレミアムのファイル共有の格納と作成に特化したストレージ アカウントです。しかしこの種類のストレージアカウントではファイルはサポートされますがブロック BLOBや追加 BLOB、ページ BLOB、テーブル、キューのサポートは制限されるため注意が必要です。このストレージアカウントでは固有のパフォーマンスに特化した特性が提供されているため、自身に必要かどうかを判断する必要があります。
【サポートしているサービス】
「ファイルのみ」
Azureストレージアカウントのセキュリティ
Azureストレージでは「多層型セキュリティモデル」が用いられています。このモデルは使用されるネットワークの種類とサブネットに基づいて、アプリケーションやエンタープライズ環境で求められるストレージアカウントへのアクセスレベルを確保・制御を行います。つまり構成されたネットワークルールの中で指定したネットワークセットを経由し、要求されているデータを該当アプリケーションのみアクセス出来るようにしています。そしてそれらのストレージアカウントへのアクセスを構築したAzure仮想ネットワーク内の指定したIPアドレス・IP範囲・サブネット内から要求に応じて制限も可能です。
ストレージアカウントをセキュリティで保護するためにまず必要な作業として「既定」をパブリックエンドポイントですべてのネットワークからのトラフィックにアクセスを制限させる規則を構成する必要があります。そして次に特定のVNetからのトラフィックにアクセスを許可するルールを構成させる必要があります。また、例えば選択したパブリックインターネットIPアドレス範囲内のトラフィックへアクセス許可を行い、インターネットを通して特定のクライアントからの接続を許可することが可能になり、この構成ではアプリケーションに対してセキュリティで保護されたネットワーク境界を構築しています。
また、ストレージアカウントにはインターネットを介してアクセスできるパブリックエンドポイントが存在します。これを利用することで自身のVNetからストレージアカウントへプライベートIPアドレスを割り当て、プライベートリンクを介してVNetとストレージアカウント感のやり取りを保護することが可能になります。そこにAzureストレージファイアウォールを使用すると自身のストレージアカウントへのパブリックエンドポイントへのアクセスを制限することも出来ます。
規定のネットワークアクセスルールを変更する
ストレージ アカウントは初期の既定で任意のネットワーク上のクライアントから接続を受け入れる設定になっています。これを選択したネットワークからのアクセスを制限するようにするには、この既定のアクションを変更する必要があります。しかし、このネットワークルールの既定を変更することでAzureストレージに接続しているアプリケーション動作に影響を及ぼすことがあります。例えば既定のネットワークルールを拒否に設定した場合、アクセスを許可する特定のネットワーク ルールも合わせて適用されていない場合を除いて、データへのアクセスがすべて制限されていまいます。必ずアクセスを制限する既定のルールの変更前にネットワーク ルールを使用して、許可されたネットワークへのアクセスを許可するようにしておいてください。
既定のネットワーク アクセス ルールを管理する
ストレージアカウントに対する既定のネットワーク アクセス ルールを管理するために「Azure portal」か「PowerShell」あるいは「CLIv2」を使用します。
Azure portalを用いた方法
セキュリティで保護するストレージ アカウントへ移動します。
[Firewalls and virtual networks] (ファイアウォールおよび仮想ネットワーク) という設定メニューを左クリックします。
既定でアクセスを制限する場合、 [選択されたネットワーク] からのアクセスを許可するように選択します。 逆にすべてのネットワークからのトラフィックを許可する場合は [すべてのネットワーク] からのアクセスを許可するように選択します。
[保存] をクリックして変更を適用します。
PowerShellを用いた方法
Azure PowerShellをインストールしてサインインを行います。
ストレージ アカウントの既定のルールの状態を表示します。【(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName “myresourcegroup” -AccountName “mystorageaccount”).DefaultAction】
既定でネットワーク アクセスを拒否する既定のルールを設定します。【Update-AzStorageAccountNetworkRuleSet -ResourceGroupName “myresourcegroup” -Name “mystorageaccount” -DefaultAction Deny】
既定でネットワーク アクセスを許可する既定のルールを設定します。【Update-AzStorageAccountNetworkRuleSet -ResourceGroupName “myresourcegroup” -Name “mystorageaccount” -DefaultAction Allow】
CLIv2を用いた方法
「Azure CLI」をインストールしてサインインを行います。
ストレージ アカウントの既定のルールの状態を表示します。【az storage account show –resource-group “myresourcegroup” –name “mystorageaccount” –query networkRuleSet.defaultAction】
既定でネットワーク アクセスを制限する既定のルールを設定します。【az storage account update –resource-group “myresourcegroup” –name “mystorageaccount” –default-action Deny】
既定でネットワーク アクセスを許可する既定のルールを設定します。【az storage account update –resource-group “myresourcegroup” –name “mystorageaccount” –default-action Allow】
仮想ネットワーク規則をストレージアカウントへ適用
所持しているストレージ アカウントに仮想ネットワーク規則を適用するには、追加されるサブネットに対する適切なアクセス許可が必要です。 必要なアクセス許可は [サブネットにサービスを参加させる] ことであり、[ストレージ アカウント共同作成者]の 組み込みロールに含まれます。 また、カスタム ロール定義に追加することもできます。しかし、異なるAzure Active Directoryテナントの一部である仮想ネットワーク内のサブネットへのアクセス許可のルールの構成を現在サポートしているのは「Powershell」や「CLI」「REST API」のみです。これらのルールをAzure portalを使用して構成することはできませんが、表示させるだけであればポータルで可能です。
Azure portalを用いた方法
セキュリティで保護するストレージ アカウントに移動します。
[Firewalls and virtual networks] という設定メニューをクリックします。
[選択されたネットワーク] からのアクセスを許可するよう選択します。
新規ネットワーク ルールを作成して仮想ネットワークへのアクセスを許可する場合、 [仮想ネットワーク] の [既存の仮想ネットワークを追加] → [仮想ネットワーク]→ [サブネット] の順に選択し、 [追加] を押します。
もし新規仮想ネットワークを作成して許可する場合には、 [新しい仮想ネットワークを追加] をクリックします。新規仮想ネットワークの作成に必要な情報を入力し [作成] をクリックして完了です。
仮想ネットワークあるいはサブネットルールを削除する場合、[…] をクリックして仮想ネットワークまたはサブネットのコンテキスト メニューから [削除] をクリックします。
最後に[保存] を押して更を適用します。
PowerShellを用いた方法
「Azure PowerShell」をインストールしてサインインします。
仮想ネットワーク規則を一覧表示します。【(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName “myresourcegroup” -AccountName “mystorageaccount”).VirtualNetworkRules】
既存の仮想ネットワークとサブネットで、Azure Storage 用のサービス エンドポイントを有効にします。【(Get-AzStorageAccountNetworkRuleSet -ResourceGroupName “myresourcegroup” -AccountName “mystorageaccount”).VirtualNetworkRules】
仮想ネットワークとサブネットに対するネットワーク ルールを追加します。
【$subnet = Get-AzVirtualNetwork -ResourceGroupName “myresourcegroup” -Name “myvnet” | Get-AzVirtualNetworkSubnetConfig -Name “mysubnet”】
【Add-AzStorageAccountNetworkRule -ResourceGroupName “myresourcegroup” -Name “mystorageaccount” -VirtualNetworkResourceId $subnet.Id】
仮想ネットワークとサブネットのネットワーク ルールを削除します。
【$subnet = Get-AzVirtualNetwork -ResourceGroupName “myresourcegroup” -Name “myvnet” | Get-AzVirtualNetworkSubnetConfig -Name “mysubnet”
Remove-AzStorageAccountNetworkRule -ResourceGroupName “myresourcegroup” -Name “mystorageaccount” -VirtualNetworkResourceId $subnet.Id】※[拒否]するよう既定のルールを設定します。
CLIv2を用いた方法
「Azure CLI」をインストールしてサインインします。
仮想ネットワーク規則を一覧表示します。【az storage account network-rule list –resource-group “myresourcegroup” –account-name “mystorageaccount” –query virtualNetworkRules】
既存の仮想ネットワークとサブネットで、Azure Storage 用のサービス エンドポイントを有効にします。【az network vnet subnet update –resource-group “myresourcegroup” –vnet-name “myvnet” –name “mysubnet” –service-endpoints “Microsoft.Storage”】
仮想ネットワークとサブネットに対するネットワーク ルールを追加します。【$subnetid=(az network vnet subnet show –resource-group “myresourcegroup” –vnet-name “myvnet” –name “mysubnet” –query id –output tsv)
az storage account network-rule add –resource-group “myresourcegroup” –account-name “mystorageaccount” –subnet $subnetid】
仮想ネットワークとサブネットのネットワーク ルールを削除します。【$subnetid=(az network vnet subnet show –resource-group “myresourcegroup” –vnet-name “myvnet” –name “mysubnet” –query id –output tsv)
az storage account network-rule remove –resource-group “myresourcegroup” –account-name “mystorageaccount” –subnet $subnetid】※[拒否]するよう既定のルールを設定します。
まとめ
いかがでしたでしょうか。上記の他にもIP範囲からのアクセスを制限したりとアクセス先を限定させることでセキュリティを強化することが出来ます。Azureストレージアカウントは便利な反面、他のサービスに共通することですが使い方によって不要なリスクを負って利用することになります。そうならないためにも賢く便利なサービスを活用したいものです。その取っ掛かりに途中までですが参考にしてくだされば幸いです。