最小権限のワークスペースを作成
最小特権ワークスペースは、Databricksに狭く明示的に定義されたIAM権限のセットのみを付与することで作成する、Google Cloud上のDatabricksワークスペースです。広範なロールを付与し、Databricksにクラウド リソースの自動プロビジョニングと構成を任せる代わりに、カスタムIAMロールを作成し、ネットワークおよび暗号化リソースを自分でセットアップし、アカウントAPIを介してワークスペースをプロビジョニングします。
このアプローチは、サードパーティサービスに付与される権限を最小限に抑える必要がある、セキュリティを重視した規制対象アカウントを対象としています。セットアップステップを手動で実行するため、最小特権ワークスペースの作成は標準の作成フローよりも多くの労力が必要です。
ほとんどのデプロイにおいて、Databricksは標準のワークスペース作成フローを推奨しています。このフローは、アカウントコンソールと広範な権限を使用してリソースを自動的にプロビジョニングします。クラシックワークスペースを作成するを参照してください。
このページでは、再試行をサポートしない、高度なAPI駆動型ワークフローについて説明します。各ステップを順番に完了し、検証してください。ステップが不足しているか誤って設定されている場合は、ワークスペースを削除してやり直す必要があります。
最小権限のワークスペース作成の仕組み
最小限の特権でのワークスペース作成には、それぞれ異なる Google サービスアカウントに割り当てられた2つの異なる IAM ロールセットが使用されます:
- ワークスペース作成者 : 所有し、Account API の呼び出しに使用する Google サービスアカウントです。作成時に設定を検証するために、読み取りレベルの権限のみが必要です。ワークスペース作成者のロールを付与します。
- **ワークスペース サービスアカウント**: Databricks がリージョナルコントロールプレーンで作成し、ワークスペース作成時に返される Google サービスアカウントです。ワークスペースを操作および管理できるように、ワークスペースオペレーターロールを付与します。
Databricksは作成途中でワークスペースサービスアカウントを返すため、フローは2つのフェーズに分割されます。ワークスペースをPROVISIONING状態で作成し、返されたサービスアカウントにオペレーターロールを付与してから、ワークスペースを更新してRUNNING状態にします。これらの呼び出しはAccount APIに対して直接行い、サポートするGoogle Cloudリソースはgcloud CLIで作成します。
始める前に
ワークスペースを作成する前に、以下の前提条件を完了してください。
必要なIAMロールを作成する
開始する前に、GCPプロジェクトで一連のIAMロールを作成する必要があります:
-
ワークスペース作成者のIAMロールを作成します。最小限の権限のワークスペース作成者ロールを参照してください。作成するロールは、ネットワーク設定によって異なります:
- 「共有VPCでワークスペースを作成する場合は、サービスプロジェクトロールとホストプロジェクトロールの両方を作成してください。」
- スタンドアロン VPC でワークスペースを作成する場合は、包括的なロールのみを作成します。
-
3つのワークスペースオペレーターのIAMロールを作成します。最小特権ワークスペースオペレーターのロールを参照してください。
ワークスペース作成者サービスアカウントの設定
-
新しいGoogleサービスアカウントを作成するか、既存のものを選択します。
-
作成したワークスペース作成者IAMロールをサービスアカウントに割り当て、各ロールを適切なプロジェクトにバインドします:
- 共有 VPC の場合は、サービス(ワークスペース)プロジェクトでサービスプロジェクトロールを、ホスト(VPC)プロジェクトでホストプロジェクトロールをバインドします。
- スタンドアロンVPCの場合、ワークスペースプロジェクトに包括的なロールをバインドします。
プロジェクトでロールを付与するには、
gcloud projects add-iam-policy-bindingを使用します。Bashgcloud projects add-iam-policy-binding <project-id> \
--member="serviceAccount:<creator-sa-email>" \
--role="projects/<project-id>/roles/<creator-role-id>" -
Databricksアカウントコンソールでサービスアカウントをユーザーとして追加します。
-
Databricksアカウントでサービスアカウントに**アカウント管理者**ロールを割り当てます。See Service Principal.
VPCファイアウォールルールを確認する
VPCに、同じサブネット内のVMインスタンス間の内部通信を許可するdefaultのサブネット内イングレスファイアウォールルールがあることを確認します。ルールが存在することを確認するために説明します:
gcloud compute firewall-rules describe default-allow-internal \
--project=<vpc-host-project-id>
ルールには、ソース範囲がDatabricksサブネット範囲と一致する以下のプロパティが必要です。
- 方向 :
INGRESS - 優先度 :
65534 - ソース範囲 : Databricks サブネット範囲
- 許可されているプロトコル :すべて
同等のルールが存在しない場合は、作成してください。defaultファイアウォールルールに関する詳細情報については、GCPドキュメントを参照してください。
認証を構成する
このページのアカウント API 呼び出しは、Google ID トークンで認証されます。このセクションのコマンドを読みやすくするために、 シングルアカウントモデル を使用しています。gcloud CLI は、トークン作成サービスアカウントとリソース所有サービスアカウントの両方として機能するワークスペース作成者のサービスアカウントとして直接認証されます。
本番運用および規制されたデプロイメントの場合、Databricks は、トークン作成サービスアカウント(SA-1)がリソース所有サービスアカウント(SA-2)を偽装し、それ自体が長期間有効なキーを保持しないという2つのサービスアカウントモデルを推奨しています。このモデルを適用するには、ワークスペース作成者サービスアカウントを SA-2 と見なし、SA-2 を偽装するための個別の SA-1 を作成します。セットアップ手順とトークンの有効期限制限については、「Google ID トークンによる認証」を参照してください。
このページでのAPIコールでは、2つの短期トークンを使用します。期限切れを防ぐために、APIコールを行う直前にそれらを生成してください:
-
Databricksが呼び出し元を検証するために使用する IDトークン (ヘッダー
Authorizationで渡されます):Bashgcloud auth print-identity-token --audiences="https://accounts.gcp.databricks.com" -
認証情報パススルー用の Google OAuth アクセストークン (
X-Databricks-GCP-SA-Access-Tokenヘッダーで渡されます):Bashgcloud auth print-access-token
このページの例では、これらの値がID_TOKENおよびACCESS_TOKEN環境変数に格納されていることを前提としています。これらのヘッダーの詳細については、Google ID トークンで認証するをご覧ください。
ステップ 1: ネットワーク構成とオプション機能を作成します
ワークスペースを作成する前に、ネットワーク構成と、オプションのPrivate Service Connectまたは顧客管理キーのリソースを事前に作成してください。Private Service Connectを使用する場合、ネットワーク構成でそれらのIDを参照できるように、まずEndpointを登録してください。各リクエストは、記録し、ステップ 5でワークスペースに渡す必要があるIDを返します。各IDは、オブジェクトのアカウントコンソールURLにも表示されます。
たとえば、ネットワーク構成URLの形式は次のとおりです:
https://<account-console>/cloud-resources/networking/network-configurations/<network-id>/
(オプション) Private Service Connect Endpointを登録する
Private Service Connectが有効なワークスペースを作成する場合は、ネットワーク構成を作成する前にEndpointを登録して、その中でそれらのIDを参照できるようにしてください。Google Cloudで必要なPrivate Service Connect Endpointを作成し、Databricksに登録してください。要件と手順については、「ワークスペースのPrivate Service Connectを有効にする」を参照してください。
Private Service Connect を使用しない場合は、ネットワーク構成を作成に進んでください。
ワークスペースVPC Endpointの登録:
curl -X POST \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/vpc-endpoints \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vpc_endpoint_name": "<frontend-endpoint-name>",
"gcp_vpc_endpoint_info": {
"project_id": "<vpc-host-project-id>",
"psc_endpoint_name": "<workspace-psc-endpoint-name>",
"endpoint_region": "us-central1"
}
}'
バックエンド(リレー)VPC Endpointを登録する:
curl -X POST \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/vpc-endpoints \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vpc_endpoint_name": "<backend-endpoint-name>",
"gcp_vpc_endpoint_info": {
"project_id": "<vpc-host-project-id>",
"psc_endpoint_name": "<relay-psc-endpoint-name>",
"endpoint_region": "us-central1"
}
}'
各レスポンスからvpc_endpoint_idをコピーします。次のセクションでネットワーク構成を作成する際、rest_apiフィールドにフロントエンドIDを使用し、dataplane_relayフィールドにバックエンドIDを使用します。
プライベートアクセス設定オブジェクトも作成します:
curl -X POST \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/private-access-settings \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"private_access_settings_name": "<pas-name>",
"region": "us-central1",
"public_access_enabled": true,
"private_access_level": "ACCOUNT"
}'
レスポンスからprivate_access_settings_idを記録します。
ネットワーク構成を作成する
顧客管理VPCとそのサブネットを表すネットワーク構成を作成します。要件とコンソールの手順については、「顧客管理VPCの構成」を参照してください。
次のリクエストはネットワーク構成を作成します。network_nameは3〜30文字で、a-z、A-Z、-、および_の文字のみを含める必要があります。Private Service Connectを使用する場合は、Private Service Connectエンドポイントの登録で記録したVPC Endpoint IDを含むvpc_endpointsフィールドを含めてください。それ以外の場合は、省略してください。
curl -X POST \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/networks \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"network_name": "<network-name>",
"gcp_network_info": {
"network_project_id": "<vpc-host-project-id>",
"vpc_id": "<vpc-id>",
"subnet_id": "<subnet-id>",
"subnet_region": "us-central1"
},
"vpc_endpoints": {
"dataplane_relay": ["<relay-vpc-endpoint-id>"],
"rest_api": ["<workspace-vpc-endpoint-id>"]
}
}'
レスポンスからnetwork_idを記録します。
(任意)顧客管理キーを設定する
作成前の一部として、顧客管理キーが有効なワークスペースを作成する場合は、今すぐキーを設定して登録してください。返されたキーIDは、後でステップ5でワークスペースに渡します。
-
Google Cloud で Cloud KMS キーを作成します。
-
ワークスペースストレージの暗号化には、ワークスペースプロジェクトで クラウド KMS CryptoKey 暗号化/復号化 ロールを、default コンピュート Engine サービスエージェントとdefault クラウド Storage サービスエージェントに付与します:
Bashgcloud kms keys add-iam-policy-binding KEY_NAME \
--keyring=KEY_RING \
--location=LOCATION \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
--member=serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
--member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com -
ストレージとマネージドサービスの両方について、Databricks にキーを登録します。要件については、暗号化のための顧客管理キーの構成を参照してください。
Bashcurl -X POST \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/customer-managed-keys \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"gcp_key_info": {
"kms_key_id": "<kms-key-resource-id>",
"manual": true
},
"use_cases": ["STORAGE", "MANAGED"]
}'レスポンスから
customer_managed_key_idを記録します。DatabricksがKMSキーへのアクセスを自身に付与しないように、
"manual": trueを設定します。最小権限のワークスペースでは、このアクセス権は、お客様自身で付与します。ストレージの暗号化/復号化ロールは上記で付与され、マネージドサービス用のロールは後でステップ4でワークスペースサービスアカウントに付与されます。
ステップ 2: databricks-compute サービスアカウントを作成する
カスタムサービスアカウントがアタッチされていないワークスペース内のすべてのコンピュートリソースによって使用されるdatabricks-computeサービスアカウントを作成します。このサービスアカウントには、ログ記録とメトリクスに限定された最小限の権限があります。
gcloud iam service-accounts create databricks-compute \
--display-name="Databricks Compute Service Account" \
--project=<workspace-project-id>
ステップ 3: ワークスペースを作成する
アカウント API を呼び出して、ワークスペースを PROVISIONING 状態で作成します。認証の構成から、アクセストークンとIDトークンの両方で認証します。ワークスペースに適用されるフィールドのみを含めます。たとえば、Private Service Connect と顧客管理キーのフィールドを使用しない場合は、それらを省略します。
curl -X POST \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces \
-H "X-Databricks-GCP-SA-Access-Token: $ACCESS_TOKEN" \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"workspace_name": "<workspace-name>",
"cloud": "gcp",
"cloud_resource_container": {
"gcp": {
"project_id": "<workspace-project-id>"
}
},
"location": "us-central1",
"pricing_tier": "ENTERPRISE",
"expected_workspace_status": "PROVISIONING"
}'
リクエストが成功すると、ワークスペースIDとワークスペースサービスアカウントを含む200レスポンスを返します。
{
"account_id": "<account-id>",
"cloud": "gcp",
"cloud_resource_container": {
"gcp": {
"project_id": "my-gcp-project"
}
},
"creation_time": 1643668346544,
"deployment_name": "1614665312930232.2",
"location": "us-central1",
"pricing_tier": "ENTERPRISE",
"workspace_id": 1614665312930232,
"workspace_name": "example-workspace-name",
"workspace_status": "PROVISIONING",
"workspace_status_message": "Workspace resources are being set up.",
"workspace_service_account": "<workspace-service-account>"
}
レスポンスからworkspace_service_account値をコピーします。次のステップで、このサービスアカウントにオペレーターロールを付与します。
ステップ 4: ワークスペース サービスアカウントにロールを付与する
その応答の の値を使用して、ステップ 3 で返されたワークスペースサービスアカウントにワークスペースオペレーターロール を付与します。workspace_service_account
サービス (ワークスペース) プロジェクトのプロジェクトレベルで、次のロールを付与します。
lpw.databricks.project.role.v2lpw.databricks.resource.role.v2この付与をワークスペースIDにIAM条件を追加することで、ワークスペースにスコープしてください。
各ロールに含まれる権限については、最小権限のワークスペースオペレーターロールをご覧ください。
ネットワークロールをサブネットにバインドします
Databricks サブネット上のワークスペースサービスアカウントにネットワークロールを割り当てます。これは、ワークスペースによって使用されるプライマリサブネットに適用されます。
gcloud compute networks subnets add-iam-policy-binding <subnet> \
--project=<vpc-host-project-id> \
--region=us-central1 \
--member="serviceAccount:<workspace-service-account>" \
--role="projects/<vpc-host-project-id>/roles/lpw.databricks.network.role.v2"
(オプション) マネージドサービス用の顧客管理キーの暗号化/復号化ロールを付与します。
マネージドサービスに顧客管理キーを使用している場合は、マネージドサービスの暗号化を有効にするために、ワークスペースサービスアカウントに クラウド KMS CryptoKey Encrypter/Decrypter ロールを付与します:
gcloud kms keys add-iam-policy-binding KEY_NAME \
--keyring=KEY_RING \
--location=LOCATION \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
--member=serviceAccount:db-WORKSPACEID@db-regional-cp-project.iam.gserviceaccount.com
続行する前に、先行するすべてのステップが完了していることを停止して確認してください。ワークスペースの作成フローはリトライをサポートしていません。ステップが見落とされたり、設定が間違っていたりすると、ワークスペースの作成が失敗し、ワークスペースを削除してやり直す必要があります。
ステップ5:ワークスペースをお客様のネットワーク構成を使用するように更新する
ステップ1で記録したネットワーク構成、およびオプションのPrivate Service Connectと顧客管理キーIDでワークスペースを更新します。このリクエストにより最終プロビジョニングが開始され、その後、非同期で続行されます。
ワークスペースに適用されるフィールドのみを含めます。例えば、顧客管理キーのフィールドを使用していない場合は、それらを省略します。
curl -X PATCH \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces/<workspace-id> \
-H "X-Databricks-GCP-SA-Access-Token: $ACCESS_TOKEN" \
-H "Authorization: Bearer $ID_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"network_id": "<network-id>",
"private_access_settings_id": "<private-access-settings-id>",
"storage_customer_managed_key_id": "<storage-customer-managed-key-id>",
"managed_services_customer_managed_key_id": "<managed-services-customer-managed-key-id>"
}'
成功したリクエストは200応答を返します。残りのプロビジョニング操作はリクエストが返された後に非同期で実行されるため、workspace_statusはRUNNINGではなくPROVISIONINGのままです:
{
"workspace_id": 1614665312930232,
"workspace_name": "example-workspace-name",
"workspace_status": "PROVISIONING",
"workspace_status_message": "Workspace resources are being set up.",
"account_id": "<account-id>",
"network_id": "<network-id>",
"pricing_tier": "ENTERPRISE",
"location": "us-central1",
"cloud": "gcp"
}
リクエストが失敗した場合、レスポンスが原因を示します。例えば:
400 BAD_REQUESTエラーは、Google Cloudプロジェクトの権限が不十分であることを示しています。ステップ4でオペレーターロールの付与を確認してください。404 RESOURCE_DOES_NOT_EXISTエラーは、ネットワークIDなどの参照されている構成IDが存在しないことを示します。ステップ 1で記録したIDを確認します。
プロビジョニングは通常、数分で完了します。続行する前に、ワークスペースのworkspace_statusがRUNNINGになるまでポーリングしてください:
curl -X GET \
https://accounts.gcp.databricks.com/api/2.0/accounts/<account-id>/workspaces/<workspace-id> \
-H "Authorization: Bearer $ID_TOKEN"
ワークスペースを作成した後
ワークスペースがRUNNINGの状態に達した後:
- **PSCのドメインネームシステム (DNS) を構成します。** ワークスペースがPrivate Service Connectを使用している場合は、DNS構成を完了してください。「ワークスペースのPrivate サービス Connectを有効にする」を参照してください。
- **ワークスペースを確認します。** Databricks クラスターを起動して、ワークスペースが正しく構成されていることを確認します。
クラウドストレージによってバックアップされたカタログを作成する
ワークスペースと同じリージョンにUnity Catalogメタストアがまだ存在しない場合、Databricksはメタストアを作成し、それをワークスペースに割り当てます。defaultカタログは自動的に作成されません。
ワークスペースをデータに対応させるには、クラウドストレージにバックアップされたカタログを作成します:
- ストレージ資格情報を作成します。「GCSにアクセスするストレージ資格情報を作成する」を参照してください。
- 外部ロケーションを作成します。「GCSバケットの外部ロケーションを作成」を参照してください。
- カタログを作成します。カタログを作成するをご覧ください。
次のステップ
最小特権ワークスペースを作成した後、データ戦略の構築を開始できます。Databricksでは、以下のページを推奨しています。
- ユーザー、グループ、Service Principalをワークスペースに追加します。ユーザー、Service Principal、グループの管理を参照してください。
- Databricksでのデータガバナンスと権限について学びましょう。「Unity Catalogとは」を参照してください。
- Databricksワークスペースを外部データソースに接続します。データソースと外部サービスへの接続を参照してください。
- ワークスペースにデータを取り込みます。Lakeflow Connectの標準コネクタを参照してください。