GitLab CI/CD のワークロード ID フェデレーションを有効にする
Databricks OAuth トークン フェデレーション (OpenID Connect (OIDC) とも呼ばれます) を使用すると、Databricks の外部で実行されている自動化されたワークロードで、Databricks シークレットを必要とせずに Databricks に安全にアクセスできます。「OAuth トークン フェデレーションを使用して 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
です。 - プロジェクト: 許可する単一の 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
の場合、フェデレーション ポリシーを作成します。
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 ワークスペースの URLDATABRICKS_CLIENT_ID
: サービスプリンシパル (application) 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