JavaScriptを有効にしてください

Storage Account のネットワーク制限を深掘り隊

 ·   4 分で読めます  ·   Kento

Azure Storage Account のネットワークセキュリティ機能の挙動について、特に公式ドキュメントに記載されている以下のポイントを検証してみました。

ストレージ アカウントと同じ Azure リージョン内のクライアントへのアクセスを制限する。 IP ネットワーク ルールは、ストレージ アカウントと同じ Azure リージョンから送信された要求には影響しません。 同じリージョンの要求を許可するには、仮想ネットワーク規則を使用します。

引用元: Azure Storage ファイアウォールおよび仮想ネットワークを構成する

この動作がどういう意味を持つのか、実際に検証して確認してみましょう。

Storage Account のネットワーク制限の概要

Storage Account では、以下のようなネットワークセキュリティ機能が提供されています。その一部を紹介します。

  1. パブリックネットワークアクセスの有効化/無効化
  2. 特定の IP アドレスやアドレス範囲からのアクセス許可
  3. 特定の仮想ネットワーク (VNet) からのアクセス許可(サービスエンドポイント)
  4. プライベートエンドポイントの設定

この他にも、条件付きアクセスやマネージド ID との統合など、様々なセキュリティ機能があります。

特に、サービスエンドポイントは Azure 仮想ネットワーク内からのトラフィックにのみ最適化されたルートを提供するもので、パブリックインターネットを経由せずに Azure バックボーンネットワーク上でアクセスが可能になります。

しかし、公式ドキュメントによると、IP ネットワークルールは「同じ Azure リージョンから送信された要求には影響しない」とされています。これは何を意味するのでしょうか?

検証環境の準備

1. リソースグループの作成

まず、検証用のリソースグループを作成します。

2. Storage Account の作成

ネットワーク制限を設定するための Storage Account を作成します。

3. 2つの異なる仮想マシンを作成

次に、検証用の仮想マシンを2つ作成します。

  1. 同じリージョンに VM1 を作成
  2. 異なるリージョンに VM2 を作成
architecture-beta
  group vnetregiona[RegionA]
    service vm1(azure:virtual-machine)[VM1] in vnetregiona
    service stg(azure:storage-accounts)[StorageAccount] in vnetregiona


  group vnetregionb[RegionB]
    service vm2(azure:virtual-machine)[VM2] in vnetregionb

vm1:R -- L:stg
vm2:R -- L:stg

ネットワーク制限の設定

Storage Account のネットワークセキュリティ設定を構成します。

  1. Storage Account の「ネットワーク」ブレードを開きます
  2. 「パブリックネットワークアクセス」を「選択されたネットワーク」に設定します
  3. ファイアウォールの設定で特定の IP アドレスのみを許可します(VM1 と VM2 のパブリック IP)
storage_network_settings
ネットワーク設定: 特定の IP アドレスからのアクセスのみを許可する設定

検証

1. 同じリージョンの VM1 からのアクセステスト

VM1 から Azure Portal にログインし、制限を設定した Storage Account にアクセスを試みます。
同一リージョンの VM からは パブリック IP を許可リストに入れていてもアクセスできません
しかもエラーとしてパブリック IP を許可リストに入れるように表示されてしまいます

vm1_access
同じリージョンの VM からのアクセス: IP 制限を設定していても同じリージョンからはアクセス不可

2. 異なるリージョンの VM2 からのアクセステスト

VM2 から Azure Portal にログインし、制限を設定した Storage Account にアクセスを試みます
なんの問題もなくアクセスできました

vm2_access
別リージョンの VM からのアクセス: 許可したIPアドレスからはアクセス可能

3. 同じリージョンの VM1 からのアクセステスト(サービスエンドポイント)

公式ドキュメントの記載通り、同じリージョンからの要求を制限したい場合は、IP ルールではなく 仮想ネットワーク規則 を使用する必要があります。
まずは設定します

vm1_service_endpoint
サービスエンドポイントの設定: VM1 の VNet にサービスエンドポイントを追加

改めて VM1 から Storage Account にアクセスを試みます
今度は普通にアクセスできました

vm1_service_endpoint_access
サービスエンドポイントを利用したアクセス: サービスエンドポイントを利用してアクセス可能

まとめ

今回の検証で、以下のことが確認できました。

  1. Storage Account に IP ベースのネットワーク制限を設定しても、同じリージョンからのアクセスには影響しない
  2. 異なるリージョンからのアクセスは、IP 制限の設定通りに制御される
  3. 同じリージョンからのアクセスを制限するには、仮想ネットワーク規則を使用する必要がある

参考

共有

Kento
著者
Kento
2020年に新卒で IT 企業に入社. インフラエンジニア(主にクラウド)として活動中