Troubleshooting GitHub OIDC Subject 불일치 - 100-hours-a-week/KTB4-2nd-Cloud GitHub Wiki
2026-09-25
처음 Production 배포 워크플로를 실행했을 때, AWS 자격 증명을 받는 단계에서 약 2분 동안 재시도하다 실패했습니다.
Could not assume role with OIDC:
Not authorized to perform sts:AssumeRoleWithWebIdentity
저장소 변수에 넣은 Role ARN, OIDC Provider, Audience는 모두 맞았습니다.
배포 Role의 신뢰 조건은 GitHub 문서의 기본 Subject 형식으로 적어두었습니다.
repo:100-hours-a-week/KTB4-2nd-Cloud:environment:production
값이 맞는데 거절되는 이유를 찾으려고 CloudTrail에서 실패한 AssumeRoleWithWebIdentity 이벤트를 열어봤습니다. 실제로 전달된 Subject는 형식이 달랐습니다.
repo:100-hours-a-week@<owner-id>/KTB4-2nd-Cloud@<repository-id>:environment:production
조직에 OIDC Subject 템플릿이 설정되어 있어서, 조직과 저장소 이름 뒤에 변하지 않는 ID가 붙어 있었습니다. 신뢰 조건은 sub를 정확히 일치로 비교하고 있어서 거절됐습니다.
CloudTrail에서 확인한 실제 Subject로 Terraform의 신뢰 조건을 고쳤습니다. Plan에서 바뀌는 게 신뢰 조건 한 건뿐인지 확인한 뒤 적용했습니다.
다음 배포에서는 OIDC 자격 증명 단계가 1초 안에 통과했습니다.
문서의 기본 형식이 우리 조직에도 그대로 적용될 거라고 생각했습니다.
OIDC 신뢰 조건을 처음 만들 때는 조직의 Subject 템플릿을 먼저 확인하거나, 한 번 실행해서 CloudTrail에 찍힌 실제 값을 보고 조건을 확정합니다.