본문 바로가기
공부/AWS

[AWS/GithubAction] IAM Role로 github action 자격증명하기 (OIDC)

by haejang 2025. 5. 11.
728x90
728x90

 

 

 

github action을 돌릴 때 AWS 자격증명을 하고 싶은 경우 (ex - ECR, S3) 지금까지는 ACCESS KEY만 박아서 사용했었는데,

OIDC를 통해 액세스 키 없이 롤 방식으로도 구성할 수 있었다.

(회사에서 github action을 쓸 땐 항상 self hosted runner로만 했었어서 이런 방법이 있는 줄도 몰랐다.)

 

 

공식 문서들

- AWS : https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html

- Github : https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services

 

즉, github의 특정 org나 repo에서 사용할 수 있는 IAM role을 생성하고, 그를 github action에 적용할 수 있는 것.

 

그럼 한 번 직접 만들어 보자.

 

1. AWS 에서 github용 Identity Provider 만들기

AWS Console > IAM > Identity providers > Add provider

- OpenID Connect 선택

- Provider URL : `https://token.actions.githubusercontent.com`

- Audience : `sts.amazonaws.com`

이후 Add provider

 

2. 1번에서 만든 OIDC 공급자를 신뢰하는 IAM Role 만들기

AWS Console > IAM > Roles > Create role

- Web Identity 선택

(드롭박스에서 선택)

- Identity provider : `token.actions.githubusercontent.com`

- Audience : `sts.amazonaws.com`

(직접 작성)

- Github organization : 자격증명을 허용할 github org 이름

- (optional) Github repository : 자격증명을 허용할 github repo 이름

- (optional) Github branch : 자격증명을 허용할 github branch 이름

이후 Next

이후 해당 org, repo에 원하는 권한을 붙여준 후 생성하면 끝이다.

위와 같이 생성한 경우, Trush relationship은 아래와 같이 만들어진다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::{ACCOUNT 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:suminhong/*:*"
                }
            }
        }
    ]
}

 

3. 2번에서 만든 role을 github action에서 사용해보기

2번에서 만든 Role의 ARN이 필요하다.

region과 session name은 원하는대로 설정 후, 아래처럼 configure-aws-credentials 액션을 사용할 수 있다.

그리고 `permissions` 부분을 꼭 넣어줘야 한다. 저게 없으면 OIDC 토큰을 요청조차 못하기 때문에 에러가 난다.

env:
  AWS_REGION: ap-northeast-2
  AWS_ROLE_ARN: arn:aws:iam::12345678:role/role-name
  AWS_ROLE_SESSION_NAME: session-name

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: ${{ env.AWS_ROLE_ARN }}
          role-session-name: ${{ env.AWS_ROLE_SESSION_NAME }}
          aws-region: ${{ env.AWS_REGION }}

 

 

 

참조

- https://goonerholic.github.io/github-actions-oidc

 

 

 

728x90
728x90

댓글