장기 cloud 키를 CI 에 저장 그만
CI 에서 AWS deploy 의 전통 방식: AWS_ACCESS_KEY_ID 와 AWS_SECRET_ACCESS_KEY 를 secret 으로 저장. 만료 없음, 장기, 하나 누출이 닿을 수 있는 모든 걸 침해. 더 이상 하지 마.
OpenID Connect (OIDC) 가 GitHub Actions 가 cloud provider 의 IAM 에서 직접 짧은 수명 scope 된 token 을 요청하게 해. Flow:
- Workflow 가
permissions: id-token: write선언. - Action 이 GitHub 에서 OIDC ID token 요청. Token: 'repo X, branch Y, Z 가 실행한 workflow'.
- Cloud provider (AWS / GCP / Azure 등) 가 GitHub 의 public key 로 token 서명 검증.
- Cloud provider 가 trust policy 확인: 'repo X 의 workflow 가 role R assume 하는 거 신뢰?'
- Yes 면 짧은 수명 (1 시간 정도) credential 반환.
- Action 이 그 cred 사용. 자동 만료.
주요 cloud provider 다 지원
- AWS — token.actions.githubusercontent.com 용 IAM Identity Provider, 그 다음
repo:my-org/my-repo:ref:refs/heads/main키로 trust policy 가진 role. - GCP — Workload Identity Federation, 비슷한 개념.
- Azure — service principal 의 Federated credential.
- Vault, AWS Cognito 등 — 같은 원리.