Включение федерации удостоверений рабочей нагрузки для GitHub Actions

Федерация токенов OAuth в Databricks, также известная как OpenID Connect (OIDC), позволяет автоматическим рабочим нагрузкам, работающим за пределами Databricks, безопасно обращаться к Databricks без использования секретов Databricks. См. сведения о проверке подлинности доступа к Azure Databricks с помощью федерации токенов OAuth.

Чтобы включить федерацию удостоверений рабочей нагрузки для GitHub Actions:

  1. Создание политики федерации
  2. Настройка YAML-файла GitHub Actions

После включения федерации удостоверений рабочей нагрузки пакеты SDK Databricks и CLI Databricks автоматически извлекают токены удостоверения рабочей нагрузки из GitHub и обменивают их на токены OAuth Databricks.

Создание политики федерации

Сначала создайте политику федерации идентичности нагрузки. Инструкции см. в разделе "Настройка политики федерации субъекта-службы". Для GitHub задайте следующие значения политики:

  • Организация: Имя организации Github. Например, если URL-репозитория — https://github.com/databricks-inc/data-platform, то организация — databricks-inc.
  • Хранилище: Имя одного репозитория, разрешающего, например data-platform.
  • Тип сущности: Тип сущности GitHub, представленной в утверждении маркера (субъект). Значение по умолчанию — Branch. Databricks рекомендует использовать Environment, который можно включить, задав атрибут environment в файле YAML GitHub Actions. См. статью "Развертывание в определенной среде".
  • URL-адрес издателя:https://token.actions.githubusercontent.com
  • Тема: Строка, сформированная путем объединения значений из контекста задания GitHub Actions.
  • Аудитории: Databricks рекомендует задать этот параметр для идентификатора учетной записи Azure Databricks. Если опущено, идентификатор учетной записи используется по умолчанию.
  • Утверждение субъекта: (необязательно) Утверждение JWT, содержащее значение удостоверения рабочей нагрузки (sub) из токена OIDC. Для 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"
  }
}'

Настройка YAML-файла GitHub Actions

Затем настройте YAML-файл GitHub Actions. Задайте следующие переменные среды:

  • DATABRICKS_AUTH_TYPE: github-oidc
  • DATABRICKS_HOST: URL-адрес рабочей области Databricks
  • 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"
  }
}'

Настройте эти YAML-файлы для GitHub Actions

Создайте повторно используемый рабочий процесс, прошедший проверку подлинности с помощью 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 предоставляется в рабочем процессе вызова.