🔚
ストレージアカウントのリージョン間サービスエンドポイントの挙動を確認しつつログ見たりする
モチベ
- ストレージアカウントのリージョン間サービスエンドポイントというものがGAしたので触ってみる
- そもそもサービスエンドポイントの検証ってあまりしたことがない
- きちんとソースIPがプライベートIPになっているかの確認、等
- この辺も一通り動作確認できればいいよね、という感じ
サービスエンドポイントとは?
仮想ネットワーク (VNet) サービス エンドポイントでは、Azure のバックボーン ネットワーク上で最適化されたルートを介して、Azure サービスに安全に直接接続できます。 エンドポイントを使用することで、重要な Azure サービス リソースへのアクセスを仮想ネットワークのみに限定することができます。 サービス エンドポイントを使用すると、VNet 内のプライベート IP アドレスは、VNet 上のパブリック IP アドレスを必要とせずに、Azure サービスのエンドポイントに接続できます。
- つまり、VNET上のVM等のリソースがAzure PaaSサービスにアクセスする際に不要なNATを介さずにプライベートIPのままアクセスできる仕組み
- プライベートアドレス空間は重複する可能性があるため、通常はAzure PaaS側のネットワークルールで接続を許可するVNET(のリソースID)を指定することで厳密に特定のセグメントからしかアクセスできないように構成可能
ストレージアカウントのリージョン間サービスエンドポイント
- 従来ストレージアカウントのサービスエンドポイント(
Microsoft.Storage
)といえば、サービスエンドポイントを追加するVNETのリージョン及びそのペアリージョン(例:東日本、西日本)のストレージアカウントに対する接続がプライベートIPから行えるというものだった - リージョン間サービスエンドポイント(
Microsoft.Storage.Global
)では、その制約から開放され、その他のリージョンにあるストレージアカウントへのアクセスもサービスエンドポイント経由とすることが可能
環境構築
- VNETを東日本に作成
- Windows VMを1台追加
- public IP:
20.xxx.xxx.xxx
- private IP:
10.0.0.4
- public IP:
- ストレージアカウント1を東日本に作成
- ストレージアカウント2を米国東部に作成
- Log Analytics Workspaceを任意のリージョンに作成(ログ見るだけ)
- ソースIPを確かめるためにそれぞれのストレージアカウントで診断設定を構成
通常のサービスエンドポイントの場合
- 作成したVNETの[サービスエンドポイント]から
Microsoft.Storage
を追加
- 作成したWindows VMにRDP接続しAzure Portalを利用して東日本のストレージアカウント1上で色々と適当に操作をしてログを残す
- 米国東部のストレージアカウント2上でも色々と操作をしてログを残す
リソースコンテキストでログを確認
- 東日本のストレージアカウント1のリソースコンテキスト(ストレージアカウントの[ログ]メニュー)で例えば以下のようなクエリを流してみる
StorageBlobLogs
| where OperationName == "ListBlobs"
| project AccountName, OperationName, CallerIpAddress, TimeGenerated
| order by TimeGenerated desc
-
すると確かに、10.0.0.4というプライベートIPからのAPIコールが来ていることが分かる
-
米国東部のストレージアカウント2側でも同様のクエリを流してみる
- こちらはWindows VMにアタッチされたパブリックIP側でAPIコールしていることが分かる
- こちらはWindows VMにアタッチされたパブリックIP側でAPIコールしていることが分かる
リージョン間サービスエンドポイントの場合
- 通常のサービスエンドポイントがある状態だとリージョン間サービスエンドポイントが追加できないので、削除してから追加する
- すると、米国東部のストレージアカウント2側でもVMのプライベートIPでログが記録されている
まとめ
- ストレージアカウントのサービスエンドポイント/リージョン間サービスエンドポイントを構成した
- それぞれの違いを比較した
- ストレージアカウントへの接続元IPの取得のためにログの構成およびクエリを実施した
- 結果、
Microsoft.Storage
の場合はローカルに対して、Microsoft.Storage.Globa
の場合はグローバルに対してプライベートIPで見に行くことがわかった
最近だと大体プライベートエンドポイントの話に落ち着きがちだけど、サービスエンドポイントは無料なので、ね。
GitHubで編集を提案
Discussion