Service Endpoint Policiesを試す

azure
Published: 2018-10-14

はじめに

Microsoft Ignite 2018 で Service Endpoint Policies という新機能がアナウンスされました。本エントリーでは、この Service Endpoint Policies を試した結果をまとめます。

Service Endpoint Policies とは

Service Endpoint Policies とは Service Endpoint 経由でアクセスできる Azure サービスを制限する機能です。2018年10月現在、Service Endpoint Policies はプレビューであり、対象サービスもAzure Storage に限られています。

そもそも、Service Endpoint とは、VNet 内のサブネットに Azure サービスへの裏口を作る機能です。Service Endpoint を有効にすると、Azure サービスで利用されているグローバルIPアドレス宛てのルーティングがサブネットに注入されます。そのため、グローバルIPアドレスで提供されている Azure サービスあての通信が0.0.0.0/0にマッチしなくなり、裏口から抜けていくようになります。Service Endpoint で Storage を有効にすると、次のようなルーティングが注入されます。

ただし、Azure サービスはマルチテナントなので、複数のユーザが同じアドレスを利用しています。そのため、この裏口を経由して他人の所有する Azure リソースにもアクセスできてしまいます。これまでは、裏口経由でアクセスできる Azure リソースを制限できませんでした。これを制限できるようにするのが Service Endpoint Policies です。

参考:BRK2311 - Planning network security for your mission-critical workloads with Virtual Networks (VNets)

動作確認

事前準備

Service Endpoint 経由でストレージアカウントにだけアクセスできるサブネットを用意します。

Service Endpoint を Azure Storage に対して有効にします。Azure Storage を有効にした場合、VNet と同じリージョンとペアリージョンへの裏口ができます。

さらに、UDRを利用して0.0.0.0/0をVNet内の利用していないIPアドレスに向けます。これでこのサブネット上の Virtual Machine は VNet 内と Azure Storage にのみアクセスできます。インターネット経由で Azure にはアクセスできません。

Service Endpoint Policies なしの動作

Blob Storage に誰でも読み取りできるファイルを置いたうえで、Virtual Machine から Invoke-WebRequest しました。結果は以下の通りです。VNetと同のサブスクリプション配下のストレージアカウントだけでなく、他のサブスクリプション配下のストレージアカウントにもアクセスできてしまいます。これは期待された動作です。

対象 サブスクリプション 作成時期 バージョン 場所 結果
その1 VNetと同じサブスクリプション 以前からあった StorageV2 VNetと同じ アクセスできた
その2 VNetと同じサブスクリプション 今回のために作った StorageV1 VNetと同じ アクセスできた
その3 別サブスクリプション 以前からあった StorageV1 VNetと同じ アクセスできた
その4 別サブスクリプション 今回のために作った StorageV2 VNetと同じ アクセスできた
その5 別サブスクリプション 今回のために作った StorageV1 VNetと同じ アクセスできた

Service Endpoint Policies ありの動作

Service Endpoint Policies で設定できる許可の範囲は次の3択です。

  1. 特定のストレージアカウント
  2. 特定のリソースグループ内の全ストレージアカウント
  3. 現在のサブスクリプション内の全ストレージアカウント

今回は、ストレージアカウントその1(aimless1010v1)のみを許可する Service Endpoint Policies を上記の Virtual Machine が接続しているサブネットに適用します。

結果は次の通りです。なぜかストレージアカウントその3にアクセスできてしまう点を除けば、想定通りの動作です。Service Endpoint Policies で許可されていないストレージアカウントへのアクセスは「AuthorizationFailureThis request is not authorized to perform this operation.」でエラーになります。

対象 サブスクリプション 作成時期 バージョン 場所 結果
その1 VNetと同じサブスクリプション 以前からあった StorageV2 VNetと同じ アクセスできた
その2 VNetと同じサブスクリプション 今回のために作った StorageV1 VNetと同じ アクセスできない
その3 別サブスクリプション 以前からあった StorageV1 VNetと同じ アクセスできた
その4 別サブスクリプション 今回のために作った StorageV2 VNetと同じ アクセスできない
その5 別サブスクリプション 今回のために作った StorageV1 VNetと同じ アクセスできない

また、許可されたストレージアカウントにのみアクセスできるのであれば、Virtual Machine は Azure IaaS VM Backup 用の Azure Storageにアクセスできないはずです。ですが、Azure IaaS VM Backupは成功しました。これも想定外です・・・。

まとめ

若干の想定外が発生しましたが、意図した Azure サービスのみを許可することができました。Service Endpoint Policies を利用することで、利便性とセキュリティを両立できるようになります。今回発生した想定外は仕様だと思うので、ドキュメントが更新されるのを待ちます。