自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Azure】サービスエンドポイントについて

今回はサービスエンドポイントについてです。

■はじめに

サービスエンドポイントは、
仮想ネットワーク内のAzureリソース(仮想マシン等)からAzureが提供しているPaaS(※1)にアクセスする際の通信手段の一つです。

※1
すべてのPaaSが対象になっているわけではなく、
以下リンク先の「一般公開」「パブリックプレビュー」に記載されているPaaSを利用しているときには、サービスエンドポイントを利用することができます。

Azure 仮想ネットワーク サービス エンドポイント | Microsoft Docs

 

■サービスエンドポイントの料金

発生しません。
※PaaSの利用料はもちろんかかります。

■サービスエンドポイントの制限

「サービスエンドポイントを使おう」と思って設定を進めていく中で残念な結果にならないように、サービスエンドポイントを利用したPaaS接続での制限事項について先に記載致します。

制限事項は主に以下の2つです。
・仮想ネットワークとPaaSのリージョンは同じにする
・通信の開始は必ず、仮想ネットワーク(内のAzureリソース)からPaaS ※逆はNG

 

■サービスエンドポイントを利用する理由

通常、Vnet上の仮想マシンからAzure SQL Database(PaaS)に接続する際、
デフォルトではインターネット経由でアクセスすることになります。

インターネット経由での通信となるので、仮想マシンもAzure SQL DatabaseもパブリックIPアドレスを使って通信します。
(送信元:仮想マシンのパブリックIPアドレス、宛先:Azure SQL DatabaseのパブリックIPアドレス。通信経路:インターネット)

サービスエンドポイントは、
インターネット経由ではなくローカルネットワーク経由(正確には、Microsoftネットワーク上。バックボーンネットワークとも言います)で接続することができます。
つまり、通信データがインターネットを流れないため、セキュアな通信が可能となります。
(送信元:仮想マシンのプライベートIPアドレス、宛先:Azure SQL DatabaseのパブリックIPアドレス。通信経路:Microsoftネットワーク)

■サービスエンドポイントを利用するパターン

「Vnet上のリソースからPaaSへの接続」が大半です。

■サービスエンドポイント設定の流れ

サービスエンドポイントの設定は以下の流れで行います。
1.サブネット設定にて、接続したいPaaSへのサービスエンドポイントを有効化する
2.PaaS側でサービスエンドポイントを利用した通信となるように設定を行う

■1.サブネット設定にて、接続したいPaaSへのサービスエンドポイントを有効化する

サービスエンドポイントはサブネットのオプション設定です。
具体的には、下図の「サービスエンドポイント」プルダウンメニューからPaaSを選択します。

f:id:guri2o1667:20220105112756p:plain
↓サービスエンドポイントのプルダウンメニューの内容↓

f:id:guri2o1667:20220105112851p:plain

試しにSQLDatabase(=Microsoft.Sql)を選んで保存した場合は以下のように表示されます。

f:id:guri2o1667:20220105113108p:plain

■2.PaaS側でサービスエンドポイントを利用した通信となるように設定を行う

今回はSQLDatabaseでサービスエンドポイントを利用した通信設定を行ってみます。
事前に「SQLデータベース」を作成しています。

f:id:guri2o1667:20220105120407p:plain

少しわかりにくいですが、サービスエンドポイントを利用した通信の設定は、
「SQL Server」リソースにて設定します。

「SQL Server」の左ペインにて「セキュリティ」>「ファイアウォールと仮想ネットワーク」を選択します。

f:id:guri2o1667:20220105120543p:plain

「Azureサービスおよびリソースにこのサーバーへのアクセスを許可する」項目は「いいえ」にします。

f:id:guri2o1667:20220105120653p:plain

「仮想ネットワーク」項目にて「既存の仮想ネットワークを追加」をクリックします。
※デフォルトでは何も設定されていません。

f:id:guri2o1667:20220105120739p:plain

右ペインの設定項目に必要情報を入力/選択し「OK」をクリックします。
事前にサブネットでサービスエンドポイントを構成しているため、「サービスエンドポイントの状態」は「有効」になっています。

f:id:guri2o1667:20220105120845p:plain

設定が完了すると、以下の通り表示が更新されます。

f:id:guri2o1667:20220105121006p:plain

■サービスエンドポイント設定確認

PaaS(今回はSQLデータベース)への接続確認を行います。
仮想マシンからSSMSを利用してSQLデータベースへ接続できます。

f:id:guri2o1667:20220105122720p:plain

 

■サービスエンドポイントを利用した場合のルートテーブル

仮想マシンのNICにて「有効なルート」を確認すると、「ネクストホップの種類」列が「VirtualNetworkServiceEndpoint」のものがあります。

f:id:guri2o1667:20220105122908p:plain

 

■サービスエンドポイント設定後のPaaSの名前解決について

サービスエンドポイントを構成することにより、仮想ネットワークからのPaaSへのアクセスはMicrosoftネットワークを経由したセキュアな通信となります。
ただ、仮想ネットワーク上の仮想マシンや個人の端末上でSQLデータベースへの接続文字列を名前解決すると、いずれもグローバルIPアドレスが表示されます。

つまり、サービスエンドポイントにより、SQLデータベースの接続文字列に対する名前解決がプライベートIPアドレスとなるわけではなく、あくまで名前解決はグローバルIPアドレスとなります。

サービスエンドポイントを構成した後もオンプレミス環境からAzurePaaSへの接続には引き続きグローバルIPアドレスが利用されます。
PaaS側で接続元グローバルIPアドレスを拒否している場合(※1)は、オンプレミス環境からPaaSへ接続することはできません。

※1
「SQL Server」リソースの左ペイン「ファイアウォールと仮想ネットワーク」をクリックし、右ペインの「Azureサービスおよびリソースにこのサーバーへのアクセスを許可する」がデフォルトで「いいえ」になっているため、外部からSQLServerへの接続はできません。

f:id:guri2o1667:20220105135242p:plain



オンプレミス環境からAzurePaaSへプライベート接続を実施したい場合には、AzurePrivateLinkを利用します。

 

■補足:サービスエンドポイント削除後のSQLデータベースへの接続

サービスエンドポイントを削除した場合は、SQLデータベースへ接続することができません。
インターネットからの接続は以下の通り「いいえ」を選んでいることにより拒否されます。
f:id:guri2o1667:20220105135242p:plain

試しに「はい」を設定した場合、クライアントIPアドレス(=接続元グローバルIPアドレス)を設定することで、インターネット経由でのSQLデータベースへの接続ができるようになります。

f:id:guri2o1667:20220105140429p:plain

f:id:guri2o1667:20220105140400p:plain




以上です。