🥅

「信頼されたAzureサービスからのアクセス」について

2024/05/29に公開

はじめに

Azureで利用する主にPaaSのサービスにおいて、セキュリティや統制の観点から接続元(のIPアドレス)を制限することはよくあります。
その中で「信頼されたAzureサービスからのアクセス」といった表現の設定において、これは勘違いがありそうだなぁというネタがったのでまとめてみます。

よくある接続元制限設定

代表例としてストレージアカウントのネットワーク設定を見ると、何種類かのアクセス元制限に関する設定があります。ここはちゃんと理解されている方は読み飛ばしていただいて構いません。

①パブリックネットワークアクセス:すべてのネットワークから有効

要するに「制限なし」です。文字通りなので割愛します。
これ以降の記載は「原則拒否」ただし「特定条件に合致すると許可」の説明です。

②パブリックネットワークアクセス:選択した仮想ネットワークとIPアドレスから有効

仮想ネットワーク

特定のVNETにてサービスエンドポイントを有効化し、その範囲(VNET/サブネット内)からのアクセスを許可します。

IPアドレス

「インターネットまたはオンプレミスのネットワークからのアクセスを許可するための IP 範囲を追加します」との説明の通り、Azure外からのアクセスを許可するための設定です。企業利用の場合「社内外の境界にいるProxyサーバーのグローバルIP」を設定して、作業端末からのアクセスを許可するといったパターンが多いと思います。

③例外

上記のネットワークルールの例外として許可する設定です。今回の記事で取り上げたいのが以下の設定です。

詳細は後述します。

④プライベートエンドポイント接続

プライベートエンドポイントを作成し、そこ経由でのアクセスを許可します。
プライベートエンドポイントの場合、そのプライベートエンドポイントを配置するVNET/サブネット内だけでなく、当該エンドポイントにIPリーチャブルな環境からであれば利用可能である、という点が②のサービスエンドポイント型との違いです。

例外設定(本題)

AzureのPaaSに対するアクセス許可における「例外設定」の意図としては、接続元をIPアドレスなどで指定することができない「PaaS(MSプラットフォーム内のどこか)」からのアクセスを想定するための機能です。
大きく2パターンの例外設定があるのですが、この違いに注意が必要です。

「信頼されたサービスからのアクセスを許可する」パターン

上で説明した通り、StorageAccountはこちらのパターンです。許可される範囲が「信頼されたAzureサービス」ということで、何をもって「信頼」とするかがポイントになります。
https://learn.microsoft.com/ja-jp/azure/storage/common/storage-network-security?tabs=azure-portal#grant-access-to-trusted-azure-services

サブスクリプションに登録されているリソースへの信頼されたアクセス

ストレージアカウントと同じサブスクリプション内の一部のサービスからのアクセスを許可します。例えば「Azure Backup」などが代表例で、バックアップデータを取得してきてストレージアカウントに書き込む…といった操作を、許可することができます。
仮にこの機能がなかったとすると、AzureBackupを使うために、Azure内でMicrosoft社が使いうるパブリックIPアドレス全体に対して解放する必要が出てきます。実質的に、インターネット全体に対して開けましょうと言ってるのと同義です。

マネージド ID に基づく信頼されたアクセス

上と似たような概念ですが、例えば「Azure Data Factory」がストレージアカウントからデータを取得/書き込みするようなシーンで、マネージドIDを使ってアクセス権を正しく保有している場合、ネットワークの許可ルールの例外としてアクセスを許可することができます。

この2点の例外設定に共通して言えることは、同じサブスクリプションやテナント内のみがアクセス許可対象になるということです。

「Azureサービスおよびリソースにこのサーバーへのアクセスを許可する」パターン

一方で、「信頼された」という文言がつかない例外設定を行えるPaaSが存在します。代表例がSQL Databaseです。
https://learn.microsoft.com/ja-jp/azure/azure-sql/database/network-access-controls-overview?view=azuresql#allow-azure-services

この時、接続元として許可される対象についてはドキュメントに注意書きとして明記されており、

つまり、上で紹介したStorageAccountにある「信頼された」という言葉がなくなったことで、「Azure内であれば他人の環境からでもアクセス可能」ということになります。SQL DatabaseはPaaSサービス側に認証機能があるからでしょうか?(SQL Server認証や、AzureAD認証)
ちょっと背景はわかりませんが、仕様に違いがあることは確かです。

信頼されたサービスからのアクセスを許可することができるサービス

では、「信頼された」という文言が付くサービスにはどのようなものがあるのでしょうか。全件は網羅できていませんが、代表的なものとして目立つものを記載します。なお、「信頼されたMicrosoftサービス」だったり「信頼されたAzureサービス」だったり、文言がぶれているように見えますが、それ以上に接続先サービスが「何を接続元サービスとして信頼するか」は接続先サービスごとにバラバラですので、基本的にはサービスを利用する都度仕様を確認する必要があります。

対象サービス 備考 参考URL
Azure Container Registry 「マネージド ID の追加の構成、RBAC ロールの割り当て、およびレジストリによる認証が必要」 https://learn.microsoft.com/ja-jp/azure/container-registry/allow-access-trusted-services
Storage Account 同じサブスクリプションで動く特定サービス(Azure Backupなど)+Managed IDでのアクセス(Data Factoryなど) https://learn.microsoft.com/ja-jp/azure/storage/common/storage-network-security?tabs=azure-portal#grant-access-to-trusted-azure-services
Key Vault 「関連するKey Vault RBACロールの割り当てまたはアクセスポリシー (レガシー) を設定する必要があります」 https://learn.microsoft.com/ja-jp/azure/key-vault/general/overview-vnet-service-endpoints#trusted-services
Azure Service Bus マネージド ID やポリシーによる許可が必要 https://learn.microsoft.com/ja-jp/azure/service-bus-messaging/service-bus-ip-filtering#trusted-microsoft-services
Azure OpenAI REST APIでのみ設定可能 https://learn.microsoft.com/ja-jp/azure/ai-services/cognitive-services-virtual-networks?tabs=portal#grant-access-to-trusted-azure-services-for-azure-openai
Event Hubs 「同じテナント内の次のサービスに Event Hubs リソースへのアクセス権」という表現・マネージドIDでのアクセス権付与が必要 https://learn.microsoft.com/ja-jp/azure/event-hubs/event-hubs-ip-filtering

おわりに

似たポジションにある「~サービスからのアクセス許可」設定ですが、対象サービスにより全然効果が違うんだということをまとめました。
うっかり意味を取り違えると、スッカスカのネットワーク設定になってしまうこともあり得ますので、注意してご利用下さい。

Discussion