メインコンテンツまでスキップ

ファイアウォールを使用してワークスペースのネットワークエグレスを制限する

このページでは、 VPCファイアウォール ルール、ルート、プライベート DNS を構成して、Google クラウド上のDatabricksワークスペースからのネットワーク下りを重要なサービスと宛先にのみ制限する方法を説明します。

始める前に、次のものが必要です。

ファイアウォール構成の概要

この構成では、デフォルトで拒否するアプローチを使用します。つまり、すべての出力トラフィックをブロックし、必要な接続のみを選択的に許可します。構成には 3 つの主要コンポーネントがあります。

  1. プライベート Google アクセス : VM が Google の内部ネットワーク経由で Google Cloud Storage やその他の Google サービスにアクセスできるようにします。これにより、 Databricksクラスター ノードにパブリック IP を必要とせずにワークスペース ログをGCSに書き込むことができます。

  2. VPC ルートと DNS : Google API トラフィックをrestricted.googleapis.com経由でルーティングします。これにより、VPC Service Controls に準拠したサービスへのアクセスのみが可能になります。これにより、サポートされていない Google サービスへのデータの流出を防ぐことができます。

  3. Databricks サービスのファイアウォール ルール : 特定の Databricks コントロール プレーン エンドポイントへの出力を許可します。

    • Databricks コントロール プレーンと Databricks 管理対象システム リソース
    • クラスター機能のためのサブネット内通信
    • 外部Apache Hive metastore (レガシー)を使用しない場合は、まだHive metastore (ポート 3306)
ヒント

コントロール プレーン サービスの IP アドレスはリージョンによって異なります。ステップ 3 でファイアウォール ルールを構成するときに、 Databricksサービスとアセットの IP アドレスとドメインを利用できるようにしておきます。ワークスペースの地域 IP アドレスとポートが必要になります。

ステップ 1: ネットワークのサイジングを計画する

ワークスペースを作成する前に、ワークロードに十分な IP スペースを確保できるようにネットワーク サイズを計画します。ワークスペースの作成後にサブネットを変更するには、ワークスペースのネットワーク構成を更新する必要があります。「ワークスペースのネットワーク構成の更新」を参照してください。

サブネットが小さすぎると、ワークスペースの IP スペースが使い果たされ、ジョブが失敗します。クラスターのサイズとワークスペースの数に基づいてサブネットのサイズを決定するためのガイダンスについては、 「新しいワークスペースのサブネットのサイズ決定」を参照してください。

ステップ 2: VPCファイアウォール ルールを追加する

ワークスペースを作成したら、ファイアウォール ルールを構成して、デフォルトで拒否するセキュリティ モデルを実装します。以下のコマンドのプレースホルダーをワークスペース固有の値に置き換えます。

VPC名を取得する

  1. アカウント コンソールのワークスペース ページから、ワークスペースをクリックして起動します。
  2. ?o=の後の URL の数字部分をコピーします。たとえば、ワークスペース URL がhttps://1676665108650415.5.gcp.databricks.com/?o=1676665108650415#の場合、ワークスペース ID は1676665108650415になります。
  3. VPC 名はdatabricks-managed-<workspace-ID>です。たとえば、 databricks-managed-1676665108650415

または、 Google クラウド コンソールの VPC ページを使用して、UI からファイアウォール ルールを表示および管理することもできます。

すべての出力をブロックする(デフォルトで拒否)

すべての出力トラフィックをブロックするルールを作成します。優先度を 1100 に設定すると、すべての特定の許可ルール (優先度 1000 ~ 1099 を使用) の後に適用されます。すべての出力をブロックすると、 pypi.orgや Maven Central などのパブリック パッケージ リポジトリへのアクセスもブロックされます。すべて拒否ルールを有効にする前にこれを計画してください。

Bash
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 準拠サービスのエントリ ポイント
Bash
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 範囲を使用します。

Bash
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 アドレス
Bash
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 エンドポイント サブネットへの出力を許可します。

Bash
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 (レガシー)を使用する場合は、代わりに外部メタストアのルールを作成してください。

Bash
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

フィルター

プロトコルとポート

操作

優先順位

to-google-apis

イグレス

IP範囲: 199.36.153.4/30

すべて

許可

1000

to-databricks-control-plane

イグレス

IP 範囲: リージョン コントロール プレーンの IP 範囲または PSC エンドポイントの IP

tcp:443, 8443-8451

許可

1000

databricks-<workspace-id>-egress-intra-subnet

イグレス

IP範囲: ワークスペースのサブネット範囲

すべて

許可

1000

deny-egress

イグレス

IP範囲: 0.0.0.0/0

すべて

拒否

1100

databricks-<workspace-id>-ingress

イングレス

IP範囲: ワークスペースのサブネット範囲

すべて

許可

1000

ステップ 3: VPCルートを更新する

カスタム静的ルートを追加して、制限された VIP 範囲を介して Google API トラフィックを誘導します。各ルートは、デフォルトのインターネット ゲートウェイをネクストホップとして使用します。この構成により、パブリック IP を持たない VM が Google の制限された API エンドポイントにアクセスできるようになります。

次の宛先範囲のルートを作成します。

  • 199.36.153.4/30: プライベートGoogle Access APIエンドポイント restricted.googleapis.com
  • 34.126.0.0/18: 制限されたAPIエントリポイント restricted.googleapis.com
Bash
# 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のリクエストを解決するようになります。

Bash
# 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.4199.36.153.7 ) すべてを含む A レコードを追加します。

Bash
# 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.combigquery.googleapis.comなど) が制限された VIP に解決されるようになります。

Bash
# 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: 構成を検証する

ファイアウォール構成をテストして、ネットワーク出力が制限された状態でワークスペースが正しく機能することを確認します。

  1. 汎用コンピュート リソースを作成して開始します。
  2. 正常に起動し、状態 が Running になっていることを確認します。
  3. コンピュート リソースにノートブックをアタッチし、 SELECT 1+1.

Terraform でデプロイメントを自動化する

本番運用のデプロイまたは複数のワークスペースの管理の場合、 Databricks Terraform使用して上記のファイアウォール構成を自動化することをお勧めします。 Security Reference Architecture (SRA) は、以下を自動化する本番運用対応のTerraformモジュールを提供します。

  • Deny-by-Egress、 Databricksコントロール プレーン アクセス、制限付き Google APIs用のVPCファイアウォール ルール
  • プライベート Google アクセス用の VPC ルート
  • プライベートDNSゾーンとレコード restricted.googleapis.com

利用を開始するには以下の手順を踏みます。

  1. SRA リポジトリを複製します: git clone https://github.com/databricks/terraform-databricks-sra.git
  2. GCP ワークスペース デプロイメント モジュールを確認します。
  3. プロジェクト固有の値を使用してモジュールを構成します。
  4. Terraform 構成を適用して、ファイアウォール ルールを使用してワークスペースをプロビジョニングします。
注記

セキュリティ リファレンス アーキテクチャ (SRA) はコミュニティ主導であり、Databricks によって公式にサポートされていません。