どうも、フリーランスエンジニアのMakotoです。
今回は、AzureのPaaSサービスに接続するためのエンドポイントについて解説します。サービスエンドポイントは試験範囲ではないかもしれませんが便宜上あわせて解説します。
- パブリックエンドポイント
- サービスエンドポイント
- プライベートエンドポイント
それぞれのエンドポイントの概要だけでなく、内部的な仕組みや設定手順もあわせて解説します。ぜひ、最後までお読みください。
それではいってみましょう!
エンドポイントの比較サマリ
今回は先に結論です。3つのエンドポイントを簡単にまとめると次の通りです。
エンドポイント | 経路 |
---|---|
パブリックエンドポイント | インターネットを経由してパブリックIPアドレスで接続 |
サービスエンドポイント | Azureバックボーンを経由してパブリックIPアドレスで接続 |
プライベートエンドポイント | Azureバックボーンを経由してプライベートIPアドレスで接続 |
サービスエンドポイント、プライベートエンドポイントともインターネットに出ることなく安全に接続するための手段で、パブリックIPアドレスかプライベートIPアドレスかの違いがあります。
詳細は後述しますが、AZ-900試験の対策としてはまず、パブリックエンドポイントとプライベートエンドポイントの違いを理解しておきましょう。
パブリックエンドポイントとは?
まず、エンドポイントという言葉の意味をおさえておきましょう。
エンドポイントとは、「終端」や「末端」という意味を指す用語ですが、クラウドの文脈ではサービスの接続先となる「URL」のことだと理解して問題ないでしょう。
Azureの主要なPaaSサービスはインターネット経由で接続する前提で設計されており、例えば*.windows.netなどのURLで接続するとパブリックなIPアドレスに名前解決されて接続されます。
サービス | 接続先URLの例 |
---|---|
Blobストレージ | aaa.blob.core.windows.net |
App Service | bbb.azurewebsites.net |
SQL Database | ccc.database.windows.net |
Azure Storageのうち、仮想マシンのDiskストレージはIaaSに分類されますが、BLOBストレージなどその他のデータサービスは主にPaaSに該当します。
パブリックエンドポイントとは、各サービスごとに割り当てられたURLのことを指しており、それはつまり、接続先となるパブリックIPアドレスであるとも言い換えることができます。図中の青丸がパブリックエンドポイントのイメージ。
インターネットを経由してパブリックIPアドレスで接続するということは、セキュリティ設定が甘ければ誰でも接続できるリスクがあるということです。
一般的にシステムのセキュリティレベルを上げるために、インターネットを経由せずに「閉域で接続できること」が要件になることはよくあります。
こういった背景をもとに登場したエンドポイントが「プライベートエンドポイント」です。
サービスエンドポイントとは?
プライベートエンドポイントを解説する前に「サービスエンドポイント」について触れておきます。AWSでいうところのVPCエンドポイント(GW型)です。
AZ-900の試験範囲としては明示されていませんが、プライベートエンドポイントと比較されることが多く、将来のためにセットで理解しておくことをオススメします。
サービスエンドポイントを使うと、インターネットを経由せずにPaaSのリソースに接続できるようになります。無料で使えるのも特徴です。
サービスエンドポイントの説明を公式ドキュメントから抜粋します。
仮想ネットワーク (VNet) サービス エンドポイントでは、Azure のバックボーン ネットワーク上で最適化されたルートを介して、Azure サービスに安全に直接接続できます。 エンドポイントを使用することで、重要な Azure サービス リソースへのアクセスを仮想ネットワークのみに限定することができます。
要するに2つのことができるようになると書いています。
- Azureのバックボーンネットワークを経由するようになる
- アクセス元を仮想ネットワークに限定することができる
図解するとこんな感じ。
Azureバックボーン経由となるのは仮想ネットワークからの接続の場合です。図の例だと仮想マシンからリソースに接続しようとするとインターネットに迂回することなく直接接続できます。
デフォルトでは仮想ネットワークのサブネット単位で「システムルート」というルートテーブルが設定されており、0.0.0.0/0 つまり、パブリックIPアドレス宛ての場合のネクストホップは「インターネット」になっています。(図中の白丸)
ところが、サービスエンドポイントを設定するとAzureバックボーン経由の接続点が作成され(図中の赤丸)、指定したサービスの持つパブリックIPアドレスへ接続する場合のネクストホップが「サービスエンドポイント」になるようルートが追加されます。
仮想ネットワークのメニューにあるサービスエンドポイントの追加画面。以下の例ではAzure Storage(Microsoft.Storage)を追加しています。
仮想マシンのネットワークインターフェイスのメニューにある有効なルートの画面。Azure Storageへ接続する場合のルートが追加されています。
インターネットに出ていく場合、接続元IPはパブリックIPアドレスに変換(SNAT)されますが、サービスエンドポイント経由の場合はプライベートIPアドレスで接続できるためパブリックIPアドレスは不要になります。
そして、サービスエンドポイントはファイアウォールによるアクセス制御にも利用できます。
パブリックネットワークアクセスの設定を「選択した仮想ネットワークとIPアドレスから有効」に変更した場合に、アクセス元をサービスエンドポイントを持つ仮想ネットワーク(サブネット)に限定することができます。
次の画面はストレージアカウントのネットワークメニューから仮想ネットワークを追加しているところです。
なお、下段の「ファイアウォール」の箇所にアドレス範囲を指定して自分のPCなどのIPアドレスを許可することもできます。
整理すると、サービスエンドポイントはPaaSのリソースが持つパブリックIPアドレス宛ての経由点で、仮想ネットワークの出口にあるゲートウェイのようなものです。
仮想ネットワーク内部からPaaSに接続する時のルートをサービスエンドポイントに振ることで、Azureバックボーンを経由して安全に直接接続できるようになります。
そして、ファイアウォール規則に仮想ネットワークを指定することで、アクセス元を特定の仮想ネットワークに限定することができます。
サービスエンドポイントを使うとAzureバックボーン経由でPaaSのリソースに直接接続でき、アクセス元を特定の仮想ネットワークに限定できる
こういった機能が無料で利用できるのでメリットが大きいと思われるかもしれませんが、Microsoftとしては次に説明する「プライベートエンドポイント」を推奨しています。
サービスエンドポイントでは接続元は限定できても、接続先として「特定のリソースにしかアクセスさせない」といったことが実現できなかったり、接続先にパブリックIPアドレスを利用する点が管理上、面倒だったりするためです。
プライベートエンドポイントとは?
プライベートエンドポイントを使うと、接続先もプライベートIPアドレスでPaaSのリソースに接続できるようになります。AWSでいうところのVPCエンドポイント(IF型)です。
つまり、PaaSのリソースがあたかも仮想ネットワークの中に存在しているかのように扱うことができるということです。
こちらは有料で、稼働時間とデータ転送量に応じて課金されます。
サービスエンドポイントより後に登場したサービスで、対応するPaaSもどんどん拡大されています。
プライベートエンドポイントを利用する場合は次の3つのリソースが登場します。
Azureリソース | 説明 |
---|---|
プライベートエンドポイント | 実態はネットワークインターフェイス(NIC) |
プライベートDNSゾーン | PaaSのURLをNICのプライベートIPアドレスに名前解決 |
プライベートリンク | プライベートエンドポイントとPaaSサービスを1対1で関連付け |
図解するとこんな感じ。
前述のサービスエンドポイントでは、PaaSの接続先URLはパブリックIPアドレスに名前解決されます。ルートがインターネット経由ではなくなりますが、パブリックIPアドレスで接続します。
プライベートエンドポイントでは、PaaSの接続先URLはプライベートIPアドレスに名前解決されます。
次の画面は、Linuxの仮想マシンからdigコマンドで名前解決の結果を確認した場合の例です。
BlobストレージのURLが設定前(上)はパブリックIPアドレスに名前解決されていますが、設定後(下)はプライベートIPアドレスになっていることがわかります。
つまり、仮想ネットワーク内部からPaaSに接続する場合、プライベートDNSゾーンのエントリによってプライベートIPアドレスに接続するように変更され、プライベートリンクで定義された関連付け(リンク設定)により、よしなに中継してくれているというわけです。
プライベートリンクでの関連付けが1対1で設定できる点も見逃せません。接続元、宛先リソースとも指定できるので、サービスエンドポイントの課題をクリアしています。
実際に利用する際の注意点として、パブリックエンドポイントが勝手に無効になるわけではないので、外部からのアクセスを遮断したい場合はパブリックアクセスを無効にする必要がある点は覚えておきましょう。
プライベートエンドポイントとプライベートリンクは違いがわかりにくいですが、前者がNICを指し、後者が関連付け設定や経路を指す言葉です。最初のうちは同じものと捉えても問題ないと思います。
ロードバランサ配下の独自サービスにプライベート接続するための「Azure Private Link サービス」という機能もありますが本記事では省略しています。
プライベートエンドポイントは「Private Linkセンター」のメニューから作成します。
基本タブでは名前やリージョンを指定します。
リソースタブでは接続先のリソースを選択します。ここではストレージアカウントのBLOBを選択しています。
仮想ネットワークタブでは接続元の仮想ネットワークとサブネットを指定します。ここで指定したサブネットにNICが作成されます。
DNSタブではDNSレコードの管理方法を指定します。Azureで管理する場合は「プライベートDNSゾーンと統合する」としておけばいっしょにプライベートDNSゾーンが作成されます。
プライベートエンドポイントを作成したらパブリックアクセスは無効にしておきましょう。ただ、AzureポータルからBLOBなど中身が見れなくなるので、指定のIPだけ許可しておくのが良いかもしれません(セキュリティ要件次第)
ちなみに、リソース側のネットワークメニューからもプライベートエンドポイントを作成できます。
最後に仮想マシンから接続確認をします。ファイアウォールで許可されていない場合は「The request may be blocked」とエラーになっていましたが、プライベートエンドポイントを作成するとBLOBのリストを取得できるようになりました。
$ az storage blob list --auth-mode login --account-name azstartstorage --container-name image --output table
The request may be blocked by network rules of storage account. Please check network rule set using 'az storage account show -n accountname --query networkRuleSet'.
If you want to change the default action to apply when no rule matches, please use 'az storage account update'.
$ az storage blob list --auth-mode login --account-name azstartstorage --container-name image --output table
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot
------------------------- ----------- ----------- -------- -------------- ------------------------- ----------
コース画像_Azure_IaaS.JPG BlockBlob Hot 60785 image/jpeg 2022-06-18T03:47:36+00:00
まとめ
今回はAzureのPaaSサービスに接続するためのエンドポイントについて解説しました。
デフォルトでは「パブリックエンドポイント」を使ってインターネット経由でアクセスしますが、インターネットに出ることなく閉域で安全に接続するための手段として「プライベートエンドポイント」がある点をおさえておきましょう。
また、「プライベートエンドポイント」は「サービスエンドポイント」とよく比較されます。サービスエンドポイントは無料で利用できますので「こういった方法もあるんだな」と頭の片隅に入れておきましょう。
それでは、また。