728x90
반응형
필요성
AWS Assume Role을 적용하면 github으로 CI(Continuous Integration)를 위해 AWS 계정의 ACCESS_KEY, SECRET_KEY를 대체할 수 있다. 따라서 코드가 간결해진다.
관리자 입장에서는 특정 유저에게 IAM 권한 및 토큰을 발급해야하는 관리 요소가 줄어든다. 또한 Assume Role을 사용하는 위치 및 이력을 추적하여 관리할 수 있게 된다.
개념
Assume Role은 임시로 특정 역할을 가정하여 제한된 권한만 주는 방식이다. github에 적용한다면 github의 특정 레포지토리에 assume-role을 주고, 해당 role은 특정 AWS 리소스의 특정 역할만 사용가능하도록 설정해줄 수 있다. 예를 들어 AWS Assume Role을 하나 만들고, github 레포를 연결한 다음 그 계정에는 ecr:DescribeImages 권한만 준다면 해당 Assume Role은 ECR의 이미지를 조회할 수 있는 권한만 얻게 되는 것이다.
이 글에서는 AWS 설정 내용은 생략하고 개발자의 관점에서 CI에 어떻게 적용하는지 예시를 적는다.
CI 구현 예시
name: Build and Push Docker Image to ECR
on:
push:
branches:
- develop
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
env:
AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }}
AWS_ECR_REPOSITORY_URI: ${{ secrets.AWS_ECR_REPOSITORY_URI }}
AWS_REGION: ${{ secrets.AWS_REGION }}
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: ${{ env.AWS_ROLE_ARN }}
aws-region: ${{ env.AWS_REGION }}
- name: Log in to Amazon ECR
run: |
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ECR_REPOSITORY_URI
- name: Build and Push Docker Image
...
위 코드는 github actions의 workflow 예시 코드이다.
- develop 브랜치에 푸시했을 때 CI가 작동한다.
- github secrets에 AWS_ROLE_ARN, AWS_ECR_REPOSITORY_URI, AWS_REGION 값을 시크릿 값으로 불러온다.
- persmission 설정은 아래의 기능을 한다.
- id-token:write - github Actions 워크플로우가 AWS와 같은 서비스에 접근하기 위해 OIDC(OpenID Connect) 토큰을 발급하고 클라우드 리소스에 접근할 수 있도록 한다.
- contents:read - 해당 리포지토리의 파일에 접근하여 특정 브랜치의 파일을 다운로드, 출력하는 등에 사용할 수 있다.
위와 같이 적용 시, Assume Role을 통해 간결한 CI 코드가 작성될 수 있다.
728x90
반응형
'Programming-[Infra] > Cloud-AWS' 카테고리의 다른 글
Elasticache 연결 문제 - <unresolved>:6379, Redis, Springboot, Lettuce (0) | 2024.02.15 |
---|---|
[탐험]S3 Content-Disposition으로 파일 다운로드 이름 변경, CloudFront 캐시 무효화 (1) | 2023.10.05 |
[TIL] AWS S3 donwload_file() method directory에 random string 붙는 현상. FileNotFoundError (0) | 2023.04.12 |
[TIL] AWS Lambda, CloudFormation, Gateway (0) | 2022.10.19 |
2020/11/11 TIL : AWS/local 서버 생성, AWS DB 생성, 서버-DB 연결 (0) | 2020.11.11 |