Azure Databricks Serverlessの送信元IPをホワイトリスト化する実践ガイド|Azure FirewallとAzureDatabricksサービス タグ

Azure Databricks Serverless から社内アプリへ接続したいのに、送信元IPが固定できず Azure Firewall のホワイトリストで詰まる…という相談は多いです。リージョン別IPの落とし穴を整理し、Service Tag・IP Group 自動更新・Private Link(NCC)で解決する手順を具体例でまとめます。

目次

なぜ「リージョン別 IP/ドメイン」を許可しても期待どおり動かないのか

最初に結論を言うと、Azure Databricks の「リージョン別 IP/ドメイン」一覧は、主にワークスペースの制御プレーン(control plane)まわりの通信(Web アプリや API、SCC など)を前提に整理されています。Serverless のワークロードが社内アプリへ出ていく通信は、同じ “Databricks” でも別の経路・前提が絡むため、ここだけを許可しても一致しないケースがあります。

さらに、Microsoft が公開している「Azure IP Ranges and Service Tags – Public Cloud」の JSON は網羅的である一方、運用で毎週のように大量の IP プレフィックスを追いかけることになりがちです。結果として「許可したはずなのに通らない」「更新に追従できず突然落ちる」の両方が起こりやすくなります。

混同しやすいもの主に守りたい対象典型的な用途今回(Serverless→社内アプリ)への効きやすさ
リージョン別 IP/ドメイン(Databricks ドキュメント)Databricks 制御プレーンUDR/ファイアウォール環境でのワークスペース運用△(目的がズレると効かない)
Azure IP Ranges and Service Tags(Microsoft 公開 JSON)Azure 全体オンプレ/周辺 FW の許可リスト○(ただし範囲が広すぎて運用が重い)
サービス タグ(Service Tag)特定 Azure サービスNSG / ルート / 一部 FW での “自動追従” 設計◎(設計の中心にすると運用が楽)
NCC(Network Connectivity Configuration)と Private LinkServerless の閉域接続Serverless→Azure リソース/社内リソースへのプライベート接続◎(IP ではなく接続方式で解決)

まず押さえる:Serverless は「固定送信元 IP を手で許可」しにくい

Serverless は、実行基盤(サーバレス コンピュート プレーン)が Databricks 側で管理され、必要に応じて動的にスケールします。つまり、従来の「この VM/サブネットの IP だけ許可すればよい」という発想が、そのまま当てはまりにくいのが前提です。

そのため、社内アプリ側をIP allowlist 前提で設計している場合ほど、どこで “固定点” を作るか(Private Link に寄せるのか、安定 NAT を使うのか、サービス タグを元に自動更新するのか)が重要になります。

サービス タグ(Service Tag)とは何か

サービス タグは、特定の Azure サービスが使用する IP プレフィックス群をタグ名としてまとめた仕組みです。ルールの送信元/宛先にタグ名を指定すると、IP レンジの増減は Microsoft 側で管理・更新されるため、個別 IP を手で追いかける負担を大きく減らせます。

Azure Databricks についても、Databricks 側ドキュメントで個別 IP ではなくサービス タグの利用が強く推奨されており、代表的なタグ名が AzureDatabricks です。

ただし、AzureDatabricks サービス タグが主に説明されるのは「classic compute(VNet injection)環境で、Databricks クラスターが制御プレーンへ到達するための必須通信」を成立させる文脈です。Serverless の社内アプリ向け通信を IP allowlist で成立させたい場合は、まず Serverless 専用の仕組み(NCC/Private Link/安定 NAT)を優先し、サービス タグは “補助線” として扱う方が安全です。

重要:Azure Firewall では “サービス タグを送信元にする” ことができない

サービス タグは NSG などでは送信元/宛先に使えますが、Azure Firewall のネットワーク ルールでサービス タグを指定できるのは宛先(Destination)のみで、送信元(Source)には使えません。つまり「Azure Firewall で Databricks の送信元 IP をサービス タグでホワイトリスト化したい」という要求は、設計上そのままでは実現しません。

ただし、だからといって “サービス タグは使えない” ではなく、サービス タグを元データとして IP プレフィックスを自動取得し、Azure Firewall が扱える形(IP Group など)に落とし込むのが現実的な落としどころです。後半で具体例を紹介します。

解決パターン早見表:どれを選ぶべきか

状況推奨アプローチ理由実装の要点
社内アプリが Azure VNet 内(VM/AKS 等)で、閉域で完結させたいPrivate Link(社内側は LB + Private Link Service)+ Databricks NCCIP allowlist を捨て、閉域の “接続” で制御できるStandard Load Balancer を前段にし、NCC に Private Endpoint ルールを作る
社内アプリが Azure PaaS(Storage/Key Vault/SQL 等)で、FW 設定が可能NCC のネットワーク ID(安定 CIDR)を allowlistServerless 側の接続元を Databricks 管理の安定範囲に寄せられるAccount Console で NCC を作成し、ネットワーク ID を資源側 FW に登録
社内アプリが「送信元 IP allowlist しかできない」(既存 FW/アプライアンス制約)(可能なら)Databricks が提供する安定 NAT を allowlist。難しければ、サービス タグ由来の IP プレフィックスを自動取得し、Azure Firewall の IP Group を自動更新“個別 IP 手管理” をやめつつ、Azure Firewall の制約も回避できるGet-AzNetworkServiceTag / JSON を元に IP Group を更新し、Network Rule は IP Group を Source に

パターン1:社内アプリを閉域化するなら「Private Link + NCC」が最短で堅い

社内アプリが Azure の VNet 内(VM、AKS、オンプレ連携の前段など)にあるなら、Serverless 側から “プライベートに入ってくる” 形を作るのが王道です。Databricks の Serverless は、NCC(Network Connectivity Configuration)を使って Private Link 経由で VNet 内のリソースへ接続でき、前段に Azure Load Balancer を置く構成が公式に案内されています。

前提条件(まずここで詰まりやすい)

  • Databricks アカウントとワークスペースが所定のプラン要件を満たしている(例:Enterprise)
  • 作業者が Databricks の account admin である
  • Serverless ワークスペースが Private Link 接続をサポートするリージョンに存在する
  • 社内側の Load Balancer が VNet/サブネットを持ち、社内アプリがその配下にある
  • Private endpoint rule は、1 ルールあたり登録できるドメイン数に上限がある
  • DNS 追跡(DNS chasing)や DNS リダイレクトはサポートされず、ドメインはバックエンドへ直接解決される必要がある

構成イメージ(要点だけ)

  • 社内アプリの前に Standard Load Balancer(内部ロードバランサー)を配置する
  • その LB を “公開” するために Private Link Service を作る
  • Databricks 側で NCC を作成し、Private endpoint rule に Private Link Service のリソース ID と社内アプリの FQDN を登録する
  • Azure 側(Private Link Center)で接続要求を承認する

手順(抜粋)

手順操作場所やることハマりどころ
1Azure Portal内部 Load Balancer を作成し、Backend pool に社内アプリを登録Health Probe と LB ルール(443/8443 等)を忘れやすい
2Azure PortalPrivate Link Service を作成(LB と同一リージョン)承認フロー(手動/自動)を事前に決める
3Databricks Account ConsoleNCC を作成(ワークスペースと同一リージョン)リージョン不一致だとアタッチできない
4Databricks Account ConsolePrivate endpoint rule を追加(Private Link Service の resource ID と FQDN)ドメイン名は backend に直解決が必要(DNS 追跡/リダイレクト不可)
5Azure PortalPrivate endpoint 接続要求を承認し、状態が ESTABLISHED になることを確認承認後に反映まで数分〜10分程度かかる
6DatabricksNCC をワークスペースにアタッチし、Serverless を再起動して疎通確認既に稼働中の Serverless リソースは再起動が必要

このパターンが強い理由

  • 外部公開せずに閉域で完結でき、IP allowlist に依存しない
  • 接続は Databricks アカウントに紐づく Private Endpoint となり、許可範囲を “接続単位” で制御しやすい
  • Serverless のスケールや基盤更新に引きずられにくい

パターン2:Azure リソース側の FW なら「NCC の安定 CIDR(ネットワーク ID)」を使う

相手が Azure Storage や Key Vault、SQL などの Azure リソースで、リソース側に “ネットワーク許可リスト(FW)” 機能がある場合は、Serverless 用に用意される NCC のネットワーク ID(安定 CIDR ブロック)を allowlist するのが基本です。NCC は account admin が作成し、ワークスペースにアタッチすると Serverless はそのネットワーク ID を使って Azure リソースに接続します。

リソース種別によっては Private Link を使う方が適切な場合もありますが、少なくとも「大量の Azure IP を手で管理する」という状態からは抜けられます。なお、非 Storage のリソース FW で安定 NAT IP が必要な場合は、Databricks のアカウントチームへ相談する案内もあります。

パターン3:それでも “送信元 IP allowlist” しかできない場合の現実解

既存の社内アプリやオンプレ FW など、「送信元 IP の許可」しかできない環境では、最終的に IP プレフィックスの管理が避けられません。ここで “Azure 全体の IP 一覧” を運用するのではなく、サービス タグで範囲を絞り、そのタグの IP プレフィックスだけを自動取得して反映するのがポイントです。

サービス タグの IP プレフィックスは API / PowerShell / JSON で取得できる

サービス タグは、Azure の Service Tag Discovery API や PowerShell から取得できます。例えば PowerShell なら Get-AzNetworkServiceTag でタグ一覧と AddressPrefixes を取り出せます。また Microsoft は、サービス タグと IP プレフィックスを含む JSON を週次で公開しています。

重要なのは、これらを “人が目で見てコピペ” するのではなく、自動で取得 → 自動で反映 → 変更検知(ChangeNumber)までセットにして運用設計に落とすことです。

Azure Firewall での実装:IP Group を Source にして運用を固定化する

前述のとおり Azure Firewall はサービス タグを送信元にできません。そこで、Azure Firewall が送信元として扱える IP Group を使い、そこに “サービス タグ由来の IP プレフィックス” を同期させます。Network Rule は IP Group を Source に設定すれば、目的の「Databricks から社内アプリへの到達」を allowlist できます。

Azure Firewall(Network Rule)設定例

項目設定例意図
Rule CollectionAllow-Databricks-To-InternalDatabricks→社内アプリ用に分けると追いやすい
ActionAllow許可ルール
PriorityDeny ルールより上競合回避(先にマッチさせる)
ProtocolTCP(または Any)最小権限(使うプロトコルだけ)
SourceIP Group(例:ipg-azuredatabricks)サービス タグ由来の IP を集約
Destination社内アプリの IP(例:10.0.5.4/32)社内アプリの待受先
Port443 / 8443 など社内アプリの待受ポートだけに絞る

IP Group を “サービス タグから” 自動更新する(PowerShell 例)

以下は、サービス タグの AddressPrefixes を取得し、IP Group を作成/更新する最小構成の例です。実運用では、ChangeNumber の比較、例外時のロールバック、差分更新、監査ログなども組み合わせてください。

$location = "eastus2"              # 取得 API 用の場所(例)
$tagName  = "AzureDatabricks"      # 取得したいサービス タグ
$rg       = "rg-network"
$ipgName  = "ipg-azuredatabricks"

# サービス タグの IP プレフィックスを取得

$serviceTags = Get-AzNetworkServiceTag -Location $location
$tag = $serviceTags.Values | Where-Object { $_.Name -eq $tagName }
$prefixes = $tag.Properties.AddressPrefixes

# IP Group を作成 or 更新

$ipg = Get-AzIpGroup -ResourceGroupName $rg -Name $ipgName -ErrorAction SilentlyContinue
if (-not $ipg) {
New-AzIpGroup -Name $ipgName -ResourceGroupName $rg -Location $location -IpAddress $prefixes
} else {
$ipg.IpAddresses = $prefixes
Set-AzIpGroup -IpGroup $ipg
}

このスクリプトを Azure Automation の Runbook や GitHub Actions などで週次実行し、IP Group を更新すれば、手作業で IP を追いかける運用から抜けられます。

切り分け:到達しないときに見る順番(現場で効くチェックリスト)

チェック観点よくある原因確認ポイント対処の方向性
ルール優先度Allow が Deny に負けているRule Collection の Priority を見直すAllow を先に評価されるよう調整
Azure Firewall の制約サービス タグを Source に指定しようとしているNetwork Rule の Source が IP / IP Group になっているかIP Group 方式へ切り替える
社内アプリ側の受信許可NSG / OS FW / アプリ FW が拒否宛先 VM/AKS の受信ルール、LB 健康状態受信ポートと送信元レンジを合わせる
ルーティング経路が想定と違う(FW を通っていない)UDR、サブネット関連付け、NVA 経路経路設計を固定(Hub-Spoke など)
DNS/名前解決Private Link 構成で名前解決がズレるDatabricks から FQDN が期待 IP に解決されるかPrivate DNS / カスタム DNS の整合を取る

疎通確認とログ確認

ネットワークの問題は「通っている/通っていない」を可視化すると一気に楽になります。Azure Firewall を使っている場合は診断ログ(Network rule log)を有効化し、許可/拒否の実態を必ず確認してください。

Databricks 側からの疎通確認は、ノートブックから %sh で curl を叩くのが手軽です(以下は例)。

%sh
curl -v https://10.0.5.4:8443/healthcheck

つまずきポイント(実務でハマりやすい順)

  • 「どの IP を許可すべきか」の前提がズレている:制御プレーン向けの IP 一覧や説明は、Serverless→社内アプリの通信を保証しないことがある
  • Azure Firewall の仕様を見落とす:サービス タグは宛先のみで、送信元には使えない
  • allowlist を IP で頑張りすぎる:可能なら Private Link+NCC の閉域接続に寄せた方が運用は安定する
  • サービス タグを過信する:タグは “そのサービス全体” を表すため、追加の認証/認可・最小権限設計が前提になる

まとめ:おすすめの最短ルート

  • まずは「Serverless→社内アプリ」を IP allowlist で解決しようとしていないかを見直す
  • 閉域化できるなら Private Link(LB + Private Link Service)+ NCC を最優先で検討する
  • Azure リソース側 FW なら、NCC の安定 CIDR(ネットワーク ID) を allowlist して運用負荷を下げる
  • IP allowlist が必要なら、サービス タグを元データにして IP Group を自動更新し、Azure Firewall の制約を回避する
  • 最後に、ログ(FW/アプリ)で “実際に何が拒否されているか” を見て原因を潰す

この記事を書いた人

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

コメント

コメントする

目次