개요
OIDC(OpenID Connect)를 사용하면 GCP 자격 증명을 수명이 GitHub Actions 긴 비밀로 저장할 필요 없이 워크플로가 GCP(Google Cloud Platform)의 리소스에 액세스할 수 GitHub 있습니다.
이 가이드에서는 OIDC를 페더레이션 ID로 신뢰 GitHub하도록 GCP를 구성하는 방법에 대한 개요를 제공하고 토큰을 사용하여 GCP에 인증하고 리소스에 액세스하는 작업에 대한 google-github-actions/auth 워크플로 예제를 포함합니다.
필수 조건
-
GitHub가 OIDC(OpenID Connect)를 사용하는 방법과 아키텍처 및 이점에 대한 기본 개념을 알아보려면 OpenID Connect을(를) 참조하세요.
-
계속하기 전에 액세스 토큰이 예측 가능한 방식으로만 할당되도록 보안 전략을 계획해야 합니다. 클라우드 공급자가 액세스 토큰을 발급하는 방법을 제어하려면 신뢰할 수 없는 리포지토리가 클라우드 리소스에 대한 액세스 토큰을 요청할 수 없도록 하나 이상의 조건을 정의해야 합니다. 자세한 내용은 OpenID Connect을(를) 참조하세요.
2026년 7월 15일 이후에 생성된 리포지토리와 해당 날짜 이후에 수행된 리포지토리 이름 변경 또는 이전의 경우, 소유자 및 리포지토리 ID를 포함하는 변경할 수 없는 기본 OIDC sub 클레임을 사용하세요(GitHub Enterprise Server에서는 사용할 수 없음). 기존 리포지토리는 옵트인하지 않는 한 이전 형식을 유지합니다. 자세한 내용은 OpenID 연결 참조을(를) 참조하세요.
Google Cloud 워크로드 ID 공급자 추가
GCP에서 OIDC ID 공급자를 구성하려면 다음 구성을 수행해야 합니다. 변경에 대한 지침은 GCP 설명서를 참조하세요.
- 새 ID 풀 만들기
- 매핑을 구성하고 조건을 추가합니다.
- 서비스 계정에 새 풀을 연결합니다.
ID 공급자를 구성하기 위한 추가 지침:
- 보안 강화를 위해 클라우드를 사용하여 OIDC 트러스트 구성을 검토했는지 확인합니다. 예를 들어 클라우드 공급자에서 주제 구성하기를 참조하십시오.
- 서비스 계정을 구성에 사용할 수 있게 하려면
roles/iam.workloadIdentityUser역할에 할당해야 합니다. 자세한 내용은 GCP 설명서를 참조하세요. - 사용할 발급자 URL:
https://token.actions.githubusercontent.com
GitHub Actions 워크플로를 업데이트하기
OIDC에 대한 워크플로를 업데이트하려면 YAML에 두 가지를 변경해야 합니다.
- 토큰에 대한 사용 권한 설정을 추가합니다.
-
google-github-actions/auth작업을 사용하여 OIDC 토큰(JWT)을 클라우드 액세스 토큰으로 교환합니다.
참고
워크플로 또는 OIDC 정책에서 환경을 사용하는 경우 추가 보안을 위해 환경에 보호 규칙을 추가하는 것이 좋습니다. 예를 들어 환경에 배포할 수 있는 분기 및 태그를 제한하거나 환경 비밀에 액세스하도록 환경에 대한 배포 규칙을 구성할 수 있습니다. 자세한 내용은 배포 환경 관리을(를) 참조하세요.
사용 권한 설정 추가
작업 또는 워크플로 실행 시, GitHub의 OIDC 공급자가 각 실행마다 JSON 웹 토큰을 생성할 수 있도록 permissions 설정과 id-token: write이 필요합니다.
참고
워크플로 권한에서 id-token: write을 설정해도 워크플로에 리소스를 수정하거나 쓸 수 있는 권한이 부여되지는 않습니다. 대신 워크플로는 작업이나 단계의 OIDC 토큰을 요청(가져오기)하고 사용(설정)하는 것만 허용합니다. 이 토큰은 수명이 짧은 액세스 토큰을 사용하여 외부 서비스에 인증하는 데 사용됩니다.
필요한 권한, 구성 예, 고급 시나리오에 대한 자세한 내용은 OpenID 연결 참조을(를) 참조하세요.
액세스 토큰 요청
작업은 google-github-actions/auth OIDC 공급자로부터 JWT를 GitHub 받은 다음 GCP에서 액세스 토큰을 요청합니다. 자세한 내용은 GCP 설명서를 참조하세요.
이 예제에는 GCP에서 서비스 목록을 요청하는 작업을 사용하는 Get_OIDC_ID_token 작업이 있습니다.
WORKLOAD-IDENTITY-PROVIDER: 이것을 GCP에서 사용자의 ID 공급자 경로로 교체하십시오. 예를 들어projects/example-project-id/locations/global/workloadIdentityPools/name-of-pool/providers/name-of-providerSERVICE-ACCOUNT: GCP에서 서비스 계정의 이름으로 바꿉니다.
이 작업은 GitHub을 사용하여 Google Cloud 액세스 토큰에 대한 OIDC 토큰을 교환 합니다.
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
name: List services in GCP
on:
pull_request:
branches:
- main
permissions:
id-token: write
jobs:
Get_OIDC_ID_token:
runs-on: ubuntu-latest
steps:
- id: 'auth'
name: 'Authenticate to GCP'
uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
with:
create_credentials_file: 'true'
workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
service_account: 'SERVICE-ACCOUNT'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
name: List services in GCP
on:
pull_request:
branches:
- main
permissions:
id-token: write
jobs:
Get_OIDC_ID_token:
runs-on: ubuntu-latest
steps:
- id: 'auth'
name: 'Authenticate to GCP'
uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
with:
create_credentials_file: 'true'
workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
service_account: 'SERVICE-ACCOUNT'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list