【Microsoft Azure】プライベートエンドポイントへの接続をNSGで制御する(Public Preview)

こんばんは。今日はMicrosoft Azureのプライベートエンドポイントに関する記事です。

つい最近、プライベートエンドポイントへのアクセスに対してNSGが使えるようになった(パブリックプレビューになった)、という記事を発見しました。

https://azure.microsoft.com/ja-jp/updates/public-preview-of-private-link-network-security-group-support/

Private Endpoint support for Network Security Groups (NSGs) is now in public preview. This feature enhancement will provide you with the ability to enable advanced security controls on traffic destined to a private endpoint.

https://docs.microsoft.com/ja-jp/azure/private-link/disable-private-endpoint-network-policy

プライベート エンドポイントに対する NSG と UDR のサポートは、パブリック プレビュー段階です。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。

これまで、各種Azureリソースのプライベートエンドポイントに対しては、NSGによるアクセス制御は効かなかったのですが、この制約がなくなりつつあるようですね。

上記のAzure Updatesによると、現在は一部リージョン(UsEast2Euap, UsCentralEuap, WestCentralUS, WestUS, WestUS2, EastUS, EastUS2)のみで使えるようですが、今後東西日本リージョンでも使えるようになると良いですね・・!

今日は、実際にこの機能を使ってプライベートエンドポイントへのアクセス制御ができるようになるのか、試してみたいと思います。それではまいります。

と記事を書き始めた途中でみつけたのですが、既に同じことを試されている方がいました。こちらは、すべての手順がCLIベースでとても詳細にまとめられており、大変参考になるかと思います。

https://qiita.com/mnrst/items/cdfaaa17303e025884fd

今回実現する構成

以下の通り、SubnetAにVMをたてて、そこからWebAppsのプライベートエンドポイントへの接続をNSGによりコントロールできるようにしたいと思います。

プライベートエンドポイントを構成するリソースは何でも良いのですが、今回は馴染みのあるWebAppsを利用することにしました。

各種Azureリソースの作成

VNET + Subnet A, Bの作成

ここは割愛しますが、上記のSubnetA, B及びその親となるVNETを作成しておきます。

VMの作成

こちらも割愛しますが、規定値のまま、Windows Server 2019のVMでOKです。

Azure Bastionの作成

続いて、Azure Bastionリソースを作成します。これは、後ほどVMに接続するために利用します。

VMの接続ブレード>Bastionタブから作成すればOKです。

プライベートエンドポイントを有効化したWeb Appsの作成

新規Web Appsを作成します。ランタイム等は基本何でもよいのですが、プライベートエンドポイントはPremium以上のSKUでしかサポートされていないので、対応SKUのApp Service Planを利用します。

https://docs.microsoft.com/ja-jp/azure/app-service/networking/private-endpoint

プライベート エンドポイントは、App Service プランである PremiumV2PremiumV3Functions Premium (別名: Elastic Premium プラン) でホストされている Windows および Linux の Web アプリ (コンテナー化されているかどうかにかかわらず) で使用できます。

加えて、今回の機能が使えるWestUSリージョンで作る点に注意します。

リソースのデプロイが完了したら、ネットワークブレードより、プライベートエンドポイントの設定画面に進みます。

NSGの作成

続いて、NSGを作成します。今回は、このNSGはサブネットBに適用することになりますので、サブネットAのVMからの通信を制御するため、受信規則をいじります。

テストのため、すべてのインバウンド通信を拒否する設定を追加しておきます。(NSG名は、この設定内容とリンクしていませんが気にしないでください)

最後に、このNSGを、サブネットBに紐づけます。

以上で、必要なリソースの準備が完了しました。

接続テスト(機能有効化前)

必要なリソースが揃ったところで、一度VMからプライベートエンドポイントへの接続をテストしておきます。現時点ではNSGは効かないはずなので、問題なく接続できるはずです。

Azure Bastionを使ってVMに接続し・・・

WebAppsのURLをたたきます。つながりましたね。

さて、それではここからNSGによる制御が効くように構成変更をしていきたいと思います。

NSGでプライベートエンドポイントへのアクセスを制御する

いよいよ本題です。Azureの更新情報を見ると、以下のような説明があります。

https://azure.microsoft.com/ja-jp/updates/public-preview-of-private-link-network-security-group-support/

 In order to leverage this feature, you will need to set a specific subnet level property, called PrivateEndpointNetworkPolicies, to Enabled. In addition to toggling this property, you will need to also register for the Microsoft.Network/AllowPrivateEndpointNSG feature (note that registation time may take up to 15mins).

いずれも初めて聞く設定ですが、PrivateEndpointNetworkPoliciesの有効化、及びMicrosoft.Network/AllowPrivateEndpointNSG Featureの登録が必要になるようです。

それぞれ実施していきます。

Preview機能を有効化する

Azureポータルから、Azure CLIを開いて以下のコマンドを打てばOKです。

## 機能の登録
az feature register \
  --namespace Microsoft.Network \
  --name AllowPrivateEndpointNSG

## AllowPrivateEndpointNSG機能を伝達させます(なんのこっちゃ)
az provider register \
  -n Microsoft.Network

これを実行すると、”state”が”Registering”として結果が返ってきます。これ、Registeredになるまで待つ必要があります。私が実験したときには、10~15分程度かかったと思います。

以下のコマンドで定期的に状況を確認し、”Registered”になったらこのステップは完了です。

az feature register \
  --namespace Microsoft.Network \
  --name AllowPrivateEndpointNSG \
  --query properties.state \
  --output tsv

サブネットのPrivateEndpointNetworkPolicyを有効化する

次にサブネットBのPrivateEndpointNetworkPolicyの有効化。まずは、Azure Resource Explorerで(https://azure.microsoft.com/ja-jp/blog/azure-resource-explorer-a-new-tool-to-discover-the-azure-api/)でプライベートエンドポイントを構成したサブネット(サブネットB)の変更前の構成情報を見てみる。

確かにプロパティが存在していて、かつDisabledになっている。

この状態は以下Docの通り、想定通り。

https://docs.microsoft.com/ja-jp/azure/private-link/disable-private-endpoint-network-policy

ポータルを使用してプライベート エンドポイントを作成する場合、PrivateEndpointNetworkPolicies 設定は作成プロセスの一環として自動的に無効になります。

これを、以下のコマンドで有効化します。

https://docs.microsoft.com/ja-jp/azure/private-link/disable-private-endpoint-network-policy#enable-network-policy

az network vnet subnet update \ 
  --disable-private-endpoint-network-policies false \
  --name XXXX (サブネット名) \ 
  --resource-group XXXXX \ 
  --vnet-name XXXXXX \ 

これで、NSGが効くようになりました。

接続テスト(構成変更後)

ので、先ほどと同様VMからWebAppsのURLへアクセスしてみると・・・

NSGのDeny ALLに阻まれて、アクセスできなくなりました・・・!想定通り、NSGでプライベートエンドポイントへのアクセスを制御できるようになることが確認できました。

以上、NSGでプライベートエンドポイントへのアクセスを制御する方法の解説でした!

今後この機能を使うことで、プライベートエンドポイント宛のアクセスをより細かく制御できるようになりそうですね・・・!

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。