Azure Network Security Perimeter がパブリックプレビュー (2024/11/20) となっています。Azure PaaS リソースの論理ネットワークの境界を作るサービスですが、実際にどういったことができるのかを試してみましたので、ご利用の際に、参考になれば幸いです。
利用シナリオ
- PaaS のファイアウォール設定を一元管理したい
- PaaS のファイアウォールのログを一元管理したい
- AI Search 等からのアウトバウンドの通信を制御したい
- マネージド ID を使った通信をサブスクリプション単位で通信制御を行いたい
- サービスタグを使って送受信の通信制御を行いたい (現時点で利用不可)
Network Security Group との違い
- NSG が対応しているのは VNet 上のリソース (VM, VMSS, Private Endpoint, Application Gateway 等) のみ
サポートされるリソース
留意点
- IP レンジの指定はパブリック IP アドレスのみ
- Azure Storage へのアクセスの場合、同じリージョンのパブリック IP アドレスからの通信はプライベート IP となるため IP アドレスレンジでは制御できない
設定手順
前提:
- AI Search, BLOB Storage が作成済みであること
- ポータル経由で操作できるようにネットワーク設定されていること
- AllowNSPInPublicPreview の機能が登録済みであること
リソース作成
こちらの手順に従ってリソースを作成します。送受信の規則はあとで作成するためスキップします。
プロファイル作成
プロファイル (送受信ルールと関連付けるリソースをまとめたもの) を作成します。
インバウンドルールを作成します。次の動作確認で使えるように特定のパブリック IP アドレスからの通信のみ受け付けられるようにします。
アウトバウンドルールはスキップしてプロファイルを作成します。
動作確認
インバウンド
IP アドレス制限
Azure の Public IP アドレスからの通信を許可するような設定を試します。
東日本リージョンのパブリック IP アドレスだとストレージの制限でうまく動作しなかったため、東南アジアリージョンを使っています。
インバウンドルールで NAT Gateway のパブリック IP アドレスを指定しておきます。(事前実施)
対称のストレージに関連付けを行い、学習モードにしておきます。学習モードの場合は各 PaaS のファイアウォールの動作に従います。
Azure VM からも外部の端末からもアクセス可能なことを確認します。
ログにも異なる IP アドレスからの通信が許可されていることがわかります。
強制モードに切り替えます。強制モードの場合は NSP のルールの設定に従います。
ルールで許可されていないパブリック IP アドレスからの通信は拒否されるようになりました。
ログからもルールで許可されていないパブリック IP アドレスからの通信が拒否されていることがわかります。
サービスタグ
az account set --subscription 8ac4d210-xxxx-xxxx-xxxx-e03dc217172c
az network perimeter profile access-rule create -n MyAccessRule --profile-name profile2 --perimeter-name testnsp1 -g rg-nsp-test-01 --service-tags AzureCloud --direction "Inbound"
以下のようなエラーがでて利用できませんでした。今後の機能追加を待ちたいと思います。
"Message: AFEC flag EnableServiceTagsInNsp should be registered on the subscription: 8ac4d210-xxxx-xxxx-xxxx-e03dc217172c to process the Access Rule with Service Tags."
また、Azure Storage へのインバウンド方向のアクセスは同じリージョン内のサービスタグでは制御できないと思われますので注意が必要です。
理由は以下の通り、同じリージョン内のアクセスの場合、送信元がプライベート IP となるためサービスタグでは対応できないからです。
ストレージ アカウントと同じリージョンにデプロイされている Azure サービスへのアクセスを制限する。 ストレージ アカウントと同じリージョンでデプロイされたサービスでは、プライベート Azure IP アドレスが通信に使用されます。 そのため、特定の Azure サービスへのアクセスを、そのパブリック送信 IP アドレスの範囲に基づいて制限することはできません。
サブスクリプション
以下のような構成を作成し、NSP にて制御できることを確認していきます。
プロファイルを作成し、特定のサブスクリプション (図のサブスクリプション B) のインバウンド通信を許可するルールを作成しておきます。
AI Search で BLOB ストレージからインデックス作成を行う操作を実施して、バリデーションが通ることを確認します。
サブスクリプション A の AI Search の操作
サブスクリプション B の AI Search の操作
サブスクリプション A の方の AI Search の画面。操作が拒否されていることがわかります。
ログからもサブスクリプション A の方の操作が拒否されていることがわかります。
アウトバウンド
IP アドレス、サブスクリプション、サービスタグの指定は現時点ではできないようです。CLI で駄目したところ以下のエラーがでました。EmailAddresses or PhoneNumbers の利用用途は不明。。
"(BadRequest) Either FQDNs or EmailAddresses or PhoneNumbers are mandatory for outbound access rules."
FQDN
特定の FQDN のみ許可するようなアウトバウンドルールを作成して動作を確認します。
特定の FQDN のみ許可するようなアウトバウンドルールを作成します。インバウンドルールは Azure Portal での操作が可能なように最低限のルールを入れておきます。
AI Search を関連付けし、強制モードに切り替えます。
FQDN が許可されていない BLOB ストレージへの接続は拒否されました。
FQDN が許可されている方の BLOB ストレージへの接続は問題なくアクセスできます。
ログからも特定の FQDN 以外へのアウトバウンド通信が拒否されていることがわかります。
モードの整理
パブリックネットワークアクセス
PaaS のパブリックネットワークアクセスと同じ概念で PaaS のファイアウォールを上書きできる。元々、ファイアウォールには送信規則の概念がなかったため、SecuredByPerimeter モードのみ送信拒否が加わっています。
NSP のみで運用したい場合は強制モードを使うことですぐに実現可能です。
パブリックネットワークアクセス | 学習モード (ルール無し) | 学習モード (ルールあり) | 強制モード(ルールあり) | ||||||
NSP | PaaS FW | ANY | NSP | PaaS FW | ANY | NSP | PaaS FW | ANY | |
Enabled (受信) | × | 〇 | × | 〇 | 〇 | × | 〇 | × | × |
Enabled (送信) | - | - | 〇 | - | - | 〇 | 〇 | × | × |
Disabled (受信) | × | × | × | 〇 | × | × | 〇 | × | × |
Disabled (送信) | - | - | 〇 | - | - | 〇 | 〇 | × | × |
SecuredByPerimeter (受信) | × | × | × | 〇 | × | × | 〇 | × | × |
SecuredByPerimeter (送信) | × | × | × | 〇 | × | × | 〇 | × | × |
ただし、以下のような例外もあるため要件に合うかは確認が必要です。
信頼されたアクセス: ネットワーク セキュリティ境界では、信頼されたアクセスよりも詳細な制御が提供されるため、信頼されたアクセスは強制モードではサポートされていません。
プライベート アクセス: プライベート リンク経由のアクセスは、ネットワーク セキュリティ境界の影響を受けません。
プライベートエンドポイントのログは記録されるか?
試してみましたが、プライベートエンドポイント経由の通信は異なる IP アドレスで記録されており、通信ログとしては十分ではなさそうです。