啟用 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
  • 實體類型: 權杖的主旨(claim)宣告中sub所代表的 GitHub 實體類型。 預設值為 Branch。 Databricks 建議使用 環境,您可以在 GitHub Actions YAML 檔案中設定 environment 屬性來啟用。 請參閱 部署至特定環境
  • 發行人網址:https://token.actions.githubusercontent.com
  • 題: 串連 GitHub Actions 作業內容中的值所形成的字串。
  • 受眾: Databricks 建議將此設定為您的 Azure Databricks 帳戶識別碼。 如果省略,則預設會使用帳戶 ID。
  • 主體宣告: (選擇性) 包含來自 OIDC 權杖的工作負載身分識別 (sub) 值的 JWT 宣告。 針對 GitHub,請將欄位保留為 sub,以編碼觸發工作流程的存放庫、分支、標籤、提取/合併要求或環境。 若要以可重用工作流程(可重用工作流程)來認證,而非呼叫儲存庫,請參見 「使用可重用工作流程進行認證」。

例如,下列 Databricks CLI 命令會為名為 my-org 的組織建立同盟原則,且 Databricks 服務主體數值識別碼 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_TYPEgithub-oidc
  • DATABRICKS_HOST:您的 Databricks 工作區 URL
  • DATABRICKS_CLIENT_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 為你可重複使用的工作流程檔案的參考:

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僅在呼叫工作流程中核准 job_workflow_ref 時,才會在 OIDC 憑證中包含 id-token: write 主張。