ファイアウォールを使用してワークスペースのネットワークエグレスを制限する
デフォルトにより、Google クラウドはVPCからのすべての下り(外向き)トラフィックを許可します。 必要に応じて、組織に必要な重要なサービスと送信先のみに出力を制限するようにワークスペースを構成することもできます。 重要なサービスを許可するには、Google クラウド ネットワーク ( VPC ) と、 Databricksがワークスペース用に作成するファイアウォールを変更する必要があります。 一部のサービスでは、プライベート IP アドレス経由で Google と通信するための プライベート Google アクセス を設定できます。APIs
これらの Google クラウド機能の仕組みに関する最新情報については、 Google クラウドのドキュメントを参照してください。
Databricks Web アプリケーションに接続するように企業ドメイン名ファイアウォールを構成する場合は、代わりに「 ドメイン名ファイアウォール規則の構成」を参照してください。
クラシック コンピュート プレーンとコントロール プレーンの定義を含むDatabricksアーキテクチャの概要については、 Databricksアーキテクチャの概要」を参照してください。
ファイアウォール構成の概要
従来のコンピュート プレーンからの出力を制限する場合は、通常はブロックされる必要な接続を許可するために、次の 2 種類の一般的な構成を行う必要があります。
GCR と GCS の限定公開の Google アクセス: 既定では、Databricks クラスター ノードなどのコンピュート エンジン仮想マシン (VM) にネットワーク インターフェイスに割り当てられた外部 (パブリック) IP アドレスがない場合、他の内部 IP アドレスの宛先にのみパケットを送信できます。 VM のネットワークAPIs インターフェースが使用するサブネットで 限定公開の Google アクセス(PGA) を有効にすることで、これらの VM が Google の やサービスで使用される一連の外部 IP アドレスに接続できるようにすることができます。PGA では、Databricks コンピュート プレーンとこれらの Google サービス間の直接通信は、パブリック インターネットではなく Google の内部ネットワークを使用します。 これは、コンピュートプレーンからの次の発信接続に影響します。
従来のコンピュート プレーンは、Google Container Registry (GCR)を使用してDatabricksイメージを取得します。
従来のコンピュート プレーンはGoogle Cloud Storage ( GCS )を使用して、ワークスペースのヘルスチェック ログと使用状況ログを書き込みます。
コントロール プレーン サービスのファイアウォール規則: 組み込みのファイアウォールを変更してエグレスをブロックした後、新しいファイアウォール規則を追加して、いくつかの重要なサービスを許可する必要があります。
ポート 443 上の Web アプリケーションおよび REST APIsへの出力。
ポート 443 の セキュリティで保護されたクラスター接続 リレーへのエグレス。
デフォルトへのエグレスは、ポート 3306 で Hive metastore します。 独自の外部メタストアを展開する場合は、未使用のデフォルト メタストアにネットワーク ルールを追加する必要はありません。
Databricksコンピュート プレーンからポート 8443 上のDatabricksコントロール プレーンAPIへの内部呼び出しの出力。
ポート 8444 でUnity Catalogログ記録とリネージ データ ストリーミングをDatabricksに送信する出力。
ポート 8445 から 8451 のエグレスは、今後の機能をサポートします。
Web アプリケーション、セキュア クラスター接続リレー、および デフォルトHive metastoreの IP アドレス範囲は、リージョンによって異なります。 リージョンの値については、 「Databricks サービスおよびアセットの IP アドレスとドメイン」の表を参照してください。
この記事では、 gcloud
コマンドライン インターフェース(CLI)を使用した Google クラウドの設定例を紹介します。 これらの例を使用するには、 Google クラウド SDK をインストールする必要があります。
コントロール プレーン サービス エンドポイントの IP アドレス (リージョン別)
出力をブロックするようにファイアウォールを構成する場合は、Databricks コントロール プレーンでホストされている重要なサービスを許可するために、新しい VPC 出力ファイアウォール ルールとルートを定義する必要があります。 エンドポイント IP アドレスは、 Databricksワークスペースの Google クラウド リージョンによって異なります。 Databricksとアセットの IP アドレスとドメインの表を使用して、ワークスペースの Google クラウド リージョンのコントロール プレーン イングレスのポートと IP アドレスを取得します。
ステップ 1: ネットワークのサイジングを計画する
大規模なクラスターまたは多数のワークスペースを使用する予定の場合は、 ネットワーク サイズ計算ツールを使用して GKE サブネット範囲を計算し、ワークスペースに Databricks ジョブを実行するための十分な IP スペースがあることを確認してください。
ワークスペースのデプロイ後は変更できないため、Databricks ワークスペースで使用される GKE サブネットを正確に構成します。 Databricks サブネットのアドレス範囲が小さすぎると、ワークスペースの IP スペースが使い果たされ、Databricks ジョブが失敗します。 必要なアドレス範囲のサイズを決定するために、Databricks は Microsoft Excel スプレッドシート形式の計算機を提供します。 「新しいワークスペースのサブネット サイズの計算」を参照してください。
ステップ 2: ワークスペースを作成する
アカウントコンソールにログイン
-
ワークスペースを作成するフォームの [ Advanced Configuration ] セクションで、[ Enable private cluster] のデフォルト設定を使用して、ワークスペースでプライベート GKE クラスターを使用する必要があります。 プライベート GKE クラスターの場合、Databricks コンピュート インスタンスにはパブリック IP アドレスがありません。
ワークスペースの作成中に「詳細構成」セクションに表示されるすべての IP サブネット設定を書き留めます。 デフォルトはありますが、上書きすることができます。 詳細については、「アカウント コンソールを使用してワークスペースを作成する」を参照してください。
Google アカウントの Databricks VPC とサブネットで Private Google Access (PGA) が有効になっていることを確認します。
ステップ 3: VPC ファイアウォール ルールを追加する
ここで、Databricks が新しいワークスペース用に作成したファイアウォールにファイアウォール規則を追加する必要があります。
VPC 名を取得します。 Databricks は、ワークスペース作成の一環として、この VPC を Google アカウントに作成しました。
アカウントコンソールのワークスペースページで、ワークスペースをクリックして起動します。
?o=
の後の URL の数値部分をコピーします。たとえば、ワークスペース URL がhttps://1676665108650415.5.gcp.databricks.com/?o=1676665108650415#
の場合、ワークスペース ID は 1676665108650415 です。ワークスペースの VPC の名前は
databricks-managed-<workspace-ID>
です。 たとえば、databricks-managed-1676665108650415
です。 この値を書き留めて、CLI コマンドで使用できるようにします。
Google コンソールを使用してファイアウォール ルールを追加する場合:
Google クラウドコンソールの VPC ページに移動します。
ワークスペースの VPC 名と一致するネットワークの VPC 名をクリックします。
「 ファイアウォールルール 」タブをクリックします。
0.0.0.0/0
へのエグレスをブロックするルールを追加します。これは、すべての外部 IP アドレスを意味する特殊な構文です。デフォルトでは、Google クラウドは VPC からのすべての下り(外向き)トラフィックを許可します。 このトラフィックをブロックするルールを作成する必要があります。 このルールの優先度が大きな数値に設定されていることを確認します。 目的は、Google クラウドが他のすべてのルールを実行した後に、このルールを適用することです。 たとえば、このルールを優先度1100に設定し、後でエグレス・ルールの優先度を1000〜1099の範囲で設定できます。
重要
このルールに低い優先度の値を誤って使用すると、Google クラウドは重要な Databricks サービスと GKE サービスへのネットワーク トラフィックを拒否し、ワークスペースが使用できなくなります。
この規則により、内部 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 名に置き換えます。gcloud 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 名に置き換えます。gcloud 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 アドレス範囲で GKE API に到達するために必要です。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を実際の VPC 名に置き換えます。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>
GKE マスター リソースの IP 範囲への送信を許可するルールを追加します。 デフォルトの GKE マスター IP 範囲がありますが、ワークスペースの作成時に値をオーバーライドできます。 「アカウント コンソールを使用してワークスペースを作成する」を参照してください。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を実際の VPC 名に置き換えます。X.X.X.X/28
を GKE マスター リソースの IP 範囲に置き換えます。gcloud compute firewall-rules create to-gke-master \ --action ALLOW \ --rules tcp:443,tcp:10250 \ --destination-ranges X.X.X.X/28 \ --direction EGRESS \ --priority 1000 \ --network <vpc-name>
Databricks ワークスペースで使用されるサブネット内通信 (エグレス) を許可するルールを追加します。 これらのサブネットのデフォルトは、ワークスペースの作成時に [ 詳細構成 ] セクションに表示されます。 ユーザー インターフェースで GKE ノードのプライマリ IP 範囲、GKE ポッドのセカンダリ IP 範囲、GKE サービスのセカンダリ IP 範囲としてラベル付けされている 3 つのサブネット範囲すべてへのエグレスを許可する必要があります。
次の
gcloud
CLI コマンドを使用して、このルールを作成できます。<vpc-name>
を実際の VPC 名に置き換えます。X.X.X.X/X,X.X.X.X/X,X.X.X.X/X
を、ワークスペースの作成時に指定した 3 つの Databricks サブネットに置き換えます。gcloud compute firewall-rules create to-gke-nodes-subnet \ --action ALLOW \ --rules all \ --destination-ranges X.X.X.X/X,X.X.X.X/X,X.X.X.X/X \ --direction EGRESS \ --priority 1000 \ --network <vpc-name>
Databricks コントロール プレーン サービスへの出力を許可するルールを追加します。 Databricks サービスおよびアセットの IP アドレスとドメインの表を使用して、これらのサービスでサポートされている各 Databricks リージョンの正しい値を決定します。
メイン Web アプリケーションへの接続と、ポート 443 での セキュリティで保護されたクラスター接続 (SCC) リレーを許可します。 次の
gcloud
CLI コマンドを使用して、このルールを作成します。<vpc-name>
を VPC 名に置き換えます。X.X.X.X
を Web アプリケーションのリージョン別のイングレス アドレスに置き換えます。Y.Y.Y.Y
を SCC リレーの地域の IP アドレス範囲に置き換えます。gcloud compute firewall-rules create to-databricks-control-plane \ --action ALLOW \ --rules tcp:443 \ --destination-ranges X.X.X.X/32,Y.Y.Y.Y/32 \ --direction EGRESS \ --priority 1000 \ --network <vpc-name>
デフォルト メタストアを使用する場合は、ポート 3306 でのメタストアへの接続を許可するルールを追加します。 このルールを作成するには、次の
gcloud
CLI コマンドを使用します。<vpc-name>
を実際の VPC 名に置き換えます。X.X.X.X
を、デフォルト メタストアのリージョン IP アドレス範囲に置き換えます。gcloud 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 クラウドルート は、ネットワーク トラフィックが仮想マシン(VM)インスタンスから他の宛先にたどるパスを定義します。 VPC ネットワークでは、ルートは CIDR 形式の 1 つの宛先プレフィックスと 1 つのネクストホップで構成されます。
VPCで自動的に作成されたデフォルトルート(デフォルトインターネットゲートウェイをネクストホップとして
0.0.0.0/0
)を削除します。 コンソール UI を使用してこのルートを削除し、インターネットへのパスをクリアします。Googleクラウドコンソールのルートリストに移動します。
0.0.0.0/0
するルートを選択し、[削除] をクリックします。
制限された Google APIs サブネット(
199.36.153.4/30
)にトラフィックを送信するルートを VPC に作成します。 ネクストホップをdefault-internet-gateway
として設定するには、限定公開の Google APIsにアクセスします。次の
gcloud
CLI コマンドを使用して、このルートを作成できます。<vpc-name>
を実際の VPC 名に置き換えます。<project-name>
をプロジェクト名に置き換えます。gcloud 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
を Web アプリケーションのリージョン IP アドレス範囲に置き換えます。gcloud beta compute routes create route-to-databricks-scc-service \ --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-gateway
次の
gcloud
CLI コマンドを使用して、 セキュリティで保護されたクラスター接続 リレーへのルートを作成できます。<vpc-name>
を VPC 名に置き換えます。<project-name>
をプロジェクト名に置き換えます。X.X.X.X/32
を SCC リレーの地域 IP アドレス範囲に置き換えます。gcloud 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 アドレス範囲に置き換えます。gcloud beta compute routes create route-to-databricks-scc-service \ --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 ゾーンを作成して、GCS と GCR の Google プライベート アクセスを有効にする
ここで、Google 用の DNS ゾーンを作成する必要があります。これは、クラシックAPIs コンピュート プレーンからAPIs GCSと GCR の 2 つの Google への Google プライベート アクセスを有効にするために必要なものです。GPAの有効化の詳細については、Googleのドキュメント記事「 限定公開のGoogleアクセスの設定」を参照してください。
クラウド DNS を使用して、ドメイン
googleapis.com
の VPC 内の DNS をカスタマイズします。 通常、googleapis.com
はパブリック IP アドレスに解決されますが、Google プライベート アクセスの場合はrestricted.googleapis.com
を使用する必要があります。 このドメインは、Google クラウド ネットワーク内でアクセス可能な特定の範囲199.36.153.4/30
に解決されます。Databricksクラシック コンピュート プレーン GKE クラスターには、 GCSおよび GCR へのアクセスが必要です。 PGA の場合、制限されたAPIsへのアクセスが解決されていることを確認する必要があります。そうしないと、GKE が正常に起動しません。
次の
gcloud
コマンドを使用して、DNS ゾーンを作成できます。<vpc-name>
を実際の VPC 名に置き換えます。gcloud 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-apis
Google クラウドコンソールのオブジェクトは、次のようになります。
GCR.io ドメインに対して同様のゾーン設定を行い、コンテナ レジストリに到達するために制限された Google APIs サブネットにトラフィックを送信します。 これらの変更がないと、必要なすべての Databricks ランタイム コンテナをプルダウンできないため、GKE クラスターは正常に立ち上がれません。
次の
gcloud
コマンドを使用して、これらの DNS ゾーンを作成できます。<vpc-name>
を実際の VPC 名に置き換えます。gcloud dns managed-zones create gcr-io \ --description "private zone for GCR.io" \ --dns-name gcr.io \ --visibility private \ --networks <vpc-name> gcloud dns record-sets transaction start --zone gcr-io gcloud dns record-sets transaction add gcr.io. \ --name *.gcr.io \ --ttl 300 \ --type CNAME \ --zone gcr-io gcloud dns record-sets transaction add "199.36.153.4" "199.36.153.5" "199.36.153.6" "199.36.153.7" \ --name gcr.io \ --ttl 300 \ --type A \ --zone gcr-io gcloud dns record-sets transaction execute --zone gcr-io
Google クラウドコンソールのオブジェクトは、次のようになります。
ステップ 6: 構成を検証する
Databricks クラスターを作成して開始します。
正常に起動し、状態 が Running であることを確認するまで待ちます。
クラスターピッカーで 、クラスターを選択します 。 ワークスペースのクラスター名には、名前
db-
の後に大きな数値である Databricks ワークスペース ID が続きます。すべてのサービスのステータスが [OK] と表示されていることを確認します。
トラブルシューティング
Cannot start GKE クラスター
GKE クラスターが起動しない場合は、Databricks ワークスペースで使用されている VPC で限定公開の Google アクセスが有効になっているときに、DNS の設定に誤りがある可能性があります。 ノードが googleapis
ホスト名を解決できない場合、登録に失敗し、最終的に GKE クラスターの作成に失敗する可能性があります。
ログを表示するには、対応する GKE ノードのシリアルポートログを確認します。 次のようなエラーが表示される場合があります。
>>> [ 203.604558] configure.sh[948]: curl: (6) Couldn't resolve host '
>>> storage.googleapis.com'
>>> [ 203.605422] configure.sh[948]: == Failed to download
>>> https://storage.googleapis.com/gke-release/npd-custom-plugins/v1.0.1/npd-custom-plugins-v1.0.1.tar.gz.
>>> Retrying. ==
>>> [ 203.614049] configure.sh[948]:
>>> https://www.googleapis.com/auth/devstorage.read_write
クラスターは VPC ネットワークを使用しているため、このクラスターが存在するサブネットでは限定公開の Google アクセスが有効になっています。 限定公開の Google アクセスの設定は、 この Google PGA ドキュメントの手順に従って完了する必要があります。
GKE クラスターが動作を停止するか、以前の試行で正常に開始できた後に開始できない
GKE をホストしているプロジェクトでコンピュート エンジン サービス アカウントが正しく構成されていないため、GKE クラスターが動作を停止したり、GKE クラスターを開始できなかったりすることがあります。 問題のあるクラスターのノードに関連付けられているコンピュート エンジンの既定のサービス アカウントが 'disabled' 状態になっているか、必要な最低限のロールを持っていません。 サービス アカウントは <project-id>-compute@developer.gserviceaccount.com
です。
ノード登録の失敗の原因は、問題のあるクラスターのそのノードにアタッチされているこのサービス アカウントの無効状態が原因である可能性があります。
この Google ヘルプセンターの記事に従ってサービス アカウントを有効にし、クラスターまたはノード プールを再作成して、問題が解決するかどうかを確認してください。
また、Google クラウドコンソールを使用して、IAMと管理ページでサービスアカウントと問題のあるクラスターの対応するノードを確認することもできます。
デフォルトでは、コンピュートエンジンのデフォルトのサービスアカウントは、IAM プロジェクトエディタロールで作成されます。 次のようにして、最低限必要なロールに変更できます。
デフォルト コンピュート サービス アカウントに割り当てられている現在のロールを取得します。
gcloud projects get-iam-policy {{project-id}} \ --flatten="bindings[].members" \ --format='table(bindings.role)' \ --filter="bindings.members:{{project-id}}-compute@developer.gserviceaccount.com"
デフォルト コンピュート サービス アカウントに必要な最小限のロールを追加する
gcloud projects add-iam-policy-binding {{project-id}} \ --member "serviceAccount:{{project-id}}-compute@developer.gserviceaccount.com" \ --role roles/logging.logWriter gcloud projects add-iam-policy-binding {{project-id}} \ --member "serviceAccount:{{project-id}}-compute@developer.gserviceaccount.com" \ --role roles/monitoring.metricWriter gcloud projects add-iam-policy-binding {{project-id}} \ --member "serviceAccount:{{project-id}}-compute@developer.gserviceaccount.com" \ --role roles/monitoring.viewer gcloud projects add-iam-policy-binding {{project-id}} \ --member "serviceAccount:{{project-id}}-compute@developer.gserviceaccount.com" \ --role roles/stackdriver.resourceMetadata.writer
プロジェクト編集者の役割をデフォルトのコンピュートサービスアカウントから削除します。
gcloud projects remove-iam-policy-binding {{project-id}} \ --member "serviceAccount:{{project-id}}-compute@developer.gserviceaccount.com" \ --role roles/editor
デフォルト コンピュート サービス アカウントに割り当てられたロールを検証します。
gcloud projects get-iam-policy {{project-id}} \ --flatten="bindings[].members" \ --format='table(bindings.role)' \ --filter="bindings.members:{{project-id}}-compute@developer.gserviceaccount.com"
このサービスアカウントに、プロジェクトに対する適切なロールセットがあることを確認します。