다음을 통해 공유

为 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
  • Ref 类型: 令牌的 sub (使用者)声明中表示的 Git 引用类型。 这可以是 BranchTagMerge 请求
  • 颁发者 URL: 颁发 OIDC 令牌的 GitLab 实例 URL。
  • 主题: 从作业上下文中获取的值的串联。
  • 观众: OIDC 令牌中的预期 aud 值。 在作业块 id_tokens: 中配置此项。 Azure Databricks 建议将其设置为 Azure Databricks 帐户 ID。
  • 使用者声明: (可选)包含 OIDC 令牌中的工作负荷标识(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> Azure Databricks 帐户 ID。

除了设置以下工作区环境变量,请将令牌存储在 Azure Databricks 环境变量中 DATABRICKS_OIDC_TOKEN 。 或者,使用自定义环境变量并设置 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