📀

Azure サービスエンドポイント・プライベートエンドポイントの使い分け

2021/09/21に公開

はじめに

Azureを使う上で、少しセキュリティ意識の高い方々からは「VNET内で使えるサービスはいいんだけど、パブリックに晒されているサービスを使うのはハードルが高い」「重要度の高いデータは置けない」なんて話を聞くことがあります。
そんな時に使うのが、サービスエンドポイントやプライベートエンドポイントと言われる、VNETの中に接続口を作成する仕組みです。BLOBストレージやSQL Databaseに対して、インターネットに出ることなくVNETから直接アクセスすることができ、安全に使うことができる…とされています。
どちらも「VNETから直接サービスにアクセスできる」という言い方をすると同等の機能なのですが、サービスエンドポイントとプライベートエンドポイントは何が違うのでしょうか?何を基準に選べば良いのでしょうか?・・・と、いうのをまとめてみました。

機能の説明

まずは簡単に機能概要を説明しながら、比較していきます。

サービスエンドポイント

サービスエンドポイントの公式ドキュメントは下記の通り。
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-service-endpoints-overview
サービスエンドポイントでは、サービスの通常の接続先IPアドレス(グローバルIPアドレス)が活きた状態で、ルートテーブルにより通信がインターネットではなく「サービスエンドポイント」に向けられることになります。

主なメリット

大きなメリットは3点挙げられています。

  • Azureバックボーンの最適化されたネットワークを介して直接安全にアクセスできる

余計な経路を通らずに直接サービスにアクセスできるということで、安全かつ安定した通信ができる、ということですね。

  • Azureサービスリソースへのアクセスを仮想ネットワークのみに絞ることができる
  • VNET内のプライベートIPからサービスにアクセスできる(パブリックIPを使用しない)

この2つのメリットはセットで語られるものです。接続元VNETのプライベートIPからアクセスされる、ということは接続先サービス側のFWの設定で接続可否を制御できる、ということです。通常、特定のVNETからのアクセスを許可し、インターネットからの接続は拒否・・・といった使い方が想定されており、ストレージアカウントやSQL Databaseに、第三者からアクセスされるリスクを小さくすることができます。
サービスエンドポイントを使用しない場合、VNETからSNATされたパブリックIPアドレスからのアクセスとなるため、ほぼ不特定のグローバルIPアドレスからのアクセスを許可せざるを得ず、特定の接続元IPアドレスを指定して制御する・・・ということは難しいわけです。

デメリット

デメリットというと大袈裟ですが、気になる文言が書いてあります。

Azure プラットフォームでホストされるサービスに対して、セキュリティで保護されたプライベートなアクセスを行うには、Azure Private Link の使用をお薦めします。 詳細については、Azure Private Link に関するページを参照してください。

メリットのところに「安全にアクセスできる」とあるのに、何が違うのでしょうか?ここら辺が混乱を生む一因になっている気がしますが、この辺りを後述します。

対応しているサービス

Azure Storage、DB系サービス、Keyvaultなど一般的に「セキュアに接続したい」という話が出るサービスはカバーされています。
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-service-endpoints-overview

プライベートエンドポイント

プライベートエンドポイントは、Private Linkサービスを利用する際に作成されるエンドポイントのことです。言葉の定義がややこしいですが、Private Linkの公式ドキュメントはこちら。
https://docs.microsoft.com/ja-jp/azure/private-link/private-link-overview
この時、VNET内に出来上がる専用のネットワークインターフェイスのことを「プライベートエンドポイント」と呼びます。
Private Linkは、Azureサービスだけでなく、Azureを使用して提供されている3rdパーティのサービスにも使用されており、Azure Standard Load Balancerの背後で作成されたサービスをPrivate Link経由で公開することができます。このサービス提供の仕組みにも使われることから、サービスエンドポイントとは少しメリデメの質も変わってきます。

いずれにせよ、VNET内からAzure上のサービスに対して、外部に出ることなく接続できる…という点においては、サービスエンドポイントと同様の目的で使うことができます。

主なメリット

サービスエンドポイントのメリットと似たようなことが書かれていますが、大きく違うのは下記の項目です。

  • 接続元・先両方がプライベートIPアドレスになります。

これはPrivate Linkを利用してサービスを提供する側にとってのメリットが大きいでしょうか。提供側の独自のVNETでサービスを構築することができ、グローバルIPを用意することなくサービス提供できます。
また、Private Linkの利用元VNETと、接続先VNETでネットワークアドレスが重複していても使える、というのもメリットに挙げられます。

  • オンプレミスやピアリングされた別のVNETからでも使用できます。

サービスエンドポイントは、サービスエンドポイントを作成したVNET内からしかアクセスできませんが、プライベートエンドポイントに到達できるネットワークからであればPrivate Linkを使って安全にサービスにアクセスすることができます。

  • データの漏えいに対する保護が可能です

サービスエンドポイントは、「サービスに対して安全に接続することができる」「サービスリソース側で、特定のVNET以外からのアクセスを拒否する」ことができる一方で、「VNETから、特定のリソースにしかアクセスさせない」ことができません。

例えば、「ストレージは、特定のVNETにしか公開せず、その他の場所からアクセスさせてはいけない」という要件は当たりまえレベルでよく出てきます。(AWSのS3バケットがパブリックになってて、情報漏洩…なんていう話はよくありますよね)
一方で、VNET内から特定のストレージ"以外"へのアクセスを防いでおかないと「開発者が、企業のストレージアカウントではなくて自分個人のストレージアカウントにデータを保存してしまう」「データ持ち出しによる情報漏洩…」なんてことが起こり得ます。

Private Linkは「特定のリソースに対して」のみ接続を許可し、その他のリソースへの接続をブロックすることができるため、この問題に対処できるわけです。サービスエンドポイントの方に書かれている「Private Linkの利用をオススメ」な理由がこれですね。

  • 他リージョン上のサービスへの接続

これは文字通りですね。
サービスエンドポイントの場合は、VNETと同リージョンである制約があります。

  • 独自サービスでの利用

ここまでで何度も書いていますが、Azureサービスだけでなく独自サービスでも利用できる点が、Private Linkのメリットです。

デメリット

  • 利用料

これをデメリットと呼ぶのは微妙ですが、Private Linkを使う場合は利用料がかかります。
https://azure.microsoft.com/ja-jp/pricing/details/private-link/

分類 利用料
Private Link サービス Private Link サービスに料金はかかりません
プライベート エンドポイント ¥1.12 / 時間
受信データ処理量 ¥1.12/GB
送信データ処理量 ¥1.12/GB

単位が「円」ですのでそこまで大きいものではないですが、通信料によっては無視できないくらいにはなりますね。

  • DNS
    接続先のプライベートエンドポイントがプライベートIPアドレスになることから、DNSの管理に注意をする必要があります。VNETの中で規定のDNSを使うだけであればAzure側にレコードの管理を任せることができるのですが、オンプレミスなど接続先のネットワークからも利用することを考えると、カスタムDNSとして自分で管理する必要が出てくるところに注意します。

対応しているサービス

サービスエンドポイントが利用できるサービスより、少し広くカバーされています。
https://docs.microsoft.com/ja-jp/azure/private-link/private-endpoint-overview

選び方

基本的には、無償で使えるサービスエンドポイントと、有償のPrivate Linkですから、サービスエンドポイントでは要件を満たせない場合にPrivate Linkを選ぶことになります。
すなわち、Private Linkのメリットで挙げたような使い方をする場合にPrivate Linkのメリットが出てきます。簡単に挙げると選び方の観点としては3点ありそうです。

1:Private Linkのみ対応しているサービスで使う場合

Private Linkサービスの方がカバー範囲が広いため、サービスエンドポイントでは対応していない時・・・というのが1つの観点になります。独自サービスで利用したい、という場合も同様です。

2:データ漏洩に対する防御として使いたい場合

サービスエンドポイントは、接続先リソースの制限にはならないことから、データ漏洩を防ぐ場合はPrivate Linkを使用する必要があります。
なお、サービスエンドポイントが対応しているサービスの中で、ストレージアカウントに対する接続だけは、「サービスエンドポイントポリシー」という仕組みで、接続先を絞ることができます。
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-service-endpoint-policies-overview

3:リージョン跨ぎ

サービスエンドポイントは、接続元VNETと接続先サービスのリージョンが揃っている必要がありますが、Private Linkであればこの制限はありません。

終わりに

今回はサービスエンドポイントとプライベートエンドポイント(Private Link)の違いと使い分けについて書きました。同じことができるサービスが複数あると、どれを使えばいいのか迷いますよね。私も、机上で調べてる範囲が多いので、「他にもこんな観点で使い分けるんじゃないの?」とか「この点が抜けてるよー」なんていうフィードバックをいただけると嬉しいです。

Discussion