[AWS] OIDC(OAuth) 기반으로 배포 파이프라인 구성하기 (with Github Action)
보통 Github Action에서 AWS 배포 워크플로를 구성한다고 하면, 액세스토큰을 받아서 Action Secret에 저장하고 그걸로 로그인을 하는 경우가 많다. 가장 직관적인 방법이기 때문이다.
근데 이게 이 접근법 자체가 엄청 큰 문제까지는 아닌데, 또 아주 권장되는 사용 패턴은 또 아니다.
아무튼 토큰이라는 취약점이 하나 생기고 보안 관리 포인트가 증가하는 것이기 때문이다.
그래서 AWS나 Github에서 권장하는 배포 인증 구성 방법은 OIDC를 사용하는 것이다.
이걸 사용하면 인증키같은걸 따로 받을 것 없이, 특정 레포지토리에 대한 화이트리스트를 구성해서 해당 레포지토리들은 토큰 없이 자유롭게 인가를 받게 할 수 있다. 그 방법을 간단히 정리해본다.
AWS: ID Provider 구성하기
먼저 공급자 구성을 해서 Github과 AWS의 신뢰관계를 만들어줘야 한다.
이동해서

- https://token.actions.githubusercontent.com
- sts.amazonaws.com
위와 같이 추가해준다.
그러면 이건 끝이다.
배포용 Role 구성
이제 Action에서 사용할 계정을 생성해야 하는데, 여기서는 계정이 아니라 Role로 만들어야 한다.
사용자 지정 신뢰 정책으로 선택하고
다음과 같이 신뢰 정책에 레포지토리 목록을 정의해주면 된다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::여기ID: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:조직명/레포명:*"]
}
}
}
]
}
그러면 저 레포의 Action에 대해서 AWS가 알아서 접근 권한을 부여해준다.
브랜치 단위까지도 넣을 수 있는데, 난 그렇게는 안했다.
그리고 policy에는 배포에 필요한 AWS 권한을 적절히 넣어주면 된다.

이건 본인이 필요한 만큼
Github Action에서 OIDC 사용하기
provider에 role까지 준비가 됐다면, 이제는 Github Action에서 바로 인증을 뚫을 수 있다.
사용법은 어렵지 않다. 다음 같이 aws credential 액션 라이브러리를 사용해서 우리가 만든 role을 불러오면 되는 것이다.
name: OIDC Test
on:
push:
workflow_dispatch:
permissions:
id-token: write
jobs:
access-s3:
runs-on: ubuntu-latest
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ap-northeast-2
role-to-assume: arn:aws:iam::여기ID:role/role이름
그래서 이렇게 인가가 잘 뚫리면 성공한 것이다.
이제는 적당히 잘 썰어서 워크플로를 만들면 된다.
참조
https://github.com/aws-actions/configure-aws-credentials#oidc-configuration
https://docs.github.com/en/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws