azureサービスエンドポイントとプライベートエンドポイントの違い|コスト・DNS設計で選ぶ

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > azureサービスエンドポイントとプライベートエンドポイントの違い|コスト・DNS設計で選ぶ
「Azureでストレージやデータベースへのアクセスをプライベート接続に切り替えたいが、サービスエンドポイントとプライベートエンドポイントのどちらを使えばいいか迷っている」

名前が似ているためよく混同されますが、この2つは仕組みもコストもDNS設計の複雑さもまったく異なります。サービスエンドポイントで十分な場面にプライベートエンドポイントを選ぶと不要なコストと設定の複雑さを招き、逆にオンプレミスアクセスが必要な環境でサービスエンドポイントを選ぶと後から全部やり直すことになります。

この記事では、Azure CLIの実際のコマンド出力を交えながら、コスト・DNS設計・セキュリティの3軸で両者の違いを整理し、どちらを選ぶべきかの判断基準を解説します。実行環境はAzure CLI 2.65(Rocky Linux 9.4上で動作確認済み)です。

この記事のポイント

・サービスエンドポイントは無料・DNS変更不要・VNet外(オンプレ)からは届かない
・プライベートエンドポイントは有料・プライベートDNSゾーン設定が必須
・コスト優先かつVNetのみの用途ならサービスエンドポイントで十分
・オンプレ接続・コンプライアンス要件があるならプライベートエンドポイント一択


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

サービスエンドポイントとプライベートエンドポイントの本質的な違い

2つの機能は「Azureサービスへのアクセス経路をセキュアにする」という目的は共通ですが、実現方法がまったく異なります。

サービスエンドポイントは、サブネットのIDをAzureサービスに延長する仕組みです。VMからストレージへのトラフィックはAzureのバックボーン(内部ネットワーク)を経由しますが、ストレージアカウントのホスト名は依然としてパブリックIPに解決されます。「パブリックIPを経由するが、Azureネットワーク外には出ない」というモデルです。

プライベートエンドポイントは、Azureサービスのネットワークインターフェイス(NIC)をVNetのサブネット内に作成します。ストレージアカウントやSQL ServerがVNet内のプライベートIPアドレスを持つイメージです。DNSの名前解決でもプライベートIPが返るため、通信は完全にVNet内で完結します。

比較項目 サービスエンドポイント プライベートエンドポイント
コスト 無料 約$0.01/時間 + データ処理料
DNS変更 不要(パブリックIPのまま) プライベートDNSゾーン設定必須
接続元IPアドレス VNetのプライベートIP VNetのプライベートIP
オンプレからのアクセス 不可(VPN経由でも届かない) VPN/ExpressRoute経由で可
設定の複雑さ 低い 高い(NIC・DNS・承認フロー)
対応サービス Storage・SQL・Key Vault等 ほぼすべてのAzureサービス

サービスエンドポイントの設定手順とDNS動作

サービスエンドポイントの設定は2ステップです。①サブネット側でエンドポイントを有効化する、②Azureサービス側でVNetルールを追加してデフォルトアクセスをDenyにする、の2つです。

1. サービスエンドポイントをサブネットに有効化する

まず現在のサブネット一覧を確認します。

# サブネット一覧とサービスエンドポイントの状態を確認 az network vnet subnet list --resource-group myRG --vnet-name myVNet --query "[].{name:name, serviceEndpoints:serviceEndpoints}" -o table

Name ServiceEndpoints -------- ---------------- default None app-sub None db-sub None

db-subサブネットにStorageのサービスエンドポイントを有効化します。

# db-sub サブネットにサービスエンドポイントを有効化 az network vnet subnet update --resource-group myRG --vnet-name myVNet --name db-sub --service-endpoints Microsoft.Storage

{ "name": "db-sub", "serviceEndpoints": [ { "locations": ["japaneast", "*"], "provisioningState": "Succeeded", "service": "Microsoft.Storage" } ] }

2. ストレージアカウントにVNetルールを追加してアクセスを制限する

サービスエンドポイントを有効化しただけでは、ストレージアカウントは誰でも(インターネットからも)アクセスできる状態のままです。ストレージ側でVNetルールを追加し、デフォルトアクセスをDenyに変更することで初めてアクセス制限が機能します。

# db-sub からのアクセスを許可するVNetルールを追加 az storage account network-rule add --resource-group myRG --account-name mystorageaccount --vnet-name myVNet --subnet db-sub # デフォルトアクセスをDenyに変更(VNetルール以外の通信を遮断) az storage account update --resource-group myRG --name mystorageaccount --default-action Deny

設定内容を確認します。

az storage account show --resource-group myRG --name mystorageaccount --query "networkRuleSet" -o json

{ "bypass": "AzureServices", "defaultAction": "Deny", "virtualNetworkRules": [ { "action": "Allow", "state": "Succeeded", "virtualNetworkResourceId": "/subscriptions/xxxxxxxx/...subnets/db-sub" } ] }

3. DNS解決を確認する(サービスエンドポイントの特徴)

サービスエンドポイントを有効化しても、DNS解決の結果は変わりません。ストレージアカウントのホスト名は依然としてパブリックIPに解決されます。これはサービスエンドポイントの正常な動作です。

# VNet内のVMから実行 nslookup mystorageaccount.blob.core.windows.net

Server: 168.63.129.16 Address: 168.63.129.16#53 Non-authoritative answer: Name: blob.ty1prdstr03a.store.core.windows.net Address: 20.60.xxx.xxx ← パブリックIPが返る(これが正常)

パブリックIPに解決されますが、VNet内からのトラフィックはAzureのバックボーン経由で届くため、インターネットに出ることはありません。

プライベートエンドポイントの設定手順とDNS設計

プライベートエンドポイントの設定は3ステップです。①プライベートエンドポイントを作成する、②プライベートDNSゾーンを作成してVNetにリンクする、③DNSゾーングループでエンドポイントとDNSを紐付ける、です。

1. プライベートエンドポイントを作成する

# ストレージアカウントのリソースIDを変数に取得 STORAGE_ID=$(az storage account show --resource-group myRG --name mystorageaccount --query id -o tsv) # app-sub サブネットにプライベートエンドポイントを作成 az network private-endpoint create --resource-group myRG --name myStoragePE --vnet-name myVNet --subnet app-sub --private-connection-resource-id "$STORAGE_ID" --group-id blob --connection-name myStoragePEConnection

{ "name": "myStoragePE", "customDnsConfigs": [ { "fqdn": "mystorageaccount.blob.core.windows.net", "ipAddresses": ["10.1.1.5"] } ], "provisioningState": "Succeeded" }

サブネット内に `10.1.1.5` というプライベートIPを持つNICが作成されました。この時点ではまだDNSの設定が完了していないため、名前解決はパブリックIPに向いたままです。

2. プライベートDNSゾーンを構成する(必須)

プライベートエンドポイントで最も設定ミスが多いのがDNSゾーンです。作成を忘れると、VNet内でも名前解決がパブリックIPを返し続けます。

# プライベートDNSゾーンを作成 az network private-dns zone create --resource-group myRG --name "privatelink.blob.core.windows.net" # VNetにDNSゾーンをリンク(自動登録は不要なのでfalse) az network private-dns link vnet create --resource-group myRG --zone-name "privatelink.blob.core.windows.net" --name myDNSLink --virtual-network myVNet --registration-enabled false # プライベートエンドポイントとDNSゾーンを紐付け az network private-endpoint dns-zone-group create --resource-group myRG --endpoint-name myStoragePE --name myDNSZoneGroup --private-dns-zone "privatelink.blob.core.windows.net" --zone-name blob

3. DNS解決を確認する(プライベートIPが返ることを確認)

VNet内のVMから名前解決してプライベートIPが返ることを確認します。

# VNet内のVMから実行 nslookup mystorageaccount.blob.core.windows.net

Server: 168.63.129.16 Address: 168.63.129.16#53 Non-authoritative answer: mystorageaccount.blob.core.windows.net canonical name = mystorageaccount.privatelink.blob.core.windows.net. Name: mystorageaccount.privatelink.blob.core.windows.net Address: 10.1.1.5 ← プライベートIPが返る(DNS設定成功)

パブリックIPではなく `10.1.1.5`(プライベートIP)に解決されていることを確認できます。Azureネットワーク設計を体系的に学びたい方は、Azureハンズオン講座(azure.linuxmaster.jp)でVNetとエンドポイントの実践的な構築手順を確認できます。

コスト・DNS設計・オンプレ接続で選ぶ判断基準

どちらを選ぶべきか、実務で迷いやすいケースごとにまとめます。

サービスエンドポイントが適しているケース
・VNet内のVMやAKSのPodからAzureサービスにアクセスする構成で、オンプレからのアクセスは不要
・コストを最小限に抑えたい(PoC・検証・小規模本番)
・シンプルな設定で素早く始めたい

プライベートエンドポイントが適しているケース
・VPN GatewayやExpressRoute経由でオンプレミスのLinuxサーバーからAzureサービスにアクセスする
・金融・医療・公共など、パブリックIPを経由することを禁じるコンプライアンス要件がある
・マルチVNet構成でPrivate Linkによるサービス共有が必要

移行の方向性
サービスエンドポイントからプライベートエンドポイントへの移行はサービスを停止せずに行えます。まずサービスエンドポイントで運用を開始し、オンプレ接続が必要になった段階でプライベートエンドポイントに切り替えるアプローチも有効です。

よくある設計ミスとトラブルシュート

【サービスエンドポイント】default-action Denyを忘れてアクセス制限が機能しない

サービスエンドポイントを有効化してVNetルールを追加しても、ストレージアカウントの `defaultAction` が `Allow`(デフォルト値)のままだと誰でもアクセスできる状態が続きます。必ず `--default-action Deny` を設定してください。

# 確認コマンド(Denyになっていることを確認) az storage account show --resource-group myRG --name mystorageaccount --query "networkRuleSet.defaultAction" -o tsv # 期待値: Deny

【サービスエンドポイント】NSGでアウトバウンドをブロックしたら通信が止まった

NSGでインターネット向けアウトバウンドをDenyにすると、サービスエンドポイント経由の通信も止まることがあります。NSGにサービスタグを使ったAllow ruleを明示的に追加してください。

# StorageサービスタグへのアウトバウンドをNSGで許可 az network nsg rule create --resource-group myRG --nsg-name myNSG --name AllowStorageServiceTag --priority 200 --direction Outbound --destination-address-prefix Storage --destination-port-range 443 --protocol Tcp --access Allow

【プライベートエンドポイント】DNSゾーン設定後もパブリックIPに解決される

プライベートエンドポイントを作成しただけで、DNSゾーングループの作成を忘れるとパブリックIPへの解決が続きます。また、DNS設定後もVMのDNSキャッシュが残る場合があります。

# DNSゾーングループが存在するか確認 az network private-endpoint dns-zone-group list --resource-group myRG --endpoint-name myStoragePE -o table # VMのDNSキャッシュをクリア(Rocky Linux/RHEL 9の場合) sudo systemd-resolve --flush-caches # または sudo resolvectl flush-caches

【プライベートエンドポイント】オンプレから名前解決できない

VPNで接続したオンプレのLinuxサーバーからプライベートエンドポイントのFQDNを引けない場合は、オンプレのDNSサーバーが `privatelink.blob.core.windows.net` のクエリをAzureのプライベートDNSリゾルバー(168.63.129.16)にフォワードする設定が必要です。Azureプライベートリゾルバー(Private DNS Resolver)を使うとこのフォワード設定を一元管理できます。

本記事のまとめ

やりたいこと 選択
VNet内VMからStorageへ安全にアクセス(コスト最小) az network vnet subnet update --service-endpoints Microsoft.Storage
オンプレLinuxサーバーからAzure Storageにアクセス az network private-endpoint create --group-id blob
DNS設定なしで素早く接続制限したい サービスエンドポイント + --default-action Deny
完全プライベートIP接続でコンプライアンス要件を満たす プライベートエンドポイント + プライベートDNSゾーン
PoC・検証環境(変更を最小限に) サービスエンドポイントで開始し、後からプライベートへ移行

サービスエンドポイントは「無料・DNS変更不要・VNet内限定」、プライベートエンドポイントは「有料・DNS設計必須・オンプレからも届く」と覚えておくと、設計時の判断が速くなります。まずオンプレからのアクセス要件を確認してから選択してください。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、

AzureのVNet設計からエンドポイントの構成・セキュリティ設計まで、ハンズオン形式で体系的に学べる講座の詳細は以下からご確認ください。

>> Azureハンズオン講座の詳細を見る

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。