[Tip]터미널에서 AWS Profile 전환을 효율적으로 하는 방법

개요
aws cli를 사용할 때 profile 기능을 이용하면 여러개의 자격 증명을 등록하고 스위칭 해서 효율적으로 사용할 수 있다.
default 프로파일을 사용하는 것은 human error 를 초래할 수 있어 권장되지 않아 cli를 사용할때 매번 --profile 옵션을 추가해야 하는 번거로움이 발생한다.
이 같은 번거로움을 조금이라도 회피해 보고자 합니다.
AWS CLI의 default profile 이란?
~/.aws/credentials 파일 설정에 다음과 같다고 가정해 보겠습니다.
[default]
aws_access_key_id = AAAAAAAAAAAAAA #prod-account의 key
aws_secret_access_key = AAAAAAAAAAAAAA #prod-account의 key
[dev-account]
aws_access_key_id = BBBBBBBBBBBBBBB #dev-account의 key
aws_secret_access_key = BBBBBBBBBBBBBBB #dev-account의 key
aws cli 에서 명령을 실행할때 --profile dev-account 옵션을 주지 않으면 기본적으로 default profile을 사용하기 때문에 prod-account 에서 명령을 실행하게 되어 의도치 않은 실수를 낳게 됩니다.
aws s3 cp test.png s3://bucket-name/ 이와 같이 하면 prod-account에 있는 s3 bucket에 object를 업로드 하게 됩니다.
위와 같은 실수를 줄이기 위해 default profile 을 사용하지 않고 cli 명령어에 --profile 옵션을 사용하여 profile 을 특정해서 명령을 실행하는 것이 실수를 줄일 수 있습니다.
[default]
[prod-account]
aws_access_key_id = AAAAAAAAAAAAAA #prod-account의 key
aws_secret_access_key = AAAAAAAAAAAAAA #prod-account의 key
[dev-account]
aws_access_key_id = BBBBBBBBBBBBBBB #dev-account의 key
aws_secret_access_key = BBBBBBBBBBBBBBB #dev-account의 key
aws s3 cp test.png s3://bucket-name/ --profile dev-account명시적으로 profile을 사용하기 때문에 실수를 줄일 수 있음
물론 위와 같이 사용하게 되면 실수를 줄일 수 있겠지만 매번 profile을 명시해야 한다는 번거로움이 뒤따릅니다.
이와 같은 번거로움을 없애기 위해 profile을 손쉽게 스위칭 할수 있는 방법을 소개 하겠습니다.
아래 조건에서 테스트 하였습니다.
- OS : macOS
- Shell : zsh
- .zshrc 파일에
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_PROFILE환경변수 설정이 없어야 함.
fzf 설치
https://github.com/junegunn/fzf
brew install fzf
homebrew를 이용하여 fzf 설치
스위칭 스크립트 작성
아래 스크립트를 aws_change_profile.sh이름으로 적당한 위치에 저장합니다.
#!/bin/bash
grep -E "^\\[" ~/.aws/config | grep -E "profile|default" | tr -d "[|]" | awk '{ if($1 == "default") {print "default"} else {print $2} }' | fzf
스크립트 내용 설명
- 1단계
grep -E "^\\[" ~/.aws/config: AWS 설정 파일에서 대괄호([)로 시작하는 줄(섹션 헤더)만 찾아냅니다. - 2단계
grep -E "profile|default": 그중에서profile또는default라는 단어가 포함된 줄만 필터링 합니다. - 3단계
tr -d "[|]": 텍스트에서 대괄호([와])를 제거하여 알맹이만 남깁니다. - 4단계
awk '{ if($1 == "default") {print "default"} else {print $2} }': 형식을 정리합니다.default면 그대로 출력하고,profile 이름형식이라면 '이름' 부분만 뽑아냅니다. - 5단계
fzf: 최종 추출된 리스트를 대화형 선택 찾으로 띄워줍니다.
.zshrc 수정
.zshrc 파일은 사용자의 Shell(zsh)환경을 커스터마이징 할 수 있는 파일입니다. .zshrc 파일에 위에서 작성한 스크립트를 alias로 설정하기 위한 구문을 추가 합니다.
alias awspf='export AWS_PROFILE=$(~/.aws/aws_change_profile.sh)'
위 내용은 shell에서 awspf 입력시 export AWS_PROFILE=$(~/.aws/aws_change_profile.sh)가 실행된다는 내용입니다.
AWS CLI의 환경변수 구성에 대한 자세한 내용은 아래 링크를 참고하세요.
시연 영상
시연영상
마무리
이상으로 터미널 환경에서 AWS profile을 효율적으로 스위칭하는 방법에 대해 알아보았습니다.