Włącz federację tożsamości obciążenia roboczego dla GitHub Actions

Federacja tokenów OAuth w Databricks, znana również jako OpenID Connect (OIDC), umożliwia automatyczne obciążenia działające z poza Databricks do bezpiecznego uzyskania dostępu do Databricks bez użycia tajnych kluczy Databricks. Zobacz Uwierzytelnianie dostępu do usługi Azure Databricks przy użyciu federacji tokenów OAuth.

Aby włączyć federację tożsamości operacji dla funkcji GitHub Actions:

  1. Tworzenie zasad federacji
  2. Skonfiguruj plik YAML dla GitHub Actions

Po włączeniu federacji tożsamości obciążenia zestawy SDK usługi Databricks i interfejs wiersza polecenia usługi Databricks automatycznie pobierają tokeny tożsamości obciążenia z usługi GitHub i wymieniają je dla tokenów OAuth usługi Databricks.

Tworzenie zasad federacji

Najpierw utwórz politykę federacji tożsamości obciążeń roboczych. Aby uzyskać instrukcje, zobacz Konfigurowanie zasad federacyjnych jednostki usługi. W przypadku usługi GitHub ustaw następujące wartości dla polisy:

  • Organizacja: Nazwa organizacji usługi GitHub. Jeśli na przykład adres URL repozytorium to https://github.com/databricks-inc/data-platform, organizacja to databricks-inc.
  • Repozytorium: Nazwa pojedynczego repozytorium do dopuszczenia, takie jak data-platform.
  • Typ jednostki: Rodzaj jednostki GitHub reprezentowany w oświadczeniu (podmiocie) sub tokenu. Wartość domyślna to Gałąź. Databricks zaleca korzystanie z Environment, które można włączyć, ustawiając atrybut environment w pliku YAML usługi GitHub Actions. Zobacz Wdrażanie w określonym środowisku.
  • Adres URL wystawcy:https://token.actions.githubusercontent.com
  • Temat: Ciąg utworzony przez łączenie wartości z kontekstu zadania funkcji GitHub Actions.
  • Odbiorcy: Usługa Databricks zaleca ustawienie tego na ID konta usługi Azure Databricks. W przypadku pominięcia identyfikator konta jest używany domyślnie.
  • Oświadczenie podmiotu: (opcjonalnie) Oświadczenie JWT, które zawiera wartość tożsamości obciążenia (sub) z tokenu OIDC. W przypadku usługi GitHub pozostaw pole jako sub, które koduje repozytorium, gałąź, tag, żądanie scalania lub środowisko, które wyzwoliło proces. Aby uwierzytelnić się jako przepływ pracy wielokrotnego użytku, a nie repozytorium wywołujące, zobacz Uwierzytelnianie przy użyciu przepływu pracy wielokrotnego użytku.

Na przykład, następujące polecenie CLI Databricks tworzy zasady federacji dla organizacji o nazwie my-org i numerycznego identyfikatora głównego usługi 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"
  }
}'

Skonfiguruj plik YAML GitHub Actions

Następnie skonfiguruj plik YAML funkcji GitHub Actions. Ustaw następujące zmienne środowiskowe:

  • DATABRICKS_AUTH_TYPE: github-oidc
  • DATABRICKS_HOST: Adres URL obszaru roboczego usługi Databricks
  • DATABRICKS_CLIENT_ID: identyfikator podmiotu usługi (aplikacji)
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

Uwierzytelnianie przy użyciu przepływu pracy wielokrotnego użytku

Domyślnie sub żądanie identyfikuje repozytorium wywołujące. Aby uwierzytelnić się jako przepływ pracy wielokrotnego użytku, a nie repozytorium wywołujące, ustaw wartość subject_claim na job_workflow_ref w zasadach federacji. Każdy zespół może wywołać przepływ pracy wielokrotnego użytku, ale tylko ten przepływ pracy uwierzytelnia się w usłudze Databricks.

Tworzenie zasad federacji

Utwórz zasady federacji przy użyciu job_workflow_ref jako oświadczenia podmiotu. Ustaw subject wartość ref pliku przepływu pracy wielokrotnego użytku:

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"
  }
}'

Konfiguruj pliki YAML GitHub Actions

Utwórz przepływ pracy wielokrotnego użytku, który uwierzytelnia się za pomocą Azure Databricks, oraz wywołujący go przepływ pracy w dowolnym repozytorium.

W poniższym przykładzie przedstawiono plik przepływu pracy wielokrotnego użycia (.github/workflows/deploy.yml w repozytorium wspólnych przepływów pracy):

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

W poniższym przykładzie pokazano wywołanie przepływu pracy w dowolnym repozytorium, który używa przepływu pracy wielokrotnego zastosowania.

on: workflow_dispatch

permissions:
  id-token: write
  contents: read

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

Note

Ustaw permissions: id-token: write w przepływie pracy wywoływanym, a nie w przepływie pracy wielokrotnego użytku. GitHub zawiera oświadczenie job_workflow_ref w tokenie OIDC tylko wtedy, gdy id-token: write jest udzielone w kontekście wywoływanego przepływu pracy.