ファイアウォールを使用してワークスペースのネットワークエグレスを制限する
デフォルトでは、Google Cloud は VPC からのすべての下り(外向き)トラフィックを許可します。必要に応じて、組織が必要とする重要なサービスと宛先のみにエグレスを制限するようにワークスペースを構成することを選択できます。重要なサービスを許可するには、Google Cloud ネットワーク (VPC) と、Databricks がワークスペース用に作成するファイアウォールを変更する必要があります。一部のサービスでは、プライベート IP アドレスで Google と通信するように Googleアクセス シークレットを設定できます。APIs
これらの Google Cloud 機能の仕組みに関する最新情報については、 Google Cloud のドキュメントをご覧ください。
Databricks Web アプリケーションに接続するように企業ドメイン名ファイアウォールを構成する場合は、代わりに「 ドメイン名ファイアウォール規則の構成」を参照してください。
従来のコンピュート プレーンとコントロール プレーンの定義など、 Databricks アーキテクチャの一般的な概要については、「 Databricks アーキテクチャの概要」を参照してください。
ファイアウォール構成の概要
従来のコンピュート プレーンからの出力を制限する場合は、次の 2 つの一般的なタイプの設定を行って、ブロックされる必要な接続を許可する必要があります。
-
GCS向けプライベートGoogleアクセス : デフォルトでは、Databricksクラスタリングノードなどのコンピュートエンジン仮想マシン(VM)がネットワークインターフェースに割り当てられた外部(パブリック)IPアドレスがない場合、他の内部IPアドレスの宛先にのみパケットを送信できます。これらの VM が Google APIs とサービスで使用される外部 IP アドレスのセットに接続できるようにするには、VM のネットワーク インターフェースが使用するサブネットで Private Google Access(PGA) を有効にします。 PGA では、Databricks のコンピュートプレーンとこれらの Google サービス間の直接通信は、パブリックインターネットではなく Google の内部ネットワークを使用します。
従来のコンピュート プレーンは、 Google Cloud Storage (GCS) を使用して、ワークスペースの正常性チェック ログと使用状況ログに書き込みます。
-
コントロール プレーン サービスのファイアウォール ルール : 組み込みのファイアウォールを変更してエグレスをブロックした後、新しいファイアウォール ルールを追加して、いくつかの重要なサービスを許可する必要があります。
- Web アプリケーションへのエグレスとポート 443 での REST APIs 。
- ポート 443 の セキュア クラスター接続 リレーへのエグレス。
- デフォルトへの出力は、ポート 3306 で Hive metastore します。 独自の外部メタストアをデプロイする場合は、未使用のデフォルト メタストアにネットワーク ルールを追加する必要はありません。
- Databricks コンピュート プレーンから Databricks コントロール プレーンへの内部コールの出力は、ポート 8443 でAPIします。
- ポート 8444 の へのUnity Catalog ログ記録とリネージ データ ストリーミングのエグレス。Databricks
- 今後の機能をサポートするためのポート 8445-8451 のエグレス。
- VPC 内通信のエグレスは、適切なクラスタリング機能と内部サービス通信を確保するために許可する必要があります。
Web アプリケーション、セキュリティで保護されたクラスター接続リレー、およびデフォルト Hive metastore の IP アドレス範囲は、リージョンによって異なります。 リージョンの値については、 Databricks サービスと資産の IP アドレスとドメインの表を参照してください。
この記事では、 gcloud
コマンドライン インターフェース(CLI)を使用した Google Cloud の設定例を紹介します。 これらの例を使用するには、 Google Cloud SDK をインストールする必要があります。
リージョン別のコントロール プレーン サービス エンドポイントの IP アドレス
エグレスをブロックするようにファイアウォールを構成する場合は、新しい VPC エグレス ファイアウォール ルールとルートを定義して、Databricks コントロール プレーンでホストされている重要なサービスを許可する必要があります。エンドポイントの IP アドレスは、Databricks ワークスペースの Google Cloud リージョンによって異なります。「Databricks サービスと資産の IP アドレスとドメイン」の表を使用して、ワークスペースの Google Cloud リージョンのコントロール プレーン イングレスのポートと IP アドレスを取得します。
ステップ 1: ネットワークのサイズ設定を計画する
大規模なクラスタリングまたは多数のワークスペースを使用する予定の場合は、 Databricks ジョブを実行するのに十分な IP スペースがワークスペースにあることを確認してください。
Databricks ワークスペースで使用されるサブネットは、ワークスペースのデプロイ後に変更できないため、正確に構成します。Databricks サブネットのアドレス範囲が小さすぎると、ワークスペースの IP 空間が使い果たされ、Databricks ジョブが失敗します。必要なアドレス範囲のサイズを決定するには、「 新しいワークスペースのサブネットのサイズ設定」を参照してください。
ステップ 2: ワークスペースを作成する
-
アカウントコンソールにログインします
-
-
ワークスペースの作成時に [詳細設定 ] セクションに表示されるプライマリ IP 範囲の設定を書き留めます。これがデフォルトですが、上書きできます。詳細については、「 アカウント コンソールを使用してワークスペースを作成する」を参照してください。
-
-
Google アカウントの Databricks VPC とサブネットで プライベート Google アクセス (PGA) が有効になっていることを確認します。
ステップ 3: VPC ファイアウォール ルールを追加する
次に、Databricks が新しいワークスペース用に作成したファイアウォールにファイアウォール規則を追加する必要があります。
-
VPC 名を取得します。 Databricks は、ワークスペースの作成の一環として、この VPC を Google アカウントに作成しました。
- アカウントコンソールのワークスペースページで、ワークスペースをクリックして起動します。
- URL の の
?o=
の後の数値部分をコピーします。 たとえば、ワークスペース URL がhttps://1676665108650415.5.gcp.databricks.com/?o=1676665108650415#
の場合、ワークスペース ID は 1676665108650415 です。 - ワークスペースの VPC の名前は
databricks-managed-<workspace-ID>
です。 たとえば、databricks-managed-1676665108650415
. この値を CLI コマンドで使用できるように書き留めておきます。
-
Google Console を使用してファイアウォール ルールを追加する場合:
- Google Cloud コンソールの VPC ページに移動します。
- ワークスペースの VPC 名と一致するネットワークの VPC 名をクリックします。
- 「ファイアウォールルール 」タブをクリックします。
-
0.0.0.0/0
へのエグレスをブロックするルールを追加します。これは、すべての外部 IP アドレスを意味する特別な構文です。デフォルトでは、Google Cloud は VPC からのすべての下り(外向き)トラフィックを許可します。このトラフィックをブロックするルールを作成する必要があります。このルールの優先度が大きな数値に設定されていることを確認します。このルールは、Google Cloud が他のすべてのルールを実行した後で、このルールを適用することを目的としています。たとえば、このルールを優先度 1100 に設定し、後で出力ルールの優先度を 1000 から 1099 の範囲で設定できます。
このルールに低い優先度の値を誤って使用すると、Google Cloud は重要な Databricks サービスと GCE サービスへのネットワーク トラフィックを拒否し、ワークスペースが使用できなくなります。
このルールにより、内部 IP 空間 (10.0.0.0/8、172.16.0.0/20、192.168.0.0/16) に送信されるすべてのトラフィックには、クラスターがこれらの IP アドレスに到達できるようにするための追加のエグレス ルールが必要です。
次の gcloud
CLI コマンドを使用して、このルールを作成できます。 <vpc-name>
を VPC 名に置き換えます。
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>
-
Google ヘルスチェックからのイングレスを許可するルールを追加します。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を VPC 名に置き換えます。Bashgcloud compute firewall-rules create from-gcp-healthcheck \
--action ALLOW \
--rules tcp:80,tcp:443 \
--source-ranges 130.211.0.0/22,35.191.0.0/16 \
--direction INGRESS \
--priority 1010 \
--network <vpc-name> -
Google ヘルスチェックへの下り(外向き)を許可するルールを追加します。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を VPC 名に置き換えます。Bashgcloud compute firewall-rules create to-gcp-healthcheck \
--action ALLOW \
--rules tcp:80,tcp:443 \
--destination-ranges 130.211.0.0/22,35.191.0.0/16 \
--direction EGRESS \
--priority 1000 \
--network <vpc-name> -
制限付き APIs へのエグレスを許可するルールを追加します (restricted.googleapis.com) これは、固定IPアドレス範囲でGCE APIに到達するために必要です。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を VPC 名に置き換えます。Bashgcloud 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> -
Databricks ワークスペースで使用されるサブネット内通信 (エグレス) を許可するルールを追加します。サブネットのデフォルトのサブネット範囲は、ワークスペースの作成時に「 詳細構成 」セクションに表示されます。このサブネット範囲へのエグレスを許可する必要があります。このサブネット範囲は、UI で GCE ノードのプライマリ IP 範囲 としてラベル付けされています。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を VPC 名に置き換えます。X.X.X.X/X
を、ワークスペースの作成時に指定した Databricks サブネットに置き換えます。Bashgcloud compute firewall-rules create to-gce-nodes-subnet \
--action ALLOW \
--rules all \
--destination-ranges X.X.X.X/X \
--direction EGRESS \
--priority 1000 \
--network <vpc-name> -
Databricks コントロール プレーン サービスへのエグレスを許可するルールを追加します。[IP アドレスとドメイン] ページの表を使用して、これらのサービスでサポートされている各 Databricks リージョンの正しい値を決定します。
メイン Web アプリケーションへの接続と、ポート 443 および 8443-8451 での セキュア クラスタリング接続 (SCC) リレーを許可します。 次の
gcloud
CLI コマンドを使用して、このルールを作成します。<vpc-name>
を VPC 名に置き換えます。X.X.X.X/32,X.X.X.X/28,X.X.X.X/28
を Web アプリケーションのリージョンのイングレス アドレスに置き換えます。Y.Y.Y.Y
を SCC リレーの地域の IP アドレス範囲に置き換えます。ワークスペースで Private サービス Connect を有効にした場合は、PSC エンドポイントの IP アドレスを使用します。
Bashgcloud compute firewall-rules create to-databricks-control-plane \
--action ALLOW \
--rules tcp:443,tcp:8443-8451 \
--destination-ranges X.X.X.X/32,X.X.X.X/28,X.X.X.X/28,Y.Y.Y.Y/32 \
--direction EGRESS \
--priority 1000 \
--network <vpc-name> -
デフォルト メタストアを使用する場合は、ポート 3306 でメタストアへの接続を許可するルールを追加します。 次の
gcloud
CLI コマンドを使用して、このルールを作成します。<vpc-name>
を VPC 名に置き換えます。X.X.X.X
をデフォルト メタストアの地域の IP アドレス範囲に置き換えます。Bashgcloud compute firewall-rules create to-databricks-managed-hive \
--action ALLOW \
--rules tcp:3306 \
--destination-ranges X.X.X.X/32 \
--direction EGRESS \
--priority 1000 \
--network <vpc-name>
独自のメタストア インスタンスをデプロイした場合は、デフォルト メタストアの代わりに、そのメタストア インスタンスへの接続を許可するルールを作成します。
- データソースまたは他のシステムへの必要な接続を許可するために組織が必要とするその他のネットワーク エグレス ルールを追加します。
カスタム出力 ALLOW
ルールの場合は、プライオリティ番号を 1000 〜 1099 の範囲で設定します。 優先度番号は、すべての出力をブロックするために使用した値 (前の手順で優先度 1100 に設定) よりも小さくすることが重要です。
ファイアウォールのルールは次のようになりますが、ワークスペースのリージョンの コントロールプレーンサービスには、リージョンのIPアドレス を使用する必要があります。
ステップ 4: VPC ルートを更新する
Google Cloud ルート は、ネットワーク トラフィックが仮想マシン(VM)インスタンスから他の宛先に移動するパスを定義します。 VPC ネットワークでは、ルートは CIDR 形式の 1 つの宛先プレフィックスと 1 つのネクストホップで構成されます。
-
VPC で自動的に作成されたデフォルトルート (ネクストホップとしてデフォルトのインターネットゲートウェイと
0.0.0.0/0
されている) を削除します。 コンソール UI を使用してこのルートを削除し、インターネットへのパスをクリアします。-
Google Cloud コンソールのルートリストに移動します。
-
0.0.0.0/0
するルートを選択し、[ 削除 ] をクリックします。
-
-
VPC制限された GoogleAPIs サブネット()にトラフィックを送信するルートを
199.36.153.4/30
に作成します。ネクストホップを、プライベート APIsGoogle にアクセスするための要件に従ってdefault-internet-gateway
に設定します。次の
gcloud
CLI コマンドを使用して、このルートを作成できます。<vpc-name>
を VPC 名に置き換えます。<project-name>
をプロジェクト名に置き換えます。Bashgcloud beta compute routes create route-to-google-apis \
--project=<project-name> --description="Route to Google restricted APIs" \
--network=<vpc-name> \
--priority=1000 \
--destination-range=199.36.153.4/30 \
--next-hop-gateway=default-internet-gateway -
Databricks コントロール プレーン サービスに到達するためのルートを作成します。 Databricks のサービスと資産の IP アドレスとドメインで、リージョンの値を取得します。
次の
gcloud
CLI コマンドを使用して、Web アプリケーションへのルートを作成できます。<vpc-name>
を VPC 名に置き換えます。<project-name>
をプロジェクト名に置き換えます。X.X.X.X/32,X.X.X.X/28,X.X.X.X/28
を Web アプリケーションの地域 IP アドレスの範囲に置き換えます。Bashgcloud beta compute routes create route-to-databricks-web-app-1 \
--project=<project-name> --description="Route to Databricks web app" \
--network=<vpc-name> \
--priority=1000 \
--destination-range=X.X.X.X/32 \
--next-hop-gateway=default-internet-gatewayBashgcloud beta compute routes create route-to-databricks-web-app-2 \
--project=<project-name> --description="Route to Databricks web app" \
--network=<vpc-name> \
--priority=1000 \
--destination-range=X.X.X.X/28 \
--next-hop-gateway=default-internet-gatewayBashgcloud beta compute routes create route-to-databricks-web-app-3 \
--project=<project-name> --description="Route to Databricks web app" \
--network=<vpc-name> \
--priority=1000 \
--destination-range=X.X.X.X/28 \
--next-hop-gateway=default-internet-gateway次の
gcloud
CLI コマンドを使用して、 セキュリティで保護されたクラスター接続 リレーへのルートを作成できます。<vpc-name>
を VPC 名に置き換えます。<project-name>
をプロジェクト名に置き換えます。X.X.X.X/32
を SCC リレーの地域 IP アドレス範囲に置き換えます。Bashgcloud beta compute routes create route-to-databricks-scc-service \
--project=<project-name> --description="Route to Databricks SCC relay" \
--network=<vpc-name> \
--priority=1000 \
--destination-range=X.X.X.X/32 \
--next-hop-gateway=default-internet-gatewayデフォルトのメタストアを使用する場合は、次の
gcloud
CLI コマンドを使用して、デフォルトのメタストアへのルートを作成します。<vpc-name>
を VPC 名に置き換えます。<project-name>
をプロジェクト名に置き換えます。X.X.X.X/32
をメタストアの地域 IP アドレス範囲に置き換えます。Bashgcloud beta compute routes create route-to-databricks-default-metastore \
--project=<project-name> --description="Route to default metastore" \
--network=<vpc-name> \
--priority=1000 \
--destination-range=X.X.X.X/32 \
--next-hop-gateway=default-internet-gateway
ステップ 5: Google APIs の DNS ゾーンを作成して、Google Private Access for GCS を有効にできるようにする
APIsここで、従来のコンピュート プレーンから GoogleAPIs forGCS やその他の GoogleGCP サービスへの Google Private Access を有効にするために必要な Google の DNS ゾーンを作成する必要があります。GPA の有効化の詳細については、Google のドキュメント記事「 限定公開の Google アクセスを設定する」を参照してください。
-
Cloud DNS を使用して、ドメイン
googleapis.com
の VPC 内の DNS をカスタマイズします。 通常、googleapis.com
はパブリック IP アドレスに解決されますが、Google Private Access の場合はrestricted.googleapis.com
. このドメインは、Google Cloud ネットワーク内でアクセス可能な特定の範囲199.36.153.4/30
に解決されます。Databricks クラシック コンピュート プレーン クラスタリングには、GCS.PGA の場合、制限付き APIs へのアクセスが解決されていることを確認する必要があります。そうしないと、GCE が正常に開始されません。
次の
gcloud
コマンドを使用して、DNS ゾーンを作成できます。<vpc-name>
を VPC 名に置き換えます。Bashgcloud dns managed-zones create google-apis \
--description "private zone for Google APIs" \
--dns-name googleapis.com \
--visibility private \
--networks VPC-NAME
gcloud dns record-sets transaction start --zone google-apis
gcloud dns record-sets transaction add restricted.googleapis.com. \
--name *.googleapis.com \
--ttl 300 \
--type CNAME \
--zone google-apis
gcloud dns record-sets transaction add "199.36.153.4" "199.36.153.5" "199.36.153.6" "199.36.153.7" \
--name restricted.googleapis.com \
--ttl 300 \
--type A \
--zone google-apis
gcloud dns record-sets transaction execute --zone google-apisGoogle Cloud Console のオブジェクトは次のようになります。
ステップ 6: 構成の検証
- 万能コンピュートリソースを作成して起動します。
- 正常に開始され、状態が Running であることを確認します。
- コンピュート リソースにノートブックをアタッチし、
SELECT 1+1
.