[CI/CD] AWS Access Key 사용 문제, IAM Role로 해결하기

General Dong·2025년 8월 19일
0

CI/CD

목록 보기
12/12
post-thumbnail

이전 글 참고

IAM User Access Key 사용 시, 보안 문제

  • 키가 한 번 유출되면 만료가 없어 피해가 크다.

  • 유출/탈취 방지로 키를 주기적으로 교체해야 하고, 교체 중 장애가 발생할 수 있다.

  • 환경별로 권한을 나누기 위해서는 IAM 사용자와 키를 증가시켜야 하기에 관리하기 어려워진다.

  • 어느 곳에서 접근을 했는지 구분하기 어려워 감사 및 추적에 취약하다.


AWS 권장 대안책, IAM Role 사용

이러한 단점으로 인해 AWS에서는 IAM Role을 사용을 권장한다.
특히 GitHub Actions 같은 CI/CD 환경에서는 OIDC와 결합하면 보안성과 편의성이 크게 향상된다.

IAM Role 특징

  • 세션 만료(기본 1시간)로 유출 피해를 축소시킬 수 있다.

  • Repository, Branch 등 맥락 기준으로 접근 범위를 정확히 제한한 수 있다.

  • AWS의 CloudTrail 서비스를 이용하면 AssumeRole과 세션 태그로 로그를 남겨 추적할 수 있다.

  • 키 관리 및 교체하지 않아도 된다.

  • 환경별로 역할을 분리하기 쉽다.

  • 역할 단위로 정책을 최소화하여 유지할 수 있다.


IAM Role 생성

ID Providers(제공업체) 추가

1. ID 제공업체 페이지에서 공급자 추가 버튼 클릭

2. 공급자 세부 정보 설정 및 추가

아래와 같이 각 항목에 맞는 값을 넣어주고 공급자 추가를 해준다.

  • 공급자 유형 : OpenID Connect 선택

  • 공급자 URL : https://token.actions.githubusercontent.com

  • 대상 : sts.amazonaws.com

Role 생성

1. 생성한 ID 제공업체를 클릭하고, 역할 할당

2. 새 역할 생성

3. 웹 자격 증명 세부 설정

  • ID 제공업체 : token.actions.githubusercontent.com

  • Audience : sts.amazonaws.com

  • GitHub organization : GitHub Actions를 사용하는 GitHub Organization

  • GitHub repository : 접근을 허용하는 GitHub Repository

  • GitHub branch : 접근을 허용하는 GitHub Branch

4. 원하는 권한 정책 추가

나는 이전에 IAM User를 생성하면서 부여한 정책을 선택했다.

5. 역할 이름 설정 및 역할 생성

원하는 이름을 설정해주고, 아래 권한 정책 요약을 통해 제대로 선택했는지 확인 후 생성해주면 된다.


GitHub Actions에 IAM Role 적용

IAM Role의 ARN, GitHub Actions의 Secrets에 추가

나는 "AWS_IAM_ROLE"이라는 이름으로 추가했다.

배포 작업 Yaml 파일 수정

deploy:
  runs-on: ubuntu-latest
  needs: build
  
  permissions:
      id-token: write

  steps:
    - name: AWS credentials 설정
      uses: aws-actions/configure-aws-credentials@v4
      with:
        role-to-assume: ${{ secrets.AWS_IAM_ROLE }}
        aws-region: ${{ secrets.AWS_REGION }}
  • id-token에 대한 쓰기 권한을 부여하여, OIDC 공급자에게 JWT ID 토큰 요청

  • 기존 aws-access-key-idaws-secret-access-key 속성 삭제

  • role-to-assume 속성에 ARN 값이 들어있는 secrets를 추가

결과

IAM Role로 접근하여 정상적으로 배포가 진행되었다.


소감

최근 여러 보안 사고가 터지면서, 보안에 대한 중요도가 높아졌다.
그러나 GitHub Actions를 통해 AWS에 배포하는 블로그 글 대부분은 권장되지 않는 Access Key로 하는 경우가 많았다.
나는 두 가지 방식을 모두 해보며, AWS 접근 시 발생하는 보안적 허점을 분석하게 된 계기가 되었다.
그래서 보다 더 안전한 방식을 많은 사람들이 적용했으면 하는 바램으로 이 글을 작성해본다.


참고

Use an IAM role to grant permissions to applications running on Amazon EC2 instances | AWS Docs
Use IAM roles to connect GitHub Actions to actions in AWS | AWS Security Blog
configure-aws-credentials Docs | aws-actions GitHub
OIDC 토큰을 요청하는 워크플로 권한 | GitHub Docs

profile
개발에 대한 기록과 복습을 위한 블로그 | Back-end Developer

0개의 댓글