次の方法で共有


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

Databricks OAuth トークン フェデレーション (OpenID Connect (OIDC) とも呼ばれます) を使用すると、Databricks の外部で実行されている自動化されたワークロードは、Databricks シークレットを必要とせずに Databricks に安全にアクセスできます。 OAuth トークン フェデレーションを使用した Azure 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
  • プロジェクト: 許可する 1 つの GitLab プロジェクトの名前 ( data-platformなど)。
  • Ref 型: トークンの sub (サブジェクト) 要求で表される Git 参照の種類。 これには、 BranchTag、または 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