Github Action AWS IAM Role 이용 방법

소개

AWS IAM의 모범사례에서는 AWS에 Access 가 필요한 워크로드가 있을 경우, 임시자격증명 사용을 권장하고 있습니다. 이는 Permanent 한 자격증명 대신 expired가 존재하는 자격증명을 이용함으로서 더욱 보안적인 자격증명 관리를 하기 위함인데요.
 
그래서 Github Action 에서도 AWS Access가 필요할 경우, Permanent한 Access Key/Secret Key를 이용하는 것이 아닌, IAM Role을 이용하는 방법을 알아보고자 합니다.
 
Github Action에서 workflow를 통해 AWS s3 버킷 리스트를 출력하는 시나리오로 진행해보려고 하며,
Github Action 에서 aws-actions/configure-aws-credentials@v1 에서 Role 기반으로 자격증명을 구성할 수 있도록 v2가 릴리즈되어 이를 이용해보도록 하겠습니다.

절차 요약

  1. AWS – IAM Identity Provider 생성
  2. AWS – Role 생성
    • Trusted entity 설정
    • Permission 부여
    • Trust Policy 에 적절한 github 계정 및 Repository 제어 설정
  3. Github Workflow 작성
    • aws-actions/configure-aws-credentials@v2 이용

1. AWS – IAM Identity Provider 생성

  • AWS IAM 에서 Identity providers 생성
  • OpenID Connect 에서 Provider URL, Audience를 아래와 같이 입력
    • Provider URL – https://token.actions.githubusercontent.com
    • Audience – sts.amazonaws.com
[ AWS IAM Identity providers ]

2. AWS – Role 생성

  • Trusted entity 를 web identity 설정
  • Identity provider – 1번에서 생성한 provider 선택
  • Audience – sts.amazonaws.com 선택
[ Trusted entity ]
  • 원하는 Permission 부여
[ Add permissions ]
  • Role name, Description 설정
[ Role details ]
  • Role 생성생성된 IAM Role 에서 Trust relationships 수정
  • 아래 내용을 참고하여 수정한다
[ Trust policty 수정 ]
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<AccountID 기입>:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringLike": {
                    "token.actions.githubusercontent.com:sub": "repo:<깃헙 ID>/<레파지토리 이름>:*"
                },
                "StringEquals": {
                    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}
  • Condition을 통해 반드시 Github repository 정보를 입력하고 해당 계정 or Repository 에서만 접근이 가능하도록 하여야 합니다.
  • 그렇지 않으면 다른 계정에서도 해당 Role을 Assume 할수 있어, 보안적으로 취약해 질 수 있습니다.

3. Github Workflow 작성

  • aws-actions/configure-aws-credentials@v2 를 이용합니다.
    • Role 기반으로 임시자격 증명을 이용할 수 있도록 v2가 릴리즈 되었으니, 이용하면 쉽게 구현이 가능합니다.
  • 보시다시피 Access key, Secret key 를 permanent 하게 사용하지 않고 Role ARN 기반으로 작성되게 됩니다.
name : AWS S3 LS on PR

on: push

permissions:
      id-token: write   # This is required for requesting the JWT
      contents: read    # This is required for actions/checkout
jobs:
  s3-ls:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v2
      with:
        role-to-assume: ${{ secrets.AWS_ROLE_ARN }} 
        aws-region: ap-northeast-2	

    - name: List S3 Bucket
      run: |
        aws s3 ls
  • Actions 결과
[ Actions Result ]

참고

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Back To Top