Azure API Management Internal VNet インジェクションのDNS設計と強制トンネリング対策(Private DNS/Resolver/カスタムドメイン)

Azure API Management を Internal(内部)VNet インジェクションで使うと、DNS の作り方、既定ドメインの扱い、オンプレ名解決、強制トンネリング時の管理プレーン通信が一気に複雑になります。設計の判断軸と具体的な構成例で整理します。

目次

Internal VNet インジェクションで最初に押さえるべき全体像

Internal(内部)VNet インジェクションモードの APIM は、API の入口(ゲートウェイ)や開発者ポータルの到達性を VNet 内に閉じることで、インターネットから直接見えない API 基盤を作れるのが強みです。一方で、次の 2 つの「境界」をまたぐため、設計ミスが起きやすくなります。

  • 名前解決の境界:既定 FQDN(myapim.azure-api.net など)を、どこから、どの DNS で引けるようにするか
  • 経路の境界:API の実行トラフィック(データプレーン)と、サービス維持のための通信(管理プレーン/依存通信)をどう通すか

この記事では「Private DNS ゾーン」「カスタム DNS」「Azure Private DNS Resolver」「強制トンネリング」を 1 本の設計ストーリーとしてつなげ、検証~本番で詰まりがちなポイントを潰します。

APIM のエンドポイントを整理する(どの名前が、どこに向くのか)

Internal モードでは、同じ APIM サービスでも用途ごとに複数のホスト名が登場します。まずは「どのホスト名を、誰が使うのか」を整理すると、DNS とルートの設計が迷いません。

用途代表的な FQDN 例到達させたい範囲設計の勘所
API ゲートウェイ(実行)myapim.azure-api.netVNet / ピアリング / VPN・ER 経由の内部ネットワークInternal モードはプライベート IP へ解決させる。名前解決ができないと疎通以前に詰む。
開発者ポータルmyapim.developer.azure-api.net同上(運用方針次第で社内限定にも)検証段階では既定ドメインのままでもよい。将来カスタムドメイン化するなら証明書計画もセットで。
管理・運用(構成更新/スケール等)(管理プレーンの宛先は内部で Azure 側と通信)Azure 制御プレーンに必要な通信が成立すること強制トンネリングの影響が出やすい。ポート 3443 等を含む依存通信を「確実に外へ出す」設計が重要。

ポイントは、データプレーン(API の入出力)と管理プレーン(サービス維持のための通信)を同じ「閉域」の発想で扱うと事故る、という点です。Internal モードでも管理プレーン通信は完全には閉じません。ここを分けて考えるのが最短ルートです。

DNS 設計の最初の一手:「どこから使うか」を先に決める

Private DNS かカスタム DNS か以前に、Internal APIM では「名前を引けるべき利用者」を決めるのが重要です。名前解決の“配布範囲”が、そのまま到達性(=公開範囲)になります。

利用者典型例おすすめの名前解決パターン
同一 VNet 内だけ同じ VNet の VM / AKS / App Service EnvironmentPrivate DNS ゾーンを APIM の VNet にリンクして完結
ピアリング先の複数 VNetHub-Spoke で Spoke 側のアプリから利用Private DNS ゾーンを必要な VNet へ追加リンク(“必要最小限”がコツ)
オンプレ(VPN/ER)からも利用社内端末やオンプレアプリが APIM を呼ぶオンプレ DNS と Azure の間で split-horizon(内部はプライベート IP、外部は別名)を設計。Resolver 併用が現実的

この前提が決まると、「どの DNS を採用すべきか」「Private DNS Resolver をどこに置くべきか」「どの VNet にリンクするべきか」が自然に決まります。

内部エンドポイントの名前解決:Private DNS ゾーンが“基本形”になる理由

Internal モードで最初にぶつかるのが、「既定ドメイン(azure-api.net)を、プライベート IP に解決させるにはどうするか」です。実務での基本形は Azure Private DNS ゾーンを使うパターンです。

Private DNS ゾーンでの構成イメージ

  • Private DNS ゾーンとして azure-api.net を作成
  • APIM が所属する VNet(必要ならピアリング先 VNet も)をリンク
  • myapim、myapim.developer などの A レコードを APIM のプライベート IP に向ける

これだけで、VNet 内のクライアントは既定 FQDN を引いた瞬間にプライベート IP に到達でき、APIM を「社内 API ゲートウェイ」として使える土台が整います。

レコード名はどう書く?(実際の登録例)

Private DNS ゾーンを azure-api.net とした場合、レコードの“名前”は相対名で登録します。例えば次のようになります。

Private DNS ゾーンレコード名(相対)解決される FQDN値
azure-api.netmyapimmyapim.azure-api.netAPIM のプライベート IP
azure-api.netmyapim.developermyapim.developer.azure-api.net同上(通常は同じプライベート IP)

「developer は別ゾーン?」と混乱しがちですが、myapim.developer.azure-api.net は azure-api.net の下位であり、Private DNS ゾーン 1 つでまとめて管理できます。

手順をもう少し具体化(検証で迷わない最小セット)

検証フェーズなら「最小セット」で早く疎通を取り、後から拡張できる形にするのが得策です。

作業目的検証のコツ
Private DNS ゾーン作成(azure-api.net)既定ドメインを私設 DNS として扱うこのゾーンをリンクした VNet の中だけで効く(外部のインターネットには影響しない)。
VNet リンク(APIM の VNet / 参照側 VNet)どこから名前解決できるようにするかを明確化「APIM のいる VNet だけリンク」だと、別 VNet のクライアントは解決できない。利用範囲に合わせて増やす。
A レコード登録既定 FQDN → プライベート IPまずは myapim と myapim.developer の 2 つを入れて疎通。必要が出たら増やす。
(推奨)自動登録はオフ想定外のレコード増殖を防ぐazure-api.net は“社内で管理する既定ドメイン”なので、基本は手動管理が安全。

Private DNS は “作って終わり” ではなく、「どの VNet にリンクするか」がそのまま “公開範囲” になります。後述するハブ&スポークやオンプレ接続の設計とセットで考えると事故が減ります。

カスタム DNS(独自 DNS サーバー)を選ぶべきケースと設計ポイント

ブログなどで「VNet 内の独自 DNS(AD DNS など)を推奨」と書かれているのは、ハイブリッド環境で 名前解決の一元管理を重視するケースがあるためです。すでに社内 DNS に複雑な運用ルールがあり、Azure 側のゾーンを増やしたくない事情も現実にはあります。

カスタム DNS でやる場合の基本

  • DNS サーバー(例:Windows Server DNS / BIND)で azure-api.net ゾーンを管理する
  • myapim、myapim.developer などを A レコードで APIM のプライベート IP に向ける
  • APIM を利用するサブネット(VM / AKS / ASE 等)が、その DNS を参照するように VNet の DNS 設定を変更する

Private DNS とカスタム DNS の比較(判断軸をテーブル化)

観点Azure Private DNS ゾーンカスタム DNS(独自 DNS サーバー)
運用負荷低い(マネージド)中~高(サーバー運用/冗長化/監視が必要)
Azure 連携強い(VNet リンクで簡単に適用範囲を制御)自前で設計(転送・委任・条件付きフォワード等)
ハイブリッド(オンプレ)との整合工夫が必要(オンプレへ配布するには Resolver などを併用)やりやすい(既存の社内 DNS の仕組みに寄せられる)
トラブルの典型VNet リンク漏れで解決できないゾーンの更新漏れ・冗長化不足で名前解決が不安定

結論としては、特段の理由がなければ Private DNS ゾーンが無難です。カスタム DNS は「既存運用に合わせる」ことでメリットが出ますが、その分だけ設計と運用の責任範囲が増えます。

カスタムドメインを使うときの考え方(検証→本番を滑らかにつなぐ)

検証は既定ドメイン(azure-api.net)で素早く動かし、本番で カスタムドメイン(例:api.example.com)に切り替える、という段階移行はよくあります。ここで重要なのは「DNS と証明書を同時に設計する」ことです。

対象既定ドメイン例カスタムドメイン例必要なもの
ゲートウェイmyapim.azure-api.netapi.example.com社内 DNS(プライベート)で A/CNAME、証明書(CN/SAN)
開発者ポータルmyapim.developer.azure-api.netportal.example.com同上(ポータル用に別名・別証明書にすることも多い)

Internal モードで社内限定にする場合、カスタムドメインも「プライベート DNS でのみ解決」させるのが自然です(いわゆる split-horizon / split-brain)。これにより、社内は api.example.com で内部 IP に到達し、インターネット公開が不要ならパブリック DNS 側にレコードを置かずに済みます。

証明書は、ゲートウェイ用とポータル用を分けると運用が楽です。例えば、ポータルは社内認証やリンクが絡むため、移行・切り替え時に影響が出やすいからです。逆に小規模なら 1 枚の SAN 証明書でまとめることも可能ですが、更新作業の影響範囲が広くなる点は意識します。

カスタムドメイン未使用でも azure-api.net の Private DNS ゾーンを作ってよいか

検証段階では「まず既定ドメインで動かしてから、必要になったらカスタムドメインにする」という進め方が現実的です。このとき、azure-api.net の Private DNS ゾーンを作ること自体は一般的で、基本的に問題ありません。

「インターネット側に影響しない」理由

  • Private DNS ゾーンは リンクした VNet の中だけで参照される
  • 外部の DNS(パブリック DNS)を書き換えるわけではない

ただし知っておきたい注意点(落とし穴はここ)

Private DNS ゾーンはそのドメインに対して “社内の正” になるため、リンクした VNet の中では *.azure-api.net の解決が Private DNS 側に寄ります。つまり、その VNet の中で参照したい名前は、必要な分だけレコードを用意するのが安全です。

よくある状況起きること対策
APIM の FQDN だけ登録し、他の azure-api.net 名を使っていない基本は問題なし疎通確認(nslookup、curl 等)を早めに回す
同一 VNet 内で別の azure-api.net 名を参照する可能性がある未登録名は解決できず、通信が失敗することがある必要な名前を洗い出して追加、またはリンク範囲を絞る
将来カスタムドメイン(api.example.com)へ移行したい別ゾーン/証明書/バインド設定が必要になる検証は既定→本番はカスタム、の段階移行を前提に設計

検証では TTL を短めにしておくと、IP 変更や切り戻しが必要な場面でラクになります(本番では運用ポリシーに合わせて調整)。

Azure Private DNS Resolver でオンプレミスの FQDN を解決する

APIM を Internal にすると、API のバックエンドがオンプレミス(例:api.onprem.local)という構成も増えます。このとき「APIM(が属する VNet)からオンプレ DNS を引けるか?」は重要です。結論として、Azure Private DNS Resolver のアウトバウンドエンドポイント+フォワーディングルールセットで実現できます。

Resolver を使うと何が嬉しいのか

  • VNet 内のリソース(APIM/VM/コンテナ等)が、個別にオンプレ DNS を意識しなくてよい
  • 「このサフィックスはオンプレへ転送」といったルールを Azure 側で集中管理できる
  • VPN/ExpressRoute のハイブリッドと相性がよい(ルーティングと合わせて設計しやすい)

構成の考え方(最小構成 → 拡張)

設計上のコツは、Resolver を ハブ VNetに置き、スポーク(APIM の VNet など)から利用する形にすると拡張しやすいことです。

コンポーネント配置例役割
Private DNS Resolver(アウトバウンド)Hub VNet特定ドメインのクエリをオンプレ DNS に転送する出口
フォワーディングルールセットHub VNet(複数 VNet にリンク)例:onprem.local は 10.0.0.10/10.0.0.11 に転送
APIM(Internal)Spoke VNetバックエンドがオンプレの場合、名前解決と到達経路が必須

ここで注意したいのは、VNet の DNS 設定です。Azure 既定 DNS(Azure-provided)を使えるなら「ルールセットを VNet にリンクするだけ」でクエリが転送される運用がしやすいです。一方、VNet をカスタム DNS にしている場合は、クエリが Resolver の仕組みを経由しないことがあります。次のように整理すると設計判断がしやすくなります。

VNet の DNS 設定オンプレへの転送(アウトバウンド)Azure Private DNS の参照現実的な解
Azure-provided DNSルールセットのリンクで実現しやすいそのまま解決できるまずはこの形が一番シンプル
カスタム DNS(AD DNS 等)カスタム DNS が転送/再帰を握るそのままだと参照できないことがある条件付きフォワードで Resolver(インバウンド)へ投げる、またはゾーンを自前で管理

オンプレ→Azure 方向も必要なら(補足)

社内端末から myapim.azure-api.net を引きたい(VPN/ER 経由で APIM に到達させたい)場合は、オンプレ DNS から Azure Private DNS ゾーンへ問い合わせる経路も必要になります。この場合は Resolver の インバウンドエンドポイントを用意し、オンプレ DNS の条件付きフォワード先に指定すると、Private DNS ゾーンの名前解決をオンプレへ“配布”できます。Internal APIM を社内共通基盤として育てるなら、この拡張を見越しておくと後で楽です。

強制トンネリング環境での管理プレーン通信:設計の結論と選択肢

強制トンネリング(forced tunneling)を有効にしていると、既定では 0.0.0.0/0 のアウトバウンドがオンプレ側 NVA/ファイアウォールへ向きます。Internal モードの APIM では、これが原因でプロビジョニングや更新、スケール操作が不安定になることがあります。よくあるのが「API の疎通は OK なのに、APIM の更新だけ失敗する」パターンです。

管理プレーンだけ別扱いが必要になる理由

  • 管理プレーン通信は、API の実行トラフィックとは宛先・ポート・頻度が異なる
  • オンプレ経由にすると、経路が長くなり、タイムアウトや非対称ルーティングの原因になりやすい
  • 必要な宛先は機能(証明書/Key Vault/監視等)で増えるため、例外管理が雪だるま式に増える

そのため実務上は、管理プレーン(および APIM の依存通信)だけは Azure 側で安定して外へ出す設計が推奨されがちです。質問にあった 2 択(UDR で直出し vs オンプレ FW 例外)も、ここに帰着します。

選択肢を比較(どちらが“ベストプラクティス寄り”か)

案メリットデメリット向いている環境
UDR で管理プレーン宛てだけ Azure 側の出口へ経路が単純で安定しやすい。非対称ルーティングを避けやすい。「全トラフィックをオンプレで検査」のポリシーと衝突することがある。クラウド側で egress を完結できる(Azure Firewall/NAT Gateway 等を許容)
オンプレ FW で例外(ポート 3443 等)を許可強制トンネリング方針を崩さずに済む。宛先の管理・追随が大変。トラブルシュートが難しくなりやすい。コンプライアンス上、オンプレ経由が必須。運用体制が厚い

“無難で壊れにくい” という観点では、UDR で管理プレーン系を Azure 側の安定した出口へ逃がす設計が取り回し良いです。オンプレ例外で成立させることも可能ですが、運用の難易度は上がります。

UDR を切るときの実践ポイント

  • 「何を例外にするか」を 依存通信の単位で決める(管理プレーンだけ、証明書連携だけ、など)
  • APIM サブネットのルートテーブルは 最小例外 → 監視 → 拡張で作る(最初から盛りすぎない)
  • 直出し先は “素の Internet” だけでなく、Azure Firewall や NAT Gatewayで出口を固定すると監査・ログが取りやすい

また、オンプレ FW で例外を作る場合は「ポートを開ける」だけで終わらず、宛先(IP/FQDN)の追随と、SNAT を含む経路の対称性(行きと帰りが一致すること)まで含めて設計します。ここが曖昧だと、たまに成功・たまに失敗という最も辛い状態になります。

“最低限ここだけ”押さえる通信の考え方

詳細な宛先一覧は機能やリージョンで変わりますが、設計としては次のように分解すると整理しやすいです。

分類例閉域で完結させたいか強制トンネリング時の扱い
データプレーンクライアント→APIM、APIM→バックエンド可能(Internal モードの主目的)オンプレ/Hub 経由でも設計しやすい
管理プレーン構成更新、スケール、プラットフォーム維持難しい(Azure 側との通信が前提)Azure 側の出口へ逃がすか、オンプレ FW で例外運用
付帯機能の依存通信証明書(Key Vault)、監視(ログ送信)、バックアップ等方針次第必要機能に合わせて例外を追加。最小から始める

おすすめ構成例:Hub-Spoke で“DNS と経路”を分離する

Internal APIM とハイブリッド(VPN/ER)を組み合わせる場合、DNS と経路をハブに集約しておくと運用が安定します。典型的な構成例を文章で整理します。

  • Hub VNet:Azure Firewall(または NVA)、Private DNS Resolver、共有サービス(監視/踏み台等)
  • Spoke VNet:APIM(Internal)、バックエンド連携用サブネット
  • DNS:Private DNS ゾーン(azure-api.net)+必要に応じてカスタムドメイン用のプライベートゾーン
  • 経路:オンプレ宛てプレフィックスは VPN/ER へ、その他は Azure 側の出口へ(必要なら APIM の管理プレーンだけ例外)
悩みハブ集約での解決イメージ
オンプレ名解決が必要Hub の Resolver で転送し、Spoke はルールセットをリンクして使う
Private DNS ゾーンを複数 VNet に配りたい必要な VNet だけをリンク。ピアリングの数が増えても設計が崩れにくい
強制トンネリングで管理プレーンが不安定Hub の出口(Firewall/NAT)へ戻す、または APIM サブネットで例外ルートを作る

検証・運用で使えるチェックリスト(DNS/ルートの事故を早期発見する)

Internal APIM のトラブルは「名前解決」と「経路」が原因のことが多いので、検証で次のチェックをルーチン化すると、切り分けが劇的に早くなります。

名前解決チェック

  • VNet 内の VM から nslookup myapim.azure-api.net を実行し、想定のプライベート IP が返る
  • nslookup myapim.developer.azure-api.net も同様に確認
  • カスタム DNS 利用時は、DNS サーバー自身の再帰/転送設定(条件付きフォワード)を確認

疎通チェック

  • クライアント→APIM(443 等)の接続が通る(TLS 失敗なら SNI/証明書を疑う)
  • APIM→バックエンド(オンプレ/同一 VNet)の接続が通る(DNS 解決とルート両面)

管理プレーン/依存通信チェック

  • APIM の構成変更やスケール操作を実施し、失敗しないかを確認(疎通試験だけだと見逃しやすい)
  • 強制トンネリング環境では、APIM サブネットのルート(0/0 と例外)と、FW 側の許可ログを突き合わせる

よくあるトラブルと“現場での切り分け”

症状原因の候補まずやること
APIM の FQDN が引けない(NXDOMAIN)Private DNS ゾーン未リンク、カスタム DNS で転送していないVNet リンク確認、DNS サーバーの条件付きフォワード確認
ゲートウェイは見えるが Developer Portal が見えないmyapim.developer のレコード未登録必要なホスト名の洗い出しと A レコード追加
API 実行はできるのに、構成更新/スケールが失敗する強制トンネリングで管理プレーン通信が遮断/非対称APIM サブネットのルートと FW の許可(ポート 3443 等)を確認
オンプレ FQDN が解決できずバックエンドに到達しないResolver 未設定、ルールセット未リンク、VPN/ER の DNS 経路不足フォワーディングルールセットとリンク状態、オンプレ DNS の到達性を確認

まとめ:Internal APIM を安定させる設計の着地点

  • 既定ドメインで運用するなら、まずは azure-api.net の Private DNS ゾーンでプライベート IP へ解決させる
  • カスタム DNS は「既存運用に寄せたい」場合に有効。ただし運用責任が増える点を織り込む
  • オンプレ名解決は Azure Private DNS Resolver(アウトバウンド+ルールセット)で集中管理すると設計が崩れにくい
  • 強制トンネリング下では、管理プレーン/依存通信は Azure 側の安定した出口へ逃がすのが壊れにくい(UDR 例外が実務的)
  • 検証フェーズは「既定ドメイン+Private DNS」で素早く疎通し、本番要件(カスタムドメイン/監査)に合わせて段階的に拡張する

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次