GitHub Actions에 대한 워크로드 ID 페더레이션 사용

OIDC(OpenID Connect)라고도 하는 Databricks OAuth 토큰 페더레이션을 사용하면 Databricks 외부에서 실행되는 자동화된 워크로드가 Databricks 비밀 없이 Databricks에 안전하게 액세스할 수 있습니다. OAuth 토큰 페더레이션을 사용하여 Azure Databricks에 대한 액세스 인증을 참조하세요.

GitHub Actions에 대한 워크로드 ID 페더레이션을 사용하도록 설정하려면 다음을 수행합니다.

  1. 페더레이션 정책 만들기
  2. GitHub Actions YAML 파일 구성

워크로드 ID 페더레이션을 사용하도록 설정하면 Databricks SDK 및 Databricks CLI가 자동으로 GitHub에서 워크로드 ID 토큰을 가져와 Databricks OAuth 토큰으로 교환합니다.

페더레이션 정책 만들기

먼저 워크로드 ID 페더레이션 정책을 만듭니다. 자세한 내용은 서비스 주체 페더레이션 정책 구성을 참조하세요. GitHub의 경우 정책에 대해 다음 값을 설정합니다.

  • 조직: Github 조직의 이름입니다. 예를 들어 리포지토리 URL이 https://github.com/databricks-inc/data-platform면 조직은 다음과 같습니다 databricks-inc.
  • 저장소: 허용할 단일 리포지토리의 이름입니다(예: data-platform.).
  • 엔터티 형식: 토큰의 (주체) 클레임에 sub 표시되는 GitHub 엔터티의 종류입니다. 기본값은 분기입니다. Databricks는 Environment를 사용하는 것을 권장하며, 이는 GitHub Actions YAML 파일에서 environment 속성을 설정하여 활성화할 수 있습니다. 특정 환경에 배포를 참조하세요.
  • 발급자 URL:https://token.actions.githubusercontent.com
  • 제목: GitHub Actions 작업 컨텍스트의 값을 연결하여 형성된 문자열입니다.
  • 관객: Databricks는 이를 Azure Databricks 계정 ID로 설정하는 것이 좋습니다. 생략하면 계정 ID가 기본적으로 사용됩니다.
  • 주체 클레임: (선택 사항) OIDC 토큰의 워크로드 ID(sub) 값을 포함하는 JWT 클레임입니다. GitHub의 경우 워크플로를 트리거한 리포지토리, 분기, 태그, 끌어오기/병합 요청 또는 환경을 인코딩하는 필드를 그대로 sub둡니다. 호출 리포지토리가 아닌 재사용 가능한 워크플로로 인증하려면 재사용 가능한 워크플로를 사용하여 인증을 참조하세요.

예를 들어 다음 Databricks CLI 명령은 명명된 my-org 조직에 대한 페더레이션 정책과 다음의 5581763342009999Databricks 서비스 주체 숫자 ID를 만듭니다.

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_claimjob_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

메모

호출 워크플로에서 permissions: id-token: write를 설정하고, 다시 사용할 수 있는 워크플로에서는 설정하지 마십시오. GitHub 호출 워크플로에서 job_workflow_ref 부여된 경우에만 OIDC 토큰에 id-token: write 클레임을 포함합니다.