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

GitLab CI/CD のワークロード ID フェデレーションを有効にする

Databricks OAuth トークン フェデレーション (OpenID Connect (OIDC) とも呼ばれます) を使用すると、Databricks の外部で実行されている自動化されたワークロードで、Databricks シークレットを必要とせずに Databricks に安全にアクセスできます。「OAuth トークン フェデレーションを使用して Databricks へのアクセスを認証する」を参照してください。

GitLab CI/CD のワークロード ID フェデレーションを有効にするには:

  1. フェデレーション ポリシーを作成する
  2. GitLab YAML ファイルを構成する

ワークロード 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です。
  • プロジェクト: 許可する単一の GitLab プロジェクトの名前 ( data-platformなど)。
  • 参照タイプ: トークンの sub (サブジェクト) 要求で表される Git 参照の種類。これは、 ブランチタグ 、または マージ要求 です。
  • 発行者URL: OIDC トークンを発行する GitLab インスタンス URL。
  • 件名: ジョブコンテキストから取得された値の連結。
  • 観客: OIDC トークンの予想される aud 値。ジョブの id_tokens: ブロックでこれを構成します。Databricks では、Databricks アカウント ID に設定することをお勧めします。
  • サブジェクト要求: (省略可能) OIDC トークンのワークロード ID (sub) 値を含む JWT 要求。GitLab の場合は、パイプラインをトリガーしたプロジェクト、ブランチ、タグ、またはマージ要求をエンコードするフィールドを subのままにします。

たとえば、次のDatabricks CLI コマンドは、Databricksサービスプリンシパルの数値 ID が 5581763342009999の場合、フェデレーション ポリシーを作成します。

Bash
databricks account service-principal-federation-policy create 5581763342009999 --json '{
"oidc_policy": {
"issuer": "https://gitlab.com/example-group",
"audiences": [
"https://gitlab.com/example-group"
],
"subject": "project_path:my-group/my-project:..."
}
}'

GitLab YAML ファイルを構成する

次に、GitLab 構成ファイルを変更します。<databricks-account-id> を Databricks アカウント ID に変更します。

次のワークスペース環境変数を設定するだけでなく、トークンを DATABRICKS_OIDC_TOKEN Databricks 環境変数に格納します。 または、カスタム環境変数を使用して、 DATABRICKS_OIDC_TOKEN_ENVを設定します。

  • DATABRICKS_AUTH_TYPE: env-oidc
  • DATABRICKS_HOST: Databricks ワークスペースの URL
  • DATABRICKS_CLIENT_ID: サービスプリンシパル (application) ID
YAML
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