为 GitHub Actions 启用工作负载身份联合

Databricks OAuth 令牌联合(也称为 OpenID Connect(OIDC))允许在 Databricks 外部运行的自动化工作任务无需使用 Databricks 机密即可安全地访问 Databricks。 请参阅使用 OAuth 令牌联合身份验证对 Azure Databricks 进行身份验证。

若要为 GitHub Actions 启用工作负荷标识联合身份验证,请执行以下操作:

  1. 创建联合策略
  2. 配置 GitHub Actions YAML 文件

启用工作负荷标识联合后,Databricks SDK 和 Databricks CLI 会自动从 GitHub 提取工作负载标识令牌,并将其交换为 Databricks OAuth 令牌。

创建联合策略

首先,创建工作负载身份联合策略。 有关说明,请参阅 配置服务主体联合策略。 对于 GitHub,请为策略设置以下值:

  • 组织: Github 组织的名称。 例如,如果存储库 URL 为 https://github.com/databricks-inc/data-platform,则组织为 databricks-inc
  • 存储 库: 要允许的单个存储库的名称,例如 data-platform
  • 实体类型: 令牌的 sub(主体)声明中表示的 GitHub 实体种类。 默认值为 Branch。 Databricks 建议使用 环境,可以通过在 GitHub Actions YAML 文件中设置 environment 属性来启用环境。 请参阅 “部署到特定环境”
  • 颁发者 URL:https://token.actions.githubusercontent.com
  • 主题: 通过连接 GitHub Actions 作业上下文中的值而形成的字符串。
  • 受众: Databricks 建议将此选项设置为您的 Azure Databricks 帐户 ID。 如果省略,则默认使用帐户 ID。
  • 主体声明:(可选)包含来自 OIDC 令牌的工作负载身份(sub)值的 JWT 声明。 对于 GitHub,请将字段保留为 sub,用于对触发工作流的存储库、分支、标记、拉取/合并请求或环境进行编码。 若要以可重用工作流而不是调用存储库的身份进行身份验证,请参阅 使用可重用工作流进行身份验证

例如,以下 Databricks CLI 命令创建一个联合策略,适用于名为my-org的组织和 Databricks 服务主体数字 ID 为5581763342009999的对象。

databricks account service-principal-federation-policy create 5581763342009999 --json '{
  "oidc_policy": {
	"issuer": "https://token.actions.githubusercontent.com",
	"audiences": [
  	  "a2222dd9-33f6-455z-8888-999fbbd77900"
	],
	"subject": "repo:my-github-org/my-repo:environment:prod"
  }
}'

配置 GitHub Actions YAML 文件

接下来,配置 GitHub Actions YAML 文件。 设置以下环境变量:

  • DATABRICKS_AUTH_TYPE: github-oidc
  • DATABRICKS_HOST:您的 Databricks 工作区 URL
  • DATABRICKS_CLIENT_ID:服务主体(应用程序)ID
name: GitHub Actions Demo
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on: workflow_dispatch

permissions:
  id-token: write
  contents: read

jobs:
  my_script_using_wif:
    runs-on: ubuntu-latest
    environment: prod
    env:
      DATABRICKS_AUTH_TYPE: github-oidc
      DATABRICKS_HOST: https://my-workspace.cloud.databricks.com/
      DATABRICKS_CLIENT_ID: a1b2c3d4-ee42-1eet-1337-f00b44r

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Databricks CLI
        uses: databricks/setup-cli@main

      - name: Run Databricks CLI commands
        run: databricks current-user me

使用可重用工作流进行身份验证

默认情况下, sub 声明标识调用存储库。 要认证为可重用工作流而不是调用存储库,请在联合策略中将subject_claim设置为job_workflow_ref。 任何团队都可以调用可重用工作流,但只有可重用工作流本身使用 Databricks 进行身份验证。

创建联合策略

使用job_workflow_ref作为主题声明创建联合策略。 将 subject 设置为可重用工作流文件的“ref”:

databricks account service-principal-federation-policy create 5581763342009999 --json '{
  "oidc_policy": {
    "issuer": "https://token.actions.githubusercontent.com",
    "audiences": [
      "a2222dd9-33f6-455z-8888-999fbbd77900"
    ],
    "subject": "my-github-org/shared-workflows/.github/workflows/deploy.yml@refs/heads/main",
    "subject_claim": "job_workflow_ref"
  }
}'

配置 GitHub Actions YAML 文件

创建使用Azure Databricks进行身份验证的可重用工作流,以及调用它的任何存储库中的调用工作流。

以下示例演示了一个可重用的工作流文件(.github/workflows/deploy.yml 在共享工作流存储库中):

on:
  workflow_call:

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      DATABRICKS_AUTH_TYPE: github-oidc
      DATABRICKS_HOST: https://my-workspace.cloud.databricks.com/
      DATABRICKS_CLIENT_ID: a1b2c3d4-ee42-1eet-1337-f00b44r

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Databricks CLI
        uses: databricks/setup-cli@main

      - name: Run Databricks CLI commands
        run: databricks current-user me

以下示例演示使用可重用工作流的任何存储库中的调用工作流:

on: workflow_dispatch

permissions:
  id-token: write
  contents: read

jobs:
  call-deploy:
    uses: my-github-org/shared-workflows/.github/workflows/deploy.yml@main

Note

在调用工作流上设置 permissions: id-token: write ,而不是可重用的工作流。 GitHub仅在对调用工作流授予id-token: write时,才在OIDC令牌中包含job_workflow_ref声明。