共用方式為


啟用 GitLab CI/CD 的工作負載身分識別同盟

Databricks OAuth 令牌聯邦,也稱為 OpenID Connect (OIDC),可讓您在 Databricks 外部執行的自動化工作負載安全地存取 Databricks,而無需使用 Databricks 憑證。 請參閱 使用 OAuth 令牌同盟驗證 Azure Databricks 的存取權。

若要啟用 GitLab CI/CD 的工作負載身分識別同盟:

  1. 建立同盟原則
  2. 設定 GitLab YAML 檔案

啟用工作負載身分識別同盟之後,Databricks SDK 和 Databricks CLI 會自動從 GitLab CI/CD 擷取工作負載識別令牌,並將它們交換為 Databricks OAuth 令牌。

建立同盟原則

首先,建立工作負載身分識別聯合政策。 如需指示,請參閱 設定服務主體同盟原則。 針對 GitLab CI/CD,請設定下列值:

  • 隊: 您的 GitLab 群組名稱。 例如,如果您的專案URL是 https://gitlab.com/databricks-inc/data-platform,則群組是 databricks-inc
  • 發射: 要允許的單一 GitLab 專案名稱,例如 data-platform.
  • 參考類型: 權杖的 (主旨) 宣告中 sub 所代表的 Git 參考類型。 這可以是 分支標籤合併請求
  • 發行人網址: 發出 OIDC 權杖的 GitLab 執行個體 URL。
  • 題: 從工作內容取得的值串連。
  • 受眾: OIDC 權杖中的預期 aud 值。 在工作區塊 id_tokens: 中設定此設定。 Databricks 建議將它設定為您的 Azure Databricks 帳戶識別碼。
  • 主體宣告: (選擇性) 包含來自 OIDC 權杖的工作負載身分識別 (sub) 值的 JWT 宣告。 對於 GitLab,請將欄位保留為 sub,以編碼觸發管線的專案、分支、標籤或合併請求。

例如,下列 Databricks CLI 命令會為 Databricks 服務主體數值識別碼 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 帳戶識別碼。

除了設定下列工作區環境變數之外,請將權杖儲存在 Azure Databricks 環境變數中 DATABRICKS_OIDC_TOKEN 。 或者,使用自訂環境變數並設定 DATABRICKS_OIDC_TOKEN_ENV

  • DATABRICKS_AUTH_TYPEenv-oidc
  • DATABRICKS_HOST:您的 Databricks 工作區 URL
  • DATABRICKS_CLIENT_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