皆さんこんにちは。内苑です。
Azure Private Link のプレビュー版の提供が開始され、PaaS リソースや、ピアリングされていない仮想ネットワーク上にデプロイされた独自サービスに対してプライベート接続が可能になりました。少し前にリリースされた機能で、PaaS リソースが仮想ネットワークを識別して通信制御を実現するためのサービスエンドポイントというものがありましたが、この機能との違いなどにも触れながら内容を紹介していきたいと思います。
Azure Private の特徴を以下に記載します。
内容は公開情報に記載のものをかみ砕いてご紹介します。
参考:Azure Private Link とは
https://docs.microsoft.com/ja-jp/azure/private-link/private-link-overview
・Azure SQL Database
・Azure SQL Data Warehouse
・Azure Storage
・Azure Data Lake Storage Gen2
・Azure Cosmos DB
・独自サービス
Azure Private Link を使用した PaaS リソースへのプライベートアクセスの動作を確認するため、以下のリソースを作成しました。リージョンは全て米国西部で統一しています。
準備段階での構成は以下図の通りとなります。
srv-subnet に適用している NSG の設定にて、インターネット方向の通信を遮断しているため、remote-vm は PaaS 領域に配置されている pldev-sqldb に接続することができません。
このサブネット内にプライベートエンドポイントを作成することにより、pldev-sqldb へのプライベート通信を実現します。それでは早速プライベートエンドポイントを作成していきます。
[すべてのサービス]の検索ボックスに[プライベート]と入力し、[プライベートリンクセンター]を選択します。
[プライベートエンドポイント]タブにて[追加]を選択し、プライベートエンドポイントの設定を入力していきます。
これでサービスエンドポイントが作成され、srv-subnet に所属する動作検証用 VM(remote-vm)から動作検証用 SQL Database(pldev-sqldb)へのプライベート通信が可能な状態となりました。以下のような構成イメージとなります。
remote-vm にログインし、コマンドプロンプトにて pldev-sqlserver の名前解決を行います。
エンドポイント作成時に新規作成したプライベート DNS ゾーンがプライベートアドレスの値を返します。
この状態で、SSMS(SQL Server Management Studio)を使って pledev-sqldb に接続を試みます。
上記のように、インターネット通信を遮断した状態で、PaaS 領域に配置されている SQL Database に接続することができました。
SQL Database 側から、クライアントの接続 IP がどう見えているかも確認してみましたが、プライベート IP から来ているように見えます。
SQL Server 側ではどのようにプライベートエンドポイントの設定が反映されているかというと、以下のようになっています。
pldev-sqlserver のリソース画面にて、[プライベートエンドポイント接続]タブを選択します。
先ほど作成したプライベートエンドポイントの名前が頭についた接続名が表示され、[状態]が[Approved]になっていますね。「◇ プライベートエンドポイントの作成」にて、[マイディレクトリ内の Azure リソースに接続します]を選択したため、[要求/応答メッセージ]の値が[Auto-Approved]となり、自動的に接続が承認される動作となるようです。
PaaS リソース側が仮想ネットワークを識別してアクセス許可を設定可能にする機能でサービスエンドポイントというものがあります。今回の Private Link との機能比較を以下にまとめましたので参考にしていただければと思います。
左右にスクロールしてご覧ください。
比較要素 | サービスエンドポイント | Private Link |
---|---|---|
通信方式(to PaaS) | パブリック | プライベート |
接続制限(受信) | リソースのファイアウォール設定 | エンドポイント接続要求の許可/拒否 |
接続制限(送信) | サービスエンドポイントの有効化 サービスエンドポイントポリシーの定義 |
エンドポイント作成時に接続先の PaaS リソースを指定 |
リージョンの制限 | ストレージと SQL は例外的にネットワークリソースと PaaS リソースが同一リージョンに配置されている必要がある | なし |
サービスエンドポイントでは、仮想ネットワークでサービスエンドポイントを有効化し、NSG のサービスタグを使用して接続する PaaS リソースの種類、リージョンを絞って許可し、サービスエンドポイントポリシーを適用して特定リソースのみへの接続のみを許可して接続制御を設定します。
それに対して、Private Link では、プライベートエンドポイントを作成して接続したい PaaS リソースを選択するだけで接続制御を設定できます。
ですので、サービスエンドポイントより Private Link の方がシンプルで分かりやすいです。
恐らく多くの Azure ユーザーが待ち望んでいた PaaS へのプライベートアクセス機能が、ものすごくシンプルな形で提供されるようになったように思えます。サービスエンドポイントのリリース時は、PaaS が VNet を識別して、VNet ごとに制御できるようになるということで、なんと画期的な機能なんだと感心しましたが、今回はそれを上回るリリースだと思います。ネットワーク側の変更などは特に必要なく実装可能なので、ぜひお試しください!