GitHub Actions에서 OIDC를 사용해서 Google Cloud Run에 배포하도록 구성하는 방법은 어떻게 되나요?

현재 GitHub Actions를 사용해서 Google Cloud Run에 CI/CD 파이프라인을 구축하고 있습니다. 서비스 계정 키를 사용하는 대신 OIDC를 사용하려고 하는데, 설정 과정에서 애매한 부분이 많습니다. Google Cloud 문서에서는 어느 정도 설명이 되어 있지만, 실제로 GitHub Actions 워크플로우를 어떻게 설정해야 하는지 명확하지 않습니다.

저는 다음과 같이 설정을 시도해보았습니다:

yaml

Copy

permissions:
  id-token: write
  contents: read

steps:
  - name: 'Authenticate to Google Cloud'
    uses: 'google-github-actions/auth@v1'
    with:
      token_format: 'id_token'
      workload_identity_provider: 'projects/123456789012/locations/global/workloadIdentityPools/my-pool/providers/github'
      service_account: 'my-service-account@my-project.iam.gserviceaccount.com'

그런데 이 설정을 사용해도 gcloud run deploy 명령이 인증 오류로 실패합니다. 제가 놓친 부분이 있을까요? 인증을 성공적으로 연결하고 Google Cloud Run에 배포하는 전체적인 흐름을 알고 싶습니다.

Google Cloud Run에 OIDC를 통해 배포하려면 몇 가지 전제 조건을 정확히 맞춰야 합니다:

  1. Workload Identity Federation 설정 확인
    Google Cloud 콘솔에서 Workload Identity Pool과 Provider가 정확히 설정되어 있어야 하며, GitHub의 OIDC 토큰을 받아들이도록 provider의 audience가 https://github.com/{owner} 형식으로 설정되어야 합니다.
  2. IAM 역할 부여
    연결된 Service Account에 roles/run.adminroles/iam.workloadIdentityUser 권한이 있어야 하며, 특히 후자는 OIDC 인증이 성공하려면 반드시 필요합니다.
  3. GitHub Actions 설정
    google-github-actions/auth 사용 시, token_format: 'access_token'으로 설정해야 하는 경우도 있습니다. Google Cloud Run은 실제 액세스 토큰을 요구하기 때문입니다. 따라서 다음처럼 수정해 보세요:

yaml

Copy

- name: 'Authenticate to Google Cloud'
  uses: 'google-github-actions/auth@v1'
  with:
    token_format: 'access_token'
    workload_identity_provider: 'projects/123456789012/locations/global/workloadIdentityPools/my-pool/providers/github'
    service_account: 'my-service-account@my-project.iam.gserviceaccount.com'
  1. 디버깅 팁
    google-github-actions/auth 단계 직후에 gcloud auth list 명령으로 현재 인증된 계정을 출력해보면 실제로 어떤 인증이 적용되었는지 확인할 수 있습니다.

이 설정들이 맞춰져 있으면, OIDC 기반 인증으로도 gcloud run deploy가 정상 작동해야 합니다.

1 Like