참고
GitHub Enterprise Server 호스트 실행기는 현재 GitHub에서 지원되지 않습니다.
개요
OIDC(OpenID Connect)를 사용하면 Azure 자격 증명을 수명이 GitHub Actions 긴 비밀로 저장하지 않고도 워크플로가 Azure의 리소스에 액세스할 수 GitHub 있습니다.
이 가이드에서는 OIDC를 페더레이션 ID로 신뢰 GitHub하도록 Azure를 구성하는 방법에 대한 개요를 제공하고 토큰을 사용하여 Azure에 인증하고 리소스에 액세스하는 작업에 대한 azure/login 워크플로 예제를 포함합니다.
필수 조건
-
GitHub가 OIDC(OpenID Connect)를 사용하는 방법과 아키텍처 및 이점에 대한 기본 개념을 알아보려면 OpenID Connect을(를) 참조하세요.
-
계속하기 전에 액세스 토큰이 예측 가능한 방식으로만 할당되도록 보안 전략을 계획해야 합니다. 클라우드 공급자가 액세스 토큰을 발급하는 방법을 제어하려면 신뢰할 수 없는 리포지토리가 클라우드 리소스에 대한 액세스 토큰을 요청할 수 없도록 하나 이상의 조건을 정의해야 합니다. 자세한 내용은 OpenID Connect을(를) 참조하세요.
-
클라우드 공급자가 다음 OIDC 엔드포인트에 액세스할 수 있는지 확인해야 합니다.
https://HOSTNAME/_services/token/.well-known/openid-configurationhttps://HOSTNAME/_services/token/.well-known/jwks
참고
Microsoft Entra ID(이전에는 Azure AD라고 함)에는 이러한 엔드포인트에 대해 정의된 고정 IP 범위가 없습니다.
-
JWT(JSON 웹 토큰)에 포함된 발급자 클레임의 값이 공개적으로 라우팅 가능한 URL로 설정되어 있는지 확인하세요. 자세한 내용은 OpenID Connect을(를) 참조하세요.
페더레이션된 자격 증명을 Azure 추가
GitHubOIDC 공급자는 Azure의 워크로드 ID 페더레이션에서 작동합니다. 개요는 [워크로드 ID 페더레이션](https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation)에서 Microsoft의 설명서를 참조하세요.
Azure OIDC ID 공급자를 구성하려면 다음 구성을 수행해야 합니다. 이러한 변경에 대한 지침은 Azure 설명서 참조하세요.
- Entra ID 애플리케이션 및 서비스 주체 만들기
- Entra ID 애플리케이션에 대한 페더레이션 자격 증명을 추가합니다.
- Azure 구성을 저장하기 위한 시크릿GitHub를 만듭니다.
ID 공급자를 구성하기 위한 추가 지침:
- 보안 강화를 위해 OpenID Connect을(를) 검토했는지 확인하세요. 예는 OpenID Connect을(를) 참조하세요.
audience설정의 경우api://AzureADTokenExchange가 권장되는 값이지만, 여기에 다른 값을 지정할 수도 있습니다.
워크플로를 업데이트하기 GitHub Actions
OIDC에 대한 워크플로를 업데이트하려면 YAML에 두 가지를 변경해야 합니다.
- 토큰에 대한 사용 권한 설정을 추가합니다.
-
[ `azure/login` ](https://github.com/Azure/login) 작업을 사용하여 OIDC 토큰(JWT)을 클라우드 액세스 토큰으로 교환합니다.
참고
워크플로 또는 OIDC 정책에서 환경을 사용하는 경우 추가 보안을 위해 환경에 보호 규칙을 추가하는 것이 좋습니다. 예를 들어 환경에 배포할 수 있는 분기 및 태그를 제한하거나 환경 비밀에 액세스하도록 환경에 대한 배포 규칙을 구성할 수 있습니다. 자세한 내용은 배포 환경 관리을(를) 참조하세요.
사용 권한 설정 추가
작업 또는 워크플로 실행 시, GitHub의 OIDC 공급자가 각 실행마다 JSON 웹 토큰을 생성할 수 있도록 permissions 설정과 id-token: write이 필요합니다.
참고
워크플로 권한에서 id-token: write을 설정해도 워크플로에 리소스를 수정하거나 쓸 수 있는 권한이 부여되지는 않습니다. 대신 워크플로는 작업이나 단계의 OIDC 토큰을 요청(가져오기)하고 사용(설정)하는 것만 허용합니다. 이 토큰은 수명이 짧은 액세스 토큰을 사용하여 외부 서비스에 인증하는 데 사용됩니다.
필요한 권한, 구성 예, 고급 시나리오에 대한 자세한 내용은 OpenID 연결 참조을(를) 참조하세요.
액세스 토큰 요청
작업은 azure/login OIDC 공급자로부터 JWT를 GitHub 받은 다음 Azure에서 액세스 토큰을 요청합니다. 자세한 내용은 azure/login 설명서를 참조하세요.
다음 예제에서는 OIDC ID 토큰을 Azure 교환하여 액세스 토큰을 수신한 다음 클라우드 리소스에 액세스하는 데 사용할 수 있습니다.
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
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@8c334a195cbb38e46038007b304988d888bf676a
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
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
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@8c334a195cbb38e46038007b304988d888bf676a
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