🧱

Azure Databricks の閉域構成について調べた

2022/06/28に公開

はじめに

【追記】2023 年 1 月に Azure Databricks の Private Link は一般提供 (GA) が開始されました。
Azure Databricks の Private Link について調べた

仕事柄議論になることが多いので Azure Databricks の閉域構成に関する情報を調べてまとめました。
2022 年 6 月時点では、コントロールプレーン (Azure Databricks Web UI、ノートブックコマンド、ワークスペース構成などが存在する領域) へのアクセス元を仮想ネットワークに限定することができないため、完全な閉域構成を取ることができません。
よって、要件に応じて後述する 3 つの機能を組み合わせて構成を検討することになります。

  1. IP アクセスリスト
  2. VNet Injection (仮想ネットワークへのデプロイ)
  3. Secure Cluster Connectivity (NPIP)

なお、コントロールプレーンと対になるデータプレーンという概念がありますが、データプレーンとは Apache Spark クラスターが実際のデータ加工を行ったり Azure Storage などの関連リソースにアクセスする領域のことです。

[参考] Azure Databricks の大まかなアーキテクチャ

1. IP アクセスリスト

概要

前述のとおり Azure Databricks Web UI に対するアクセスは全てパブリックネットワーク経由になっていますが、IP アクセスリストを有効にすることでアクセスできる IP アドレスを制限することができます。
下図の赤線で囲った経路が対象になります。

Azure Databricks – Bring Your Own VNET

IP アクセスリストの概念は下図のとおりです。IP アドレスの許可リスト・拒否リストを設定してそれに基づいた制御ができます。利用者が所属する接続元拠点の IP アドレス範囲をまとめて許可するといった使い方が多いと思います。

設定方法

公式ドキュメントではややイメージしづらいですが、まず Databricks 側で Access Token を生成して Postman などのツールを使って REST API から設定を行います。こちらのブログの内容がわかりやすかったです。

補足情報

2. VNet Injection (仮想ネットワークへのデプロイ)

概要

Azure Databricks の VNet Injection は、やや表記が揺れていますが一部の Azure サービスが対応している仮想ネットワークへのデプロイと同義です。具体的には Azure Databricks の Apache Spark クラスターをユーザー管理下の任意の Azure VNet にデプロイすることができます。そのため、ドキュメントによっては Bring Your Own VNet と表現されている場合もあります。
VNet Injection の対象範囲は下図の赤線で囲った部分です。

Azure Databricks – Bring Your Own VNET

設定方法

Azure Portal からリソース作成時に「自分の仮想ネットワーク (VNet) に Azure Databricks ワークスペースをデプロイします」を「はい」にします。事前に VNet とアドレス空間を作成しておく必要があります。
必須項目を入力すると Azure Databricks がプロビジョニングされる際に 2 つのサブネット[1][2]と、Azure Databricks が動作する上で必要な通信が許可されたネットワークセキュリティグループ (NSG) が自動作成され、2 つのサブネットには自動作成された NSG が割り当てられます。
アドレス空間とサブネットの CIDR 範囲は要件に応じてこちらを参考にして決めます。

[参考] Azure portal を使用して Azure Databricks ワークスペースを作成する

補足情報

3. Secure Cluster Connectivity (NPIP)

概要

Secure Cluster Connectivity はパブリック IP アドレスを持たないクラスターをデプロイする機能です。NPIP (No Public IP) と呼ばれることもあります。クラスターがパブリック IP アドレスを持たないことにより、データプレーンに対する意図しないパブリックアクセスから保護する目的で使われます。[3]
Secure Cluster Connectivity の対象範囲は下図の赤線で囲った部分です。名前から Azure Databricks が全くパブリック IP アドレスを持たないような印象を受けますが、前述のとおりユーザーから Azure Databricks Web UI への通信はパブリックネットワーク経由になりますので、あくまでも対象範囲はコントロールプレーンとデータプレンの間の通信であることに注意します。

Azure Databricks – Bring Your Own VNET

Secure Cluster Connectivity のしくみは下図のようになります。

設定方法

VNet Injection と同じく、Azure Portal からリソース作成時に設定します。VNet Injection と同じ設定画面から「Secure Cluster Connectivity による Azure Databricks ワークスペースのデプロイ (パブリック IP なし)」を「はい」にします。

補足情報

まとめ

以上です。🍵

脚注
  1. Data Exfiltration Protection with Azure Databricksによると 2 つのサブネットはこう説明されている。The virtual network must include two subnets dedicated to each Azure Databricks workspace: a private subnet and public subnet (feel free to use a different nomenclature). The public subnet is the source of a private IP for each cluster node’s host VM. The private subnet is the source of a private IP for the Databricks Runtime container deployed on each cluster node. It indicates that each cluster node has two private IP addresses today. ↩︎

  2. Secure Cluster Connectivity を有効にした場合は両方のサブネットがプライベートサブネットになる。 ↩︎

  3. コントロールプレーンとデータプレーンの間の通信は全て Microsoft バックボーンネットワークにて行われる。Secure Cluster Connectivity が無効な場合もその通信がパブリックインターネット経由で行われるわけではない。 ↩︎

Microsoft (有志)

Discussion