GitHub Actions OIDC 배포 (zandi.wiki)
DevOps가 한 번 설정하면 CI가 Secrets 없이 배포.
DevOps 관리자CI 파이프라인
DevOps: 1회 설정
dev 계정에 GitHub OIDC provider를 등록하고, github-deploy Role의 Trust에 repo · 브랜치 조건을 건다. dev × PlatformAdmin 세션이나 IaC로.
단계단계를 누르면 위 관계도가 그 단계로 바뀐다
-
dev 계정에 GitHub OIDC provider를 등록하고, github-deploy Role의 Trust에 repo · 브랜치 조건을 건다. dev × PlatformAdmin 세션이나 IaC로.
{ "Effect": "Allow", "Principal": {"Federated": "arn:aws:iam::222222222222:oidc-provider/token.actions.githubusercontent.com"}, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": {"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"}, "StringLike": {"token.actions.githubusercontent.com:sub": "repo:<owner>/zandi-wiki:ref:refs/heads/main"} } } -
main에 push되면 워크플로가 id-token: write 권한으로 GitHub가 서명한 JWT를 받는다.
permissions: id-token: write contents: read steps: - uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::222222222222:role/github-deploy aws-region: ap-northeast-2 -
JWT(iss, aud, sub = repo:<owner>/zandi-wiki:ref:refs/heads/main)를 STS에 제출.
-
STS가 발급자 서명, aud = sts.amazonaws.com, sub 조건을 확인한다. 다른 브랜치나 포크 PR이면 여기서 거절.
-
github-deploy Role 세션 발급. 잡이 끝나면 자연 만료.
-
빌드 결과를 버킷에 올리고 cloudfront:CreateInvalidation. 권한은 이 버킷 · 배포판으로만 한정.