참고 항목
GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다.
개요
OIDC(OpenID Connect)를 사용하면 GCP(Google Cloud Platform) 자격 증명을 수명이 긴 GitHub 비밀로 저장할 필요 없이 GitHub Actions 워크플로가 GCP의 리소스에 액세스할 수 있습니다.
이 가이드에서는 GitHub의 OIDC를 페더레이션된 ID로 신뢰하도록 GCP를 구성하는 방법에 대한 개요를 제공하고, 토큰을 사용하여 GCP에 인증하고 리소스에 액세스하는 google-github-actions/auth
작업에 대한 워크플로 예제를 포함합니다.
필수 조건
-
GitHub가 OIDC(OpenID Connect)를 사용하는 방법과 아키텍처 및 이점에 대한 기본 개념을 알아보려면 OpenID Connect을(를) 참조하세요.
-
계속하기 전에 액세스 토큰이 예측 가능한 방식으로만 할당되도록 보안 전략을 계획해야 합니다. 클라우드 공급자가 액세스 토큰을 발급하는 방법을 제어하려면 신뢰할 수 없는 리포지토리가 클라우드 리소스에 대한 액세스 토큰을 요청할 수 없도록 하나 이상의 조건을 정의해야 합니다. 자세한 내용은 OpenID Connect을(를) 참조하세요.
-
클라우드 공급자가 다음 OIDC 엔드포인트에 액세스할 수 있는지 확인해야 합니다.
https://HOSTNAME/_services/token/.well-known/openid-configuration
https://HOSTNAME/_services/token/.well-known/jwks
참고 항목
Google Cloud Platform에는 이러한 엔드포인트에 대해 정의된 고정 IP 범위가 없습니다.
-
JWT(JSON 웹 토큰)에 포함된 발급자 클레임의 값이 공개적으로 라우팅 가능한 URL로 설정되어 있는지 확인하세요. 자세한 내용은 OpenID Connect을(를) 참조하세요.
Google Cloud 워크로드 ID 공급자 추가
GCP에서 OIDC ID 공급자를 구성하려면 다음 구성을 수행해야 합니다. 변경에 대한 지침은 GCP 설명서를 참조하세요.
- 새 ID 풀 만들기
- 매핑을 구성하고 조건을 추가합니다.
- 서비스 계정에 새 풀을 연결합니다.
ID 공급자를 구성하기 위한 추가 지침:
- 보안 강화를 위해 클라우드를 사용하여 OIDC 트러스트 구성을 검토했는지 확인합니다. 예를 들어 클라우드 공급자에서 주체 구성을 참조하세요.
- 서비스 계정을 구성에 사용할 수 있게 하려면
roles/iam.workloadIdentityUser
역할에 할당해야 합니다. 자세한 내용은 GCP 설명서를 참조하세요. - 사용할 발급자 URL:
https://HOSTNAME/_services/token
GitHub Actions 워크플로 업데이트
OIDC에 대한 워크플로를 업데이트하려면 YAML에 두 가지를 변경해야 합니다.
- 토큰에 대한 사용 권한 설정을 추가합니다.
google-github-actions/auth
작업을 사용하여 클라우드 액세스 토큰에 대한 OIDC 토큰(JWT)을 교환합니다.
참고 항목
워크플로 또는 OIDC 정책에서 환경을 사용하는 경우 추가 보안을 위해 환경에 보호 규칙을 추가하는 것이 좋습니다. 예를 들어 환경에 배포할 수 있는 분기 및 태그를 제한하거나 환경 비밀에 액세스하도록 환경에 대한 배포 규칙을 구성할 수 있습니다. 자세한 내용은 배포 환경 관리을(를) 참조하세요.
사용 권한 설정 추가
작업 또는 워크플로 실행에는 GitHub의 OIDC 공급자가 모든 실행에 대한 JSON 웹 토큰을 만들 수 있는 id-token: write
이 있는 permissions
설정이 필요합니다.
참고 항목
워크플로 권한에서 id-token: write
을 설정해도 워크플로에 리소스를 수정하거나 쓸 수 있는 권한이 부여되지는 않습니다. 대신 워크플로는 작업이나 단계의 OIDC 토큰을 요청(가져오기)하고 사용(설정)하는 것만 허용합니다. 이 토큰은 수명이 짧은 액세스 토큰을 사용하여 외부 서비스에 인증하는 데 사용됩니다.
필요한 권한, 구성 예, 고급 시나리오에 대한 자세한 내용은 OpenID Connect 참조을(를) 참조하세요.
액세스 토큰 요청
google-github-actions/auth
작업은 GitHub OIDC 공급자로부터 JWT를 받은 다음 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-provider
SERVICE-ACCOUNT
: GCP에서 서비스 계정의 이름으로 바꿉니다.
이 작업은 워크로드 ID 페더레이션을 사용하여 GitHub OIDC 토큰을 Google 클라우드 액세스 토큰으로 교환합니다.
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
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