개요
OIDC(OpenID Connect)를 사용하면 GitHub Actions 워크플로가 Azure 자격 증명을 수명이 긴 GitHub 비밀로 저장할 필요 없이 Azure의 리소스에 액세스할 수 있습니다.
이 가이드에서는 GitHub의 OIDC를 페더레이션된 ID로 신뢰하도록 Azure를 구성하는 방법에 대한 개요를 제공하고, 토큰을 사용하여 Azure에 인증하고 리소스에 액세스하는 azure/login
작업에 대한 워크플로 예제를 포함합니다.
필수 조건
-
GitHub이(가) OIDC(OpenID Connect)를 사용하는 방식과 아키텍처 및 이점에 대한 기본 개념을 알아보려면 "OpenID Connect를 사용한 보안 강화 정보"을 참조하세요.
-
계속하기 전에 액세스 토큰이 예측 가능한 방식으로만 할당되도록 보안 전략을 계획해야 합니다. 클라우드 공급자가 액세스 토큰을 발급하는 방법을 제어하려면 신뢰할 수 없는 리포지토리가 클라우드 리소스에 대한 액세스 토큰을 요청할 수 없도록 하나 이상의 조건을 정의해야 합니다. 자세한 내용은 "OpenID Connect를 사용한 보안 강화 정보"을 참조하세요.
Azure에 페더레이션된 자격 증명 추가
GitHub의 OIDC 공급자는 Azure의 워크로드 ID 페더레이션을 사용합니다. 개요는 “워크로드 ID 페더레이션”에서 Microsoft의 설명서를 참조하세요.
Azure에서 OIDC ID 공급자를 구성하려면 다음 구성을 수행해야 합니다. 변경에 대한 지침은 Azure 설명서를 참조하세요.
- Azure Active Directory 애플리케이션 및 서비스 주체 만들기
- Azure Active Directory 애플리케이션에 대한 페더레이션된 자격 증명을 추가합니다.
- Azure 구성을 저장하기 위한 GitHub 비밀을 만듭니다.
ID 공급자를 구성하기 위한 추가 지침:
- 보안 강화를 위해 "OpenID Connect를 사용한 보안 강화 정보"을 검토했는지 확인합니다. 예제는 "OpenID Connect를 사용한 보안 강화 정보"을 참조하세요.
audience
설정의 경우api://AzureADTokenExchange
가 권장되는 값이지만 여기에 다른 값을 지정할 수도 있습니다.
GitHub Actions 워크플로 업데이트
OIDC에 대한 워크플로를 업데이트하려면 YAML에 두 가지를 변경해야 합니다.
- 토큰에 대한 사용 권한 설정을 추가합니다.
azure/login
작업을 사용하여 클라우드 액세스 토큰에 대한 OIDC 토큰(JWT)을 교환합니다.
사용 권한 설정 추가
작업 또는 워크플로 실행에는 id-token: write
관련 permissions
설정이 필요합니다. id-token
에 대한 permissions
설정이 read
또는 none
으로 설정된 경우 OIDC JWT ID 토큰을 요청할 수 없습니다.
이 id-token: write
설정을 통해 다음 방법 중 하나를 사용하여 GitHub의 OIDC 공급자에서 JWT를 요청할 수 있습니다.
- 실행기(
ACTIONS_ID_TOKEN_REQUEST_URL
및ACTIONS_ID_TOKEN_REQUEST_TOKEN
)에서 환경 변수 사용 - Actions 도구 키트에서
getIDToken()
사용
워크플로에 대한 OIDC 토큰을 페치해야 하는 경우 워크플로 수준에서 사용 권한을 설정할 수 있습니다. 예를 들어:
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
단일 작업에 대한 OIDC 토큰만 가져와야 하는 경우 해당 작업 내에서 이 권한을 설정할 수 있습니다. 예를 들면 다음과 같습니다.
permissions:
id-token: write # This is required for requesting the JWT
워크플로의 요구 사항에 따라 여기에서 추가 권한을 지정해야 할 수 있습니다.
재사용 가능한 워크플로의 permissions
경우 호출자 워크플로 수준 또는 재사용 가능한 워크플로를 write
호출하는 특정 작업에서 에 대한 id-token
설정을 로 설정해야 합니다. 자세한 내용은 "워크플로 다시 사용"을 참조하세요.
액세스 토큰 요청
azure/login
작업은 GitHub OIDC 공급자로부터 JWT를 받은 다음 Azure에서 액세스 토큰을 요청합니다. 자세한 내용은 azure/login
설명서를 참조하세요.
다음 예제에서는 OIDC ID 토큰을 Azure와 교환하여 액세스 토큰을 수신한 다음 클라우드 리소스에 액세스하는 데 사용합니다.
name: Run Azure Login with OIDC
on: [push]
permissions:
id-token: write
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: 'Az CLI login'
uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: 'Run az commands'
run: |
az account show
az group list