Search

awspf - AWS Profile 쉽게 전환하기

PublishDate
2023/06/14
Category
AWS CLI
Util
Automation
Tag & Keyword
aws profile

1. 왜 필요한가요?

default profile은 사용하지 않지만, 다중 profile을 편하게 사용하고 싶다!!!
aws cli를 사용할 때 profile 기능을 이용하면 여러개의 자격 증명을 등록하고 스위칭해서 효율적으로 사용할 수 있습니다.
개인적으로 default 이름의 profile을 사용하는 것은 Human Error를 초래할 수 있기 때문에, 사용을 선호하지 않습니다. 대신 저는 shell session에 한해서 특정 profile을 기본 값으로 설정하여 사용합니다. 매번 cli 커맨드에 --profile 옵션을 추가하기 귀찮기도 하고, Terraform, Boto3 등 AWS 자격증명을 사용하는 다른 도구를 사용할 때 특정 profile을 기본 값으로 사용하는게 편해서이기도 합니다. (물론 Terraform, Boto3 모두 profile 기능을 제공합니다.)

2. AWS CLI의 default profile 작동 원리

‘default profile을 사용하는 것’‘특정 profile을 기본 값으로 설정해서 사용하는 것’은 다음과 같은 차이가 있습니다.
~/.aws/credentials 파일 설정이 다음과 같다고 가정해보겠습니다.
[default] aws_access_key_id = AAABCXXXXXX #dev-account의 key aws_secret_access_key = AAA12XXXXX #dev-account의 key [prod-account] aws_access_key_id = AAABCXXXXXX #prod-account의 key aws_secret_access_key = AAA12XXXXX #prod-account의 key
Shell
복사
모든 shell session은 시작할 때 aws cli의 기본 profile로 [default]를 사용합니다. 만약 이곳에 prod-account가 등록되어 있으면 운영 환경에 의도치 않은 실수를 할 수 있게됩니다.
그래서 저는 [default]를 사용하지 않습니다. 세션마다 default profile을 수동으로 지정하거나 매번 --profile 옵션을 사용해야 하기 때문에 실수를 줄일 수 있습니다.
[default] [prod-account] aws_access_key_id = AAABCXXXXXX #prod-account의 key aws_secret_access_key = AAA12XXXXX #prod-account의 key
Shell
복사
export AWS_PROFILE=prod-account 명령어를 사용하면 현재 shell의 세션에 한해서 prod-account의 자격증명이 default로 사용됩니다. 다음 예시들을 보면 쉬울 것 같습니다.
1.
처음 쉘을 시작하면 $AWS_PROFILE값이 비어있고, default 를 사용하게 됩니다.
2.
export AWS_PROFILE=prod-account 명령어를 사용하면, 이 세션은 prod-account 라는 자격증명을 기본으로 사용합니다.
3.
export한 세션만 기준이 되기 때문에 세션을 두 개 켜놓고 하나를 변경하면, 나머지 하나는 변경되지 않습니다. 그래서 세션별로 다른 profile을 쉽게 사용할 수 있습니다.

3. Profile Switching

2번 챕터에서 설명했듯이, export AWS_PROFILE을 사용하면 profile을 switching 할 수 있습니다.
보통 profile을 switching 하는 flow는 다음과 같습니다.
1.
aws configure list-profiles 명령어로 등록된 profile list를 확인합니다.
2.
export AWS_PROFILE=profile_name 명령어로 default profile을 변경하거나 --profile 옵션을 사용합니다.
이 두 단계를 매번 수행 하는것이 번거로워서 한 번에 처리하는 방법을 원했습니다.

3.1. 실패

python, shell script로 profile list를 출력하고, 방향키로 이동해서 선택했을 때 해당 profile을 default로 설정하는 스크립트를 만들어봤지만 실패했습니다.
이유는 자식 프로세스가 부모 프로세스에게 직접적인 변경을 할 수 없어서였습니다. (export AWS_PROFILE 명령어를 수행하는 행위)
실패 코드

3.2. 해결 -

방법을 찾아보다가 fzf에 대해서 알게됐습니다.
Linux의 불편한 탐색 시스템을 개선한 대화식 탐색 시스템입니다.
탐색 시스템이기 때문에 활용 범위가 무궁무진하지만 이 포스팅에서는 aws profile switch에 활용하는 방법만 알아보겠습니다.
fzf가 설치되어 있다면 굉장히 간단한 한 줄 짜리 alias로 제가 원하던 기능을 구현할 수 있었습니다.
1.
fzf 설치
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install source ~/.zshrc #혹은 source ~/.bashrc
Shell
복사
2.
다음 명령어를 입력합니다.
# 구버전 alias awspf='export AWS_PROFILE=$(sed -n "s/\[\(.*\)\]/\1/gp" ~/.aws/credentials | fzf)' #Linux 전용 alias awspf='export AWS_PROFILE=$(sed -n "s/\[\(profile \)\?\(.*\)\]/\2/p" ~/.aws/credentials ~/.aws/config | sort -rg | uniq | fzf)' #Mac(OSX) 전용 alias awspf='export AWS_PROFILE=$(sed -n -E "s/\[(profile )?([^][]+)\]?\s*$/\2/p" ~/.aws/credentials ~/.aws/config | sort -rg | uniq | fzf)'
Shell
복사
3.
awspf 명령어를 사용하면 등록된 profile을 대화형으로 스위치 할 수 있습니다.
4.
마지막으로 ~/.zshrc, ~/.bashrc 와 같은 곳에 alias를 동일하게 등록하면, 새로운 세션을 시작할 때 바로 awspf를 사용할 수 있습니다.
이 방식으로 mfa 임시 자격 증명 자동화와 함께 사용하면 편하고 안전하게 AWS 자격 증명을 관리할 수 있을 것 같습니다!