AzureのセキュアなネットワークをVNet・Private Endpoint・NICで理解する
最近は、フルスタックエンジニアはフロント、バックエンドだけではなくインフラ構築もするようになってきたなと考える今日この頃です...(;^ω^)。
特に、ネットワーク関連の設定は今まで馴染みがなく最近手探りで設定などを進めています
そこでキャッチアップしたことを今回はアウトプットしていきたいと思います!
AzureでPaaSサービス(Storage Account、Azure SQL Database、Key Vaultなど)を使う際、デフォルトではインターネット経由でアクセスできてしまいます。これを防ぐためのセキュアな構成が、VNet・Private Link・Private Endpoint・Private DNS Zone・NICの組み合わせです。
この記事では、各コンポーネントの役割と相互関係を整理します。
なぜこの構成が必要なのか
デフォルト構成の問題点
何も設定しない状態では、Azure PaaSリソースはインターネットに公開されたエンドポイントを持ちます。
この状態では以下のリスクがあります。
| リスク | 内容 |
|---|---|
| 意図しない公開 | 設定ミスでデータが外部から参照可能になる |
| 通信経路の露出 | VNet内からの通信でもインターネットを経由する |
| 認証情報の漏洩 | アクセスキーが流出した場合、外部から直接アクセスされる |
| コンプライアンス違反 | 金融・医療など規制業種では「通信がインターネットを経由しないこと」を要件とするケースがある |
セキュアな構成で何が変わるか
Private Endpoint + Private DNS Zone を導入すると、通信経路が完全にVNet内に閉じます。
インターネットを一切経由しないのがポイントです。アプリ側のコード変更は不要で、エンドポイントのFQDNはそのまま使えます。DNS解決の結果だけが変わります。
全体構成図
各コンポーネントの説明
Virtual Network (VNet)
すべてのリソースが属するプライベートなネットワーク空間です。インターネットとは隔離されており、サブネットに分割して管理します。
- IPアドレス空間を定義(例:
10.0.0.0/16) - サブネットに分割して役割ごとに管理
- NSG(ネットワークセキュリティグループ)でトラフィックを制御
Private Endpoint(プライベートエンドポイント)
PaaSリソースをVNet内のプライベートIPアドレスに紐付けるリソースです。作成すると、サブネット内にNICが自動生成されます。
- PaaSリソースごとに1つ作成
- 作成時にNICが自動生成され、サブネットのIPが割り当てられる
- PaaS側ではパブリックアクセスを無効化するのがベストプラクティス
Private Link(プライベートリンク)
Private EndpointとAzure PaaSリソースを繋ぐ**接続の仕組み(サービス)**です。
- トラフィックはMicrosoftのバックボーンネットワーク上を流れる
- インターネットには一切出ない
- Private Endpointを作成すると裏側で自動的に構成される
Private DNS Zone(プライベートDNSゾーン)
PaaSリソースのFQDN(例: myaccount.blob.core.windows.net)を、パブリックIPではなくNICのプライベートIPへ解決するための仕組みです。
- VNetにDNSゾーンをリンクすることで有効化
- 設定を忘れると、FQDNがパブリックIPに解決されてしまい、Private Endpointを経由しない(最もよくある落とし穴)
# DNSゾーンのAレコード例
blob.core.windows.net → 10.0.2.4 (NICのプライベートIP)
database.windows.net → 10.0.2.5
vaultcore.azure.net → 10.0.2.6
NIC(ネットワークインターフェース)
NICはAzure上のリソースがネットワークに接続するための仮想のLANカードです。VMだけでなく、Private Endpointにも必ず1枚のNICが作られます。これがPrivate Endpointの実体です。
NICの詳細
Private EndpointのNICとは
Private Endpointを作成すると、指定したサブネット内にNICが自動生成されます。このNICがPaaSリソースをVNetの住人として扱える理由です。
VMのNICとPE用NICの違い
| VM の NIC | Private Endpoint の NIC | |
|---|---|---|
| 用途 | VMがネットワークに接続 | PaaSリソースをVNet内に露出 |
| IPアドレス | サブネットから割当 | サブネットから割当(同じ仕組み) |
| パブリックIP | オプションで付与可能 | 持てない |
| セキュリティ | NSG適用可能 | NSG適用可能 |
| 管理 | ユーザーが明示的に設定 | PE作成時に自動生成 |
通信の流れ
VMからStorage Accountにアクセスする場合を例に、通信の流れを追います。
インターネットを一切経由しないのがポイントです。アプリ側のコードや接続文字列はそのままで、DNS解決の結果だけが変わります。
各リソースの関係まとめ
| 関係 | 内容 |
|---|---|
| VM → Private Endpoint | 同一VNet内のNICのプライベートIPで通信 |
| Private Endpoint → PaaSリソース | Private Link経由でMSバックボーンを通じて接続 |
| Private DNS Zone → VNet | リンクすることでVNet内の名前解決に使われる |
| Private DNS Zone Aレコード → NIC | NICのプライベートIPを指す |
| NIC → Private Endpoint | NICはPEの実体(1対1で自動生成) |
設定時のチェックリスト
- Private Endpointを作成するサブネットを専用に用意する(App SubnetとPE Subnetを分ける)
- PaaSリソース側でパブリックアクセスを無効化する
- Private DNS Zoneを作成し、VNetにリンクする
-
DNSゾーンにAレコードが正しく登録されているか確認する(自動登録の場合は
privatelink.blob.core.windows.netなど) -
VMから
nslookupでFQDNがプライベートIPに解決されることを確認する
# 確認コマンド例(VM上で実行)
nslookup myaccount.blob.core.windows.net
# → 10.0.2.4 が返れば正常(パブリックIPが返る場合はDNS設定を見直す)
まとめ
| コンポーネント | 一言で言うと |
|---|---|
| VNet | プライベートなネットワーク空間 |
| Private Endpoint | PaaSをVNetの住人にするリソース |
| NIC | Private Endpointの実体。プライベートIPを持つ仮想NIC |
| Private Link | NICとPaaSリソースを繋ぐMSバックボーン接続 |
| Private DNS Zone | FQDNをNICのIPに解決するDNS |
デフォルト構成ではPaaSリソースがインターネットに公開され、通信もインターネットを経由します。Private Endpoint + Private DNS Zoneを導入することで、DNS解決の結果がプライベートIPに切り替わり、通信が完全にVNet内に閉じます。
いかがでしたでしょうか。セキュアな通信を実現するために、まずは上記のサービスとそれぞれの役割を理解し実際に小規模なプロダクトから構築してみるとよいのかなと思います。


