Databricks OAuth トークン フェデレーション (OpenID Connect (OIDC) とも呼ばれます) を使用すると、Databricks の外部で実行されている自動化されたワークロードは、Databricks シークレットを必要とせずに Databricks に安全にアクセスできます。 OAuth トークン フェデレーションを使用した Azure Databricks へのアクセスの認証に関するページを参照してください。
GitLab CI/CD のワークロード ID フェデレーションを有効にするには:
ワークロード ID フェデレーションを有効にすると、Databricks SDK と Databricks CLI によって、GitLab CI/CD からワークロード ID トークンが自動的にフェッチされ、Databricks OAuth トークンと交換されます。
フェデレーション ポリシーを作成する
まず、ワークロード ID フェデレーション ポリシーを作成します。 手順については、「 サービス プリンシパルのフェデレーション ポリシーを構成する」を参照してください。 GitLab CI/CD の場合は、次の値を設定します。
-
群: GitLab グループの名前。 たとえば、プロジェクトの URL が
https://gitlab.com/databricks-inc/data-platformされている場合、グループはdatabricks-inc。 -
プロジェクト: 許可する 1 つの GitLab プロジェクトの名前 (
data-platformなど)。 -
Ref 型: トークンの
sub(サブジェクト) 要求で表される Git 参照の種類。 これには、 Branch、 Tag、または Merge 要求を指定できます。 - 発行者 URL: OIDC トークンを発行する GitLab インスタンス URL。
- 件名: ジョブ コンテキストから取得された値の連結。
-
観客: OIDC トークン内の予期される
aud値。 ジョブのid_tokens:ブロックでこれを構成します。 Databricks では、Azure Databricks アカウント ID に設定することをお勧めします。 -
サブジェクト要求: (省略可能) OIDC トークンのワークロード ID (
sub) 値を含む JWT 要求。 GitLab の場合は、フィールドをsubのままにします。このフィールドは、パイプラインをトリガーしたプロジェクト、ブランチ、タグ、またはマージ要求をエンコードします。
たとえば、次の Databricks CLI コマンドは、Databricks サービス プリンシパルの数値 ID 5581763342009999のフェデレーション ポリシーを作成します。
databricks account service-principal-federation-policy create 5581763342009999 --json '{
"oidc_policy": {
"issuer": "https://gitlab.com/example-group",
"audiences": [
"a2222dd9-33f6-455z-8888-999fbbd77900"
],
"subject": "project_path:my-group/my-project:..."
}
}'
GitLab YAML ファイルを構成する
次に、GitLab 構成ファイルを変更します。
<databricks-account-id>を Azure Databricks アカウント ID に変更します。
次のワークスペース環境変数を設定するだけでなく、 DATABRICKS_OIDC_TOKEN Azure Databricks 環境変数にトークンを格納します。 または、カスタム環境変数を使用し、 DATABRICKS_OIDC_TOKEN_ENVを設定します。
-
DATABRICKS_AUTH_TYPE:env-oidc -
DATABRICKS_HOST: Databricks ワークスペースの URL -
DATABRICKS_CLIENT_ID: サービス プリンシパル (アプリケーション) ID
spec:
inputs:
# Specify your Databricks account ID, workspace hostname, and service principal OAuth client ID.
databricks-account-id:
databricks-host:
databricks-client-id:
# See https://docs.gitlab.com/ci/inputs/#define-input-parameters-with-specinputs for more on pipeline input variables.
---
stages:
- my_script_using_wif
variables:
DATABRICKS_AUTH_TYPE: env-oidc
DATABRICKS_HOST: $[[ inputs.databricks-host ]]
DATABRICKS_CLIENT_ID: $[[ inputs.databricks-client-id ]]
my_script_using_wif:
id_tokens:
DATABRICKS_OIDC_TOKEN:
aud: $[[ inputs.databricks-account-id ]]
stage: my_script_using_wif
image: ubuntu:latest
before_script:
- apt-get update -y
- apt-get install -y curl unzip
- curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
script:
- databricks current-user me