ファイアウォールを使用してワークスペースのネットワークエグレスを制限する
このページでは、 VPCファイアウォール ルール、ルート、プライベート DNS を構成して、Google クラウド上のDatabricksワークスペースからのネットワーク下りを重要なサービスと宛先にのみ制限する方法を説明します。
始める前に、次のものが必要です。
- Databricks アーキテクチャに関する知識。「高レベルアーキテクチャ」を参照してください。
gcloudCLIコマンドを使用する場合は、 Google クラウドSDKをインストールします。roles/iam.networkAdminロールまたは十分な権限が必要です。
ファイアウォール構成の概要
この構成では、デフォルトで拒否するアプローチを使用します。つまり、すべての出力トラフィックをブロックし、必要な接続のみを選択的に許可します。構成には 3 つの主要コンポーネントがあります。
-
プライベート Google アクセス : VM が Google の内部ネットワーク経由で Google Cloud Storage やその他の Google サービスにアクセスできるようにします。これにより、 Databricksクラスター ノードにパブリック IP を必要とせずにワークスペース ログをGCSに書き込むことができます。
-
VPC ルートと DNS : Google API トラフィックを
restricted.googleapis.com経由でルーティングします。これにより、VPC Service Controls に準拠したサービスへのアクセスのみが可能になります。これにより、サポートされていない Google サービスへのデータの流出を防ぐことができます。 -
Databricks サービスのファイアウォール ルール : 特定の Databricks コントロール プレーン エンドポイントへの出力を許可します。
- Databricks コントロール プレーンと Databricks 管理対象システム リソース
- クラスター機能のためのサブネット内通信
- 外部Apache Hive metastore (レガシー)を使用しない場合は、まだHive metastore (ポート 3306)
コントロール プレーン サービスの IP アドレスはリージョンによって異なります。ステップ 3 でファイアウォール ルールを構成するときに、 Databricksサービスとアセットの IP アドレスとドメインを利用できるようにしておきます。ワークスペースの地域 IP アドレスとポートが必要になります。
ステップ 1: ネットワークのサイジングを計画する
ワークスペースを作成する前に、ワークロードに十分な IP スペースを確保できるようにネットワーク サイズを計画します。ワークスペースの作成後にサブネットを変更するには、ワークスペースのネットワーク構成を更新する必要があります。「ワークスペースのネットワーク構成の更新」を参照してください。
サブネットが小さすぎると、ワークスペースの IP スペースが使い果たされ、ジョブが失敗します。クラスターのサイズとワークスペースの数に基づいてサブネットのサイズを決定するためのガイダンスについては、 「新しいワークスペースのサブネットのサイズ決定」を参照してください。
ステップ 2: VPCファイアウォール ルールを追加する
ワークスペースを作成したら、ファイアウォール ルールを構成して、デフォルトで拒否するセキュリティ モデルを実装します。以下のコマンドのプレースホルダーをワークスペース固有の値に置き換えます。
<vpc-name>: Databricks が管理する VPC (形式:databricks-managed-<workspace-ID>)<workspace-id>: ワークスペース URL から取得したワークスペース ID- Databricks サービスおよびアセットの IP アドレスとドメインからの地域 IP アドレス
VPC名を取得する
- アカウント コンソールのワークスペース ページから、ワークスペースをクリックして起動します。
?o=の後の URL の数字部分をコピーします。たとえば、ワークスペース URL がhttps://1676665108650415.5.gcp.databricks.com/?o=1676665108650415#の場合、ワークスペース ID は1676665108650415になります。- VPC 名は
databricks-managed-<workspace-ID>です。たとえば、databricks-managed-1676665108650415。
または、 Google クラウド コンソールの VPC ページを使用して、UI からファイアウォール ルールを表示および管理することもできます。
すべての出力をブロックする(デフォルトで拒否)
すべての出力トラフィックをブロックするルールを作成します。優先度を 1100 に設定すると、すべての特定の許可ルール (優先度 1000 ~ 1099 を使用) の後に適用されます。すべての出力をブロックすると、 pypi.orgや Maven Central などのパブリック パッケージ リポジトリへのアクセスもブロックされます。すべて拒否ルールを有効にする前にこれを計画してください。
gcloud compute firewall-rules create deny-egress \
--action DENY \
--rules all \
--destination-ranges 0.0.0.0/0 \
--direction EGRESS \
--priority 1100 \
--network <vpc-name>
このルールの優先度を 1100 に設定します。優先順位の低い番号が最初に評価されるため、許可ルールより低い優先順位 (1000 または 1099) を設定すると、Databricks が重要なサービスにアクセスできなくなります。これにより、ワークスペースが使用できなくなります。
内部 IP 空間 (10.0.0.0/8、172.16.0.0/20、または 192.168.0.0/16) にアクセスする必要がある場合は、優先度 1000 ~ 1099 でこれらの範囲に特定の出力ルールを追加します。
Google APIs許可する(アクセス制限あり)
VPC Service Controls準拠のエンドポイント経由で Google クラウド サービスへのアクセスを有効にします。 これら 2 つのルールは連携して、Google APIsへの安全なアクセスを提供します。
199.36.153.4/30: GCE のコア制限 API アクセス34.126.0.0/18: VPC Service Controls 準拠サービスのエントリ ポイント
gcloud compute firewall-rules create to-google-apis \
--action ALLOW \
--rules all \
--destination-ranges 199.36.153.4/30 \
--direction EGRESS \
--priority 1000 \
--network <vpc-name>
gcloud compute firewall-rules create to-google-apis-entry-point \
--action ALLOW \
--rules tcp:443 \
--destination-ranges 34.126.0.0/18 \
--direction EGRESS \
--priority 1000 \
--network <vpc-name>
サブネット内通信を許可する
クラスターが適切に機能するには、Databricks サブネット内のトラフィックを許可します。作成時に、ワークスペースの詳細構成から GCE ノードのプライマリ IP 範囲を使用します。
gcloud compute firewall-rules create databricks-<workspace-id>-egress-intra-subnet \
--action ALLOW \
--rules all \
--destination-ranges <databricks-subnet-cidr> \
--direction EGRESS \
--priority 1000 \
--network <vpc-name>
Databricks コントロール プレーン サービスを許可する (PSC が有効になっていない場合)
ポート 443 および 8443 ~ 8451 上の Databricks コントロール プレーン エンドポイントへの出力を許可します。Databricks サービスおよびアセットの IP アドレスとドメインから、ワークスペースの地域 IP アドレスを取得します。
プレースホルダー IP アドレスを置き換えます。
<web-app-ips>: Web アプリケーションのリージョン イングレス アドレス (通常は複数の CIDR ブロック)<scc-relay-ip>:安全なクラスター接続リレーの地域 IP アドレス
gcloud compute firewall-rules create to-databricks-control-plane \
--action ALLOW \
--rules tcp:443,tcp:8443-8451 \
--destination-ranges <web-app-ips>,<scc-relay-ip> \
--direction EGRESS \
--priority 1000 \
--network <vpc-name>
Databricks では、IP ベースのルールではなく、FQDN ベースのルールをサポートするファイアウォールを使用することをお勧めします。Databricks の IP アドレスは変更される可能性があり、ファイアウォール ルールが更新されないと、ワークスペースまたはクラスターの作成が壊れる可能性があります。
プライベート サービス接続エンドポイントを許可する
ワークスペースに対して [プライベート サービス接続を有効にする]を有効にした場合は、パブリック コントロール プレーン IP ではなく、PSC エンドポイント サブネットへの出力を許可します。
gcloud compute firewall-rules create egress-to-databricks-psc-subnet \
--description "Allow egress traffic to Databricks Private Service Connect (PSC) endpoint subnet for workspace access over HTTPS." \
--direction EGRESS \
--priority 1000 \
--network <vpc-name> \
--allow tcp:443,tcp:8443-8451 \
--destination-ranges <psc-subnet-range>
大丈夫Hive metastoreを許可する(オプション)
デフォルトのメタストアを使用する場合は、ポート 3306 でリージョン メタストア IP への出力を許可します。外部Apache Hive metastore (レガシー)を使用する場合は、代わりに外部メタストアのルールを作成してください。
gcloud compute firewall-rules create to-databricks-managed-hive \
--action ALLOW \
--rules tcp:3306 \
--destination-ranges <metastore-ip> \
--direction EGRESS \
--priority 1000 \
--network <vpc-name>
従来のHive metastoreの代わりにWhat is Unity Catalog ?を使用することをお勧めします。
カスタムルールを追加する(オプション)
組織がデータ ソースおよびその他のシステムに必要とする追加の出力ルールを追加します。 すべてのカスタムALLOWルールを優先度値 1000 ~ 1099 に設定して、ファイアウォールが 1100 の全拒否ルールの前にそれらを評価できるようにします。
ファイアウォール ルールは次のようになります。
名前 | Type | フィルター | プロトコルとポート | 操作 | 優先順位 |
|---|---|---|---|---|---|
| イグレス | IP範囲: 199.36.153.4/30 | すべて | 許可 | 1000 |
| イグレス | IP 範囲: リージョン コントロール プレーンの IP 範囲または PSC エンドポイントの IP | tcp:443, 8443-8451 | 許可 | 1000 |
| イグレス | IP範囲: ワークスペースのサブネット範囲 | すべて | 許可 | 1000 |
| イグレス | IP範囲: 0.0.0.0/0 | すべて | 拒否 | 1100 |
| イングレス | IP範囲: ワークスペースのサブネット範囲 | すべて | 許可 | 1000 |
ステップ 3: VPCルートを更新する
カスタム静的ルートを追加して、制限された VIP 範囲を介して Google API トラフィックを誘導します。各ルートは、デフォルトのインターネット ゲートウェイをネクストホップとして使用します。この構成により、パブリック IP を持たない VM が Google の制限された API エンドポイントにアクセスできるようになります。
次の宛先範囲のルートを作成します。
199.36.153.4/30: プライベートGoogle Access APIエンドポイントrestricted.googleapis.com34.126.0.0/18: 制限されたAPIエントリポイントrestricted.googleapis.com
# Route for Private Google Access API endpoints
gcloud compute routes create allow-private-google-access \
--network <vpc-name> \
--destination-range 199.36.153.4/30 \
--next-hop-gateway default-internet-gateway \
--description "Route for Private Google Access (199.36.153.4/30)"
# Route for Restricted API entry points
gcloud compute routes create allow-restricted-google-apis \
--network <vpc-name> \
--destination-range 34.126.0.0/18 \
--next-hop-gateway default-internet-gateway \
--description "Route for restricted.googleapis.com entry point (34.126.0.0/18)"
クラウド NAT がプライベート Google アクセスとどのように相互作用するかについて詳しくは、Google クラウド ドキュメントの「NAT 製品の相互作用」を参照してください。
ステップ 4: 制限された Google APIs用にプライベート DNS を構成する
すべての Google API トラフィックをrestricted.googleapis.comにリダイレクトするようにプライベート DNS ゾーンを設定します。これにより、 Databricks VM がVPC Service Controlsに準拠した Google APIsのみにアクセスするようになり、サポートされていないサービスへのデータの流出を防ぐことができます。 詳細については、Google クラウドのドキュメントの「限定公開の Google アクセス オプション」を参照してください。
googleapis.com のプライベート DNS ゾーンを作成する
ドメインgoogleapis.comを使用してクラウド DNS プライベート マネージド ゾーンを設定します。 このゾーンを、ワークロードが実行される VPC に接続します。これにより、プライベート DNS ゾーンがパブリック DNS ではなく*.googleapis.comのリクエストを解決するようになります。
# Create a private DNS managed zone
gcloud dns managed-zones create restricted-apis-zone \
--description "Private DNS zone for restricted.googleapis.com" \
--dns-name "googleapis.com." \
--visibility private \
--networks "projects/<project-id>/global/networks/<vpc-name>"
limited.googleapis.com の A レコードを追加する
restricted.googleapis.comの 4 つの VIP ( 199.36.153.4 – 199.36.153.7 ) すべてを含む A レコードを追加します。
# Add A records for restricted.googleapis.com VIPs
gcloud dns record-sets create "restricted.googleapis.com." \
--type A \
--ttl 300 \
--zone restricted-apis-zone \
--rrdatas "199.36.153.4" "199.36.153.5" "199.36.153.6" "199.36.153.7"
CNAME を使用して API トラフィックをリダイレクトする
プライベート DNS ゾーン内に、 restricted.googleapis.comを指すワイルドカード CNAME レコード ( *.googleapis.com ) を作成します。これにより、すべての Google API トラフィック ( storage.googleapis.com 、 bigquery.googleapis.comなど) が制限された VIP に解決されるようになります。
# Create a wildcard CNAME record pointing to restricted.googleapis.com
gcloud dns record-sets create "*.googleapis.com." \
--type CNAME \
--ttl 300 \
--zone restricted-apis-zone \
--rrdatas "restricted.googleapis.com."
この構成では、すべての Google API リクエストが制限されたエンドポイント経由でルーティングされます。VPC Service Controls準拠のAPIsのみにアクセスできます。 この設定により、Gmail やマップなどのサービスがブロックされます。
ステップ 5: 構成を検証する
ファイアウォール構成をテストして、ネットワーク出力が制限された状態でワークスペースが正しく機能することを確認します。
- 汎用コンピュート リソースを作成して開始します。
- 正常に起動し、状態 が Running になっていることを確認します。
- コンピュート リソースにノートブックをアタッチし、
SELECT 1+1.
Terraform でデプロイメントを自動化する
本番運用のデプロイまたは複数のワークスペースの管理の場合、 Databricks Terraform使用して上記のファイアウォール構成を自動化することをお勧めします。 Security Reference Architecture (SRA) は、以下を自動化する本番運用対応のTerraformモジュールを提供します。
- Deny-by-Egress、 Databricksコントロール プレーン アクセス、制限付き Google APIs用のVPCファイアウォール ルール
- プライベート Google アクセス用の VPC ルート
- プライベートDNSゾーンとレコード
restricted.googleapis.com
利用を開始するには以下の手順を踏みます。
- SRA リポジトリを複製します:
git clone https://github.com/databricks/terraform-databricks-sra.git。 - GCP ワークスペース デプロイメント モジュールを確認します。
- プロジェクト固有の値を使用してモジュールを構成します。
- Terraform 構成を適用して、ファイアウォール ルールを使用してワークスペースをプロビジョニングします。
セキュリティ リファレンス アーキテクチャ (SRA) はコミュニティ主導であり、Databricks によって公式にサポートされていません。