Databricks OAuth 令牌联合(也称为 OpenID Connect(OIDC))允许在 Databricks 外部运行的自动化工作负荷以安全的方式访问 Databricks,而无需 Databricks 密钥。 请参阅使用 OAuth 令牌联合身份验证对 Azure Databricks 进行身份验证。
若要为 GitLab CI/CD 启用负载身份联合:
启用工作负荷标识联合后,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 引用类型。 这可以是 Branch、 Tag 或 Merge 请求。 - 颁发者 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