Azure DevOps South India をオンプレミスファイアウォールで安全に通す方法|dev.azure.com と Azure Front Door の動的IP対策

Azure DevOps を South India リージョンで使っているのに、オンプレミスのファイアウォール(Palo Alto など)から dev.azure.com への通信が頻繁にブロックされる――Front Door/CDN 経由の“動的 IP”が原因で、運用設計に悩んでいる方は多いはずです。本記事では「South India 専用の固定 IP だけを許可したい」という素朴な要望から出発し、Microsoft 公式情報をベースに、現実的かつセキュアに Azure DevOps を通すためのベストプラクティスを具体的に整理します。

目次

Azure DevOps(South India)をオンプレ FW で通すときにハマるポイント

まず、問題の構造を整理します。

  • Azure DevOps(dev.azure.com)は、リージョン別サービスではなく「グローバルサービス」として提供されます。
  • ユーザーのブラウザや自社ホストエージェントからのアクセスは、Azure Front Door / CDN 経由で最寄りのエッジに収容されます。
  • このエッジの IP は Anycast + 動的エッジの仕組みで随時変わるため、「South India 組織だから South India の IP だけ」では運用できません。
  • 2025 年には Edgio CDN 退役に伴い、ダウンロード用ドメインとネットワーク要件が更新されました(download.agent.dev.azure.com の追加など)。

その結果、「dev.azure.com だけ許可したのに、実際は Azure Front Door / CDN の IP で落ちる」「South India 専用の単一 IP で運用したいが無理」という状況になります。

前提:Azure DevOps の接続モデル(Outbound / Inbound)

Microsoft 公式ドキュメントでは、Azure DevOps のネットワーク要件を以下の 2 つに分けて説明しています。

  • Outbound 接続:社内 → Azure DevOps(ユーザーのブラウザ、Self-Hosted Agent など)
  • Inbound 接続:Azure DevOps → 社内(Service Hooks、オンプレ Git/DB、Audit Streaming など)

この 2 つは設計思想も IP の扱いも異なるため、必ず分けて考える必要があります。

Outbound(社内 → Azure DevOps)

Outbound 側で重要なのは次のポイントです。

  • 基本ポート:443/TCP(Web/UI、REST API、Self-Hosted Agent → Azure DevOps など、ほぼすべて)
  • SSH Git を使う場合のみ 22/TCP(ssh.dev.azure.com)
  • 許可すべき代表的な FQDN:
    • dev.azure.com / *.dev.azure.com
    • download.agent.dev.azure.com(Self-Hosted Agent のダウンロード用・2025 年から特に重要)
    • 互換性のため *.visualstudio.com も開放が推奨
  • Azure DevOps 用の Outbound IPv4 範囲として、次のプレフィックスが公式に公開されています。
    • 13.107.6.0/24
    • 13.107.9.0/24
    • 13.107.42.0/24
    • 13.107.43.0/24
    • 150.171.22.0/24
    • 150.171.23.0/24
    • 150.171.73.0/24
    • 150.171.74.0/24
    • 150.171.75.0/24
    • 150.171.76.0/24
  • サービス タグ(AzureDevOps)は Outbound には使えない(公式に明記)。

Inbound(Azure DevOps → 社内)

Inbound 側は Azure DevOps が発信元なので、リージョンごとに IP プレフィックスが決まっています。

  • South India 組織からの Inbound 接続に使われる IPv4 範囲は:
    • 20.41.194.0/24
  • これには Service Hooks、データインポート、Audit Streaming などが含まれます。
  • Inbound に対しては サービス タグ AzureDevOps が利用可能
    • Azure Firewall / NSG でのルール簡素化
    • オンプレ FW でも JSON を取り込める製品なら、サービスタグ JSON を EDL として利用可能

「South India 専用の固定 IP だけで運用」はなぜ無理なのか

よくある誤解は「組織リージョンが South India なら、South India の IP だけ許可すればいいのでは?」というものです。しかしこれは Outbound では成り立ちません。

  • dev.azure.com の実体は Azure Front Door / CDN のエッジ群であり、ユーザーに最も近いエッジにトラフィックが流れます。
  • Front Door / CDN は Anycast アドレスと動的エッジを採用しており、同じ FQDN に対しても時間・経路によって異なる IP が返されることがあります。
  • 2025 年の Edgio CDN 退役では、新たな CDN(Akamai + Azure Front Door)の背後にある IP 範囲が追加されており、今後も増減の可能性があります。

つまり:

  • Outbound:世界中の Front Door/CDN エッジが相手になるため、「South India 固定 IP」前提は破綻します。
  • Inbound:Azure DevOps 側から社内に来る通信は South India 用の 20.41.194.0/24 に収束するので、リージョン別の固定 IP 運用が可能です。

この構造を理解すると、「Outbound は FQDN または公開 IP 範囲」「Inbound はリージョン固定 IP or サービス タグ」という住み分けが自然に見えてきます。

結論:優先順位付きベストプラクティス

South India の Azure DevOps 組織をオンプレ FW から通すときの推奨順は次の通りです。

  1. 可能なら FQDN ベースで許可(最優先)
  2. FQDN がどうしても使えない場合のみ、公開 IP プレフィックスを明示許可
  3. 必要に応じて Proxy / Azure Egress などのネットワーク設計で FQDN 制御を実現

以降で、それぞれを詳しく見ていきます。

最優先:FQDN ベースでの許可(Outbound)

Microsoft 公式も、「dev.azure.com と *.dev.azure.com を 443/TCP で開ける」ことを強く推奨しています。

最低限許可すべき FQDN 一覧

種別FQDN用途ポート備考
必須dev.azure.comポータル UI / REST API / 多くの機能443/TCP組織 URL(例:https://dev.azure.com/{org})
必須*.dev.azure.com各種サブドメイン(aex, vsrm など)443/TCPワイルドカード許可が推奨
重要download.agent.dev.azure.comSelf-Hosted Agent / VMSS Agent / Managed DevOps Pools のエージェントダウンロード443/TCP2025 年の CDN 変更後に追加。ワイルドカード不可環境では特に必須。
互換*.visualstudio.com旧 URL / 一部機能との互換443/TCPドキュメント上も引き続き許可が推奨。
SSH Gitssh.dev.azure.comGit over SSH22/TCPSSH 利用時のみ必須

このほかにも、認証(login.microsoftonline.com)や CDN(*.vsassets.io)など、多数の FQDN が公式に列挙されていますが、Azure DevOps の UI / Pipelines / Self-Hosted Agent を使ううえで最低限必要なのは上記群になります。

Palo Alto などでの FQDN 許可の考え方

多くの FW(Palo Alto など)では、次のような制約があります。

  • NAT ルールでは宛先 FQDN を指定できないことが多い(IP または any)
  • 一方で、セキュリティポリシー側では FQDN オブジェクトや SNI/URL カテゴリベースで制御できる

従って、現実的な構成は次のようになります。

  1. NAT ルールは「社内 → インターネット宛」を汎用的に定義(宛先 any)。
  2. セキュリティポリシーの宛先に FQDN オブジェクト(dev.azure.com / *.dev.azure.com / download.agent.dev.azure.com)を指定して許可。
  3. その他の宛先は別ポリシーで遮断 or プロキシ経由にする。

「NAT で FQDN 指定はできないが、セキュリティポリシーでは FQDN を使う」という分離がポイントです。

FQDN がどうしても使えない場合:IP プレフィックスでの Outbound 制御

一部の組織では「ポリシー上 FQDN 制御が認められない」「機器側の制約で FQDN オブジェクトが使えない」といった理由から、IP ベースでの運用を強いられることがあります。その場合は、Azure DevOps 用に公開されている Outbound IP 範囲を利用します。

許可すべき Outbound IPv4 範囲(443/TCP)

アドレス範囲備考
13.107.6.0/24Azure DevOps / Front Door / CDN 用
13.107.9.0/24同上
13.107.42.0/24同上
13.107.43.0/24同上
150.171.22.0/24同上
150.171.23.0/24同上
150.171.73.0/24同上
150.171.74.0/24同上
150.171.75.0/24同上
150.171.76.0/24同上

IPv6 も公開されていますが、多くの企業では v4 のみで運用しているため、本記事では IPv4 に絞って解説します。

サービス タグが Outbound で使えない理由

Azure DevOps の「Allowed IP addresses and domain URLs」では、Outbound には Azure Service Tags が使えないことが明記されています。

  • Outbound の通信(ユーザーのブラウザ / Self-Hosted Agent → Azure DevOps)は、Azure の外(インターネット側)から見れば「任意のクライアント → dev.azure.com」です。
  • サービス タグは Azure 内のリソース向け(NSG / Azure Firewall)で設計されており、「オンプレ FW の Outbound にはそのまま使わないでほしい」というのが公式のスタンスです。

そのため、オンプレ側で IP ベース運用をする場合は:

  • 公式の Outbound IP プレフィックスをそのまま許可する
  • あるいは JSON ファイルから AzureDevOps / AzureFrontDoor など関連サービスの範囲を抽出し、EDL として取り込む

IP 範囲の更新をどう自動化するか

Azure の IP 範囲とサービス タグは、Microsoft の公式 JSON ファイルとして週次で公開されています。

  • ダウンロード元:Azure IP Ranges and Service Tags – Public Cloud(最新の ServiceTags_Public_YYYYMMDD.json)
  • 週 1 回更新されます。
  • 新しい IP 範囲は、JSON に現れてから少なくとも 1 週間は Azure で使用されません(公式に保証)。

これを利用し、次のような週次自動更新フローを組むのが現実的です。

  1. 週 1 回のスケジュールでスクリプト(PowerShell / Python / Azure Function など)を実行。
  2. ServiceTags_Public_*.json をダウンロード。
  3. "name": "AzureDevOps" など関係するサービスタグ、あるいは Azure DevOps ドキュメントで指定されているプレフィックスを抽出。
  4. 抽出した IP 範囲をテキストファイルに整形し、FW の 外部動的リスト(EDL) の配信元として配置。
  5. FW 側では、その EDL を参照するセキュリティポリシーで Azure DevOps 通信を許可。

「新しい範囲は 1 週間は未使用」という仕様のおかげで、週 1 回の自動更新で十分追従可能です。

Inbound(South India → 社内)の設定:サービスフック等

Service Hooks や Azure DevOps から社内に向かう webhook を利用する場合、接続元は South India の Azure DevOps になります。このときのポイントは次の通りです。

  • South India の Inbound IPv4 範囲:
    • 20.41.194.0/24
  • この範囲からの 443/TCP を、Service Hooks の受信サーバや API Gateway などに向けて許可します。
  • Azure 側であれば、サービス タグ AzureDevOps を Inbound ルールで利用可能(NSG / Azure Firewall)。
  • オンプレ FW でも、Service Tags JSON から AzureDevOps の範囲だけを抜き出し、EDL として扱うことで似た運用が可能です。
方向送信元宛先許可する IP/タグ主な用途
Outbound社内Azure DevOpsFQDN(推奨) or Outbound IPv4 範囲ブラウザ / Self-Hosted Agent / API など
InboundAzure DevOps(South India)社内エンドポイント20.41.194.0/24 または サービスタグ AzureDevOpsService Hooks / データインポート / Audit など

どうしてもドメイン許可を使いたいときのネットワーク設計パターン

組織ポリシー上、「NAT で明示的に宛先 IP を指定しなければならない」「FW 上でワイルドカード FQDN を扱えない」といった制限が厳しい場合は、ネットワーク設計を工夫して FQDN 制御を実現するのが現実解です。

パターン 1:L7 プロキシ(Web Proxy / SWG)を経由させる

最もオーソドックスなのは、「すべてのインターネット向け通信を L7 プロキシ経由にする」方式です。

  • オンプレ FW からは「プロキシサーバーへの通信」だけを許可。
  • プロキシサーバー側で dev.azure.com / *.dev.azure.com / download.agent.dev.azure.com を URL カテゴリ / FQDN で許可。
  • Azure Pipelines の Self-Hosted Agent は、プロキシ経由通信に対応しています(環境変数 HTTP_PROXY、HTTPS_PROXY などを利用)。

この構成にすると、オンプレ FW は 宛先 IP ではなく「プロキシへの通信だけを許可」すればよくなり、実際の FQDN 制御はプロキシに任せられます。

パターン 2:Azure 側に Egress を集約し、Azure Firewall で FQDN 制御

もう 1 つのパターンは、社内からのインターネット向けトラフィックを一度 Azure 側に引き込み、Azure Firewall(または Azure 上の NVA)からインターネットに出す方式です。

  • オンプレ ⇔ Azure 間は VPN / ExpressRoute で接続。
  • オンプレからの「外向き通信」はいったん Azure の Hub VNet に集約。
  • Azure Firewall のアプリケーションルールで FQDN ベース制御(dev.azure.com / *.dev.azure.com / download.agent.dev.azure.com など)。

この構成でも、Azure DevOps ドキュメントが言う通り、Outbound に AzureDevOps サービス タグは使えない点は変わりません。ただし、Azure Firewall は FQDN/MAL カテゴリによるアプリケーションルールを持っているため、オンプレより柔軟に URL 制御が可能になります。

Palo Alto を例にした具体的な設計イメージ

ここでは Palo Alto を例に、「最小変更で Azure DevOps を通す」ケースをイメージしてみます(実装は各組織のポリシーに合わせて調整してください)。

ケース A:FQDN 制御が可能な場合

  1. FQDN オブジェクトの作成
    • dev.azure.com
    • *.dev.azure.com
    • download.agent.dev.azure.com
    • 必要であれば *.visualstudio.com など
  2. セキュリティポリシーの作成
    • From:社内ゾーン、To:インターネットゾーン
    • 宛先アドレス:上記 FQDN オブジェクト
    • アプリケーション:ssl / web-browsing など
    • サービス:443/TCP(SSH 利用時は 22/TCP)
    • Action:Allow
  3. NAT ルールは汎用的に
    • From:社内ゾーン、To:インターネットゾーン、宛先 any
    • 変換先:グローバル IP(NAT プール)
    • NAT ルールで宛先 FQDN は使わず、実際の制御はセキュリティポリシー側に寄せる。

この構成なら、「NAT は既存のまま」「セキュリティポリシーだけ追加」という最小変更で Azure DevOps の通信を通すことができます。

ケース B:FQDN 制御不可で IP ベース運用を強いられる場合

FQDN が使えない厳しい環境では、次のような構成が現実解になります。

  1. 外部動的リスト(EDL)用のテキストファイルを用意
    • 内部の Web サーバー(IIS / nginx など)に、Azure DevOps 用 IP リストを公開。
    • 内容は前述の Outbound IPv4 範囲 + 必要に応じて ServiceTags JSON から抽出した範囲。
  2. 週次スクリプトで JSON → EDL ファイルを生成
    • PowerShell / Python / Azure Function で ServiceTags_Public_*.json を取得し、対象サービスの addressPrefixes を抜き出す。
    • FW の EDL が読み取れるフォーマット(1 行 1 プレフィックス)で出力。
  3. Palo Alto 側で EDL を参照するアドレスオブジェクトを定義
  4. セキュリティポリシーで EDL オブジェクトを宛先に指定して許可

こうすることで、「IP を直接ルールにベタ書き → 変更のたびに手作業」という状態を避けつつ、組織ポリシーで求められる IP ベース運用を維持できます。

週次自動同期フローの具体例

実際に Azure IP Ranges JSON を自動処理するフローのイメージを、もう少し具体的に書いてみます。

  1. 週に 1 回、オンプレ or Azure の自動実行基盤(Azure Automation / Functions / cron など)からジョブを起動。
  2. https://www.microsoft.com/…/Azure IP Ranges and Service Tags – Public Cloud から最新の JSON(ServiceTags_Public_YYYYMMDD.json)をダウンロード。
  3. JSON の values 配列から、必要なタグ(例:"name": "AzureDevOps"、"name": "AzureFrontDoor.Frontend" など)をフィルタ。
  4. それぞれの properties.addressPrefixes を集約し、重複を除去。
  5. 1 行 1 プレフィックスのテキストファイルに書き出し、HTTP で公開(Basic 認証などで保護)。
  6. Palo Alto(他ベンダーでも同様)の EDL 機能を使い、その URL を参照する IP リストオブジェクトを作成。
  7. セキュリティポリシーでそのオブジェクトを宛先に指定した「Azure DevOps 許可ルール」を作る。

JSON のパース方法自体は、Microsoft 公式やコミュニティでもサンプルコードが多数公開されていますので、既存のサンプルをベースにするのが楽です。

South India 環境での検証手順(ハンズオン)

設定変更後、本当に Azure DevOps が通っているかを確認するための簡単な検証手順を紹介します。

ステップ 1:DNS 解決の確認

  • クライアント PC または Self-Hosted Agent から、次を実行:
    • nslookup dev.azure.com
    • nslookup download.agent.dev.azure.com
  • 返ってきた IP アドレスが、Azure DevOps Outbound プレフィックス(例:13.107.x.x、150.171.x.x)に含まれているかを確認します。

ステップ 2:CDN への到達性テスト

  • Self-Hosted Agent 上で、例えば次のようなテストを行います(Windows の例):
> curl -I https://download.agent.dev.azure.com/agent/4.252.0/vsts-agent-win-x64-4.252.0.zip

ステータスコードが 200 台で返ってくれば、CDN への到達性は問題ありません。Pipeline 内で PowerShell / bash から HEAD リクエストを行う簡易ジョブを追加しておくと、「エージェント更新だけが失敗している」ようなケースの切り分けにも有効です。

ステップ 3:Pipeline 実行と FW ログの確認

  1. シンプルなビルド Pipeline を 1 本用意し、Self-Hosted Agent で実行。
  2. FW ログで、許可された通信の宛先 IP が「前述の Outbound プレフィックスに含まれているか」「意図しない IP がブロックされていないか」を確認。
  3. Service Hooks を利用している場合は、テスト用の webhook を発火させ、South India の 20.41.194.0/24 からのアクセスが正しく通っているかを確認。

よくある質問と、ネットワークチームからのツッコミへの対処

Q1:IP が週ごとに増えると、旧 IP を他社が使うのでは?

A:Microsoft 公式の JSON では、「新しい IP 範囲は JSON に登場してから少なくとも 1 週間は使用されない」と明記されています。

  • 週次で JSON を取り込み、EDL を更新する運用をとれば、「常に最新の範囲のみ許可」という状態を維持可能です。
  • 旧範囲をいつまで許可するかは組織ポリシーによりますが、「最新 JSON に含まれないアドレスは毎週自動で削除」する仕組みを組めば、「旧 IP が第三者に再利用されるリスク」を最小化できます。

Q2:South India 組織だから South India の IP だけ許可でよくない?

A:Outbound では不可、Inbound では可能というのがポイントです。

  • Outbound(社内 → dev.azure.com)は Front Door/CDN を通るため、世界中のエッジ IP が使われます。特定リージョンの IP だけ許可する、という考え方は成り立ちません。
  • Inbound(Azure DevOps → 社内)は South India の 20.41.194.0/24 に収束するので、South India 専用の固定 IP 運用が可能です。

Q3:Microsoft-Hosted Agent も同じ IP 範囲でよい?

A:Microsoft-Hosted Agent は Azure の各リージョンに分散配置されており、IP 範囲は Azure 全体のデータセンター IP にまたがります。

  • Azure DevOps 自体とは別に、「AzureCloud.<region>」ごとの IP 範囲を JSON から取得し、地理単位で許可する必要があります。
  • 「IP を絞りたい」「社内へのアクセスを最小化したい」場合は、Self-Hosted Agent / Managed DevOps Pools / VMSS Agent の方が設計しやすいケースも多いです。

Q4:Palo Alto で South India の IP だけ許可したのに、別 IP からの通信が来るのはなぜ?

A:それは多くの場合、Outbound と Inbound を混同していることが原因です。

  • Service Hooks のような「Azure DevOps → 社内」の通信は South India 範囲から来ます。
  • しかし、ブラウザや Self-Hosted Agent から dev.azure.com へアクセスする「社内 → Azure DevOps」の通信は、Front Door/CDN エッジ IP(前述の 13.107.x.x / 150.171.x.x など)であり、South India に限られません。

このあたりを図示しながらネットワークチームと共有すると、「South India 固定 IP だけ許可したい」という要求のどこまでが実現可能で、どこからが Front Door/CDN の設計思想と矛盾するかを理解してもらいやすくなります。

まとめ:最小変更で Azure DevOps(South India)を通すポイント

最後に、本記事の要点をチェックリスト形式でまとめます。

Outbound(社内 → Azure DevOps)

  • 理想解:セキュリティポリシーで FQDN 許可
    • dev.azure.com / *.dev.azure.com
    • download.agent.dev.azure.com(Self-Hosted Agent 用)
    • 可能なら *.visualstudio.com も
  • FQDN 不可の場合:公式 Outbound IPv4 範囲を FW で許可
    • 13.107.6.0/24, 13.107.9.0/24, 13.107.42.0/24, 13.107.43.0/24
    • 150.171.22.0/24, 150.171.23.0/24, 150.171.73.0/24, 150.171.74.0/24, 150.171.75.0/24, 150.171.76.0/24
  • サービス タグは Outbound では使えないので、JSON + EDL でプレフィックスを自動更新する運用を採用する。

Inbound(Azure DevOps → 社内)

  • South India 組織からの Inbound は 20.41.194.0/24 を許可。
  • Azure 内(Azure Firewall / NSG)ではサービス タグ AzureDevOps を利用可能。

ネットワーク設計・運用の工夫

  • 可能であれば、L7 プロキシ経由またはAzure 側での Egress 集約により、FQDN 制御を実現する。
  • Palo Alto 等では、NAT ルールは汎用、セキュリティポリシーで実際の制御という役割分担を徹底する。
  • Azure IP Ranges JSON を週 1 回自動で取り込み、「最新のプレフィックスだけ許可する」代わりに、旧プレフィックスを自動で除外する仕組みを整える。

要するに――

  • Outbound は FQDN 優先(無理なら JSON 連携による IP プレフィックス許可)
  • Inbound は South India 固定範囲(20.41.194.0/24)またはサービスタグ AzureDevOps
  • NAT は汎用にし、実際の制御は L7 / セキュリティポリシー / EDL 側に寄せる

この 3 点を押さえておけば、「South India の Azure DevOps 組織をオンプレ FW で安全に通す」ための設計と運用は、余計なルール追加やトラブルを最小限に抑えつつ実現できます。

この記事を書いた人

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

コメント

コメントする

目次