Azure Databricks の閉域構成について調べた
はじめに
【追記】2023 年 1 月に Azure Databricks の Private Link は一般提供 (GA) が開始されました。
Azure Databricks の Private Link について調べた
仕事柄議論になることが多いので Azure Databricks の閉域構成に関する情報を調べてまとめました。
2022 年 6 月時点では、コントロールプレーン (Azure Databricks Web UI、ノートブックコマンド、ワークスペース構成などが存在する領域) へのアクセス元を仮想ネットワークに限定することができないため、完全な閉域構成を取ることができません。
よって、要件に応じて後述する 3 つの機能を組み合わせて構成を検討することになります。
なお、コントロールプレーンと対になるデータプレーンという概念がありますが、データプレーンとは 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 から設定を行います。こちらのブログの内容がわかりやすかったです。
補足情報
- IP アクセスリストの有効・無効にかかわらずワークスペースへのアクセスの際には Azure Active Directory による認証と SSO が行なわれます。
- ロールベースアクセス制御 (RBAC)によりワークスペースリソースへのアクセス制御をすることができます。
- Azure Active Directory の条件付きアクセスでもアクセス元を制限できるようですが、Azure の利用料に追加して別途 Azure Active Directory Premium P1 以上のライセンスの購入が必要になります。
- IP アクセスリストやワークスペースリソースの RBAC を使う場合は Databricks の Premium プランを選択する必要があります。
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 ワークスペースを作成する
補足情報
- デプロイ対象の VNet には、「Azure Databricks と同じリージョンおよびサブスクリプションに存在する必要がある」などの要件が存在するため注意します。
- 自動作成される NSG ではデフォルト状態でインターネットアウトバウンド通信が許可されているため、要件に応じて拒否のルールを追加します。
- クラスターからのエグレスを絞りたい場合 (e.g. Private Endpoint 経由で接続する Azure Data Lake Storage Gen2 などの PaaS、PyPI などのパッケージリポジトリ) は、Azure Firewall などによるホワイトリストを検討します。
- 参考:
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 なし)」を「はい」にします。
補足情報
- エグレスへの考慮が VNet Injection の利用有無により異なります。
- 無効の場合既定の NAT によりアウトバウンド通信を行います。
- 有効(にしなければならない)の場合の多くでは Azure NAT Gateway や Azure Firewallによる構成が必要になるかと思います。
- 参考:
まとめ
以上です。🍵
-
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. ↩︎
-
Secure Cluster Connectivity を有効にした場合は両方のサブネットがプライベートサブネットになる。 ↩︎
-
コントロールプレーンとデータプレーンの間の通信は全て Microsoft バックボーンネットワークにて行われる。Secure Cluster Connectivity が無効な場合もその通信がパブリックインターネット経由で行われるわけではない。 ↩︎
Discussion