Skip to main content

AWS 크레덴셜 정보 보호하기

aws-vault란 ?

aws-vault는 aws의 크레덴셜 정보인 access_key와 secret_key를 텍스트로 저장하거나 노출시키는 것을 방지하는 데 도움을 주는 도구입니다. aws-vault는 맥 OS 키체인, 윈도우 자격 증명 관리자, 그놈 키링, K윌렛 등을 백엔드로 사용해 인증 정보를 안전하게 저장하고, 키를 사용할 때도 사용자 키를 직접 사용하지 않고 STS를 경유해 임시 세션 키를 발급 받아 사용합니다. 따라서 처음에 인증 정보를 셋업한 이후에는 인증 정보가 유출되더라도 세션이 유효한 기간만 동작하기 때문에 비교적 안전합니다.

aws-vault 설치 및 설정
brew install awscli
brew install aws-vault
aws-vault --version

AWS 크레덴셜 정보 등록

aws-vault add [profile]
aws-vault ls
aws-vault 사용하기
aws-vault exec [profile] -- [command]

Example

aws-vault exec default -- aws s3 ls
aws-vault exec default -- grep AWS
aws-vault exec default -- terraform plan
aws-vault exec default -- terraform apply
aws-vault exec default -- terraform destroy

세션 유효기간 8시간 설정 (장시간 작업시)

aws-vault exec default --duration 8h --debug
aws-vault --debug exec sample-profile --duration 8h --no-session

웹 콘솔 로그인

aws-vault login default
aws-vault login default --stdout

세션 삭제

aws-vault remove default --sessions-only

저는 자주 사용하는 커맨드를 다음과 같은 alias로 설정하여 사용하고 있습니다.

unset AWS_VAULT
eval $(aws-vault --completion-script-zsh)

alias tf="aws-vault exec default --terraform"
alias aws-login="aws-vault login default"
alias aws-login-8h="aws-vault exec default --duration 8h --debug"
alias aws-logout="aws-vault remote $(aws-vault ls | awk 'NR==3 {print $1}') --sessions-only"
alias aws-run="aws-vault exec default -- aws"

unset AWS_VAULT를 설정해주지 않으면 다음과 같은 에러가 발생합니다.

aws-vault: error: exec: aws-vault sessions should be nested with care, unset AWS_VAULT to force

VScode ToolKit 사용하기

보안을 위해 플레인텍스트로 작성된 ~/.aws/credentials를 삭제하고 aws-vault를 사용하다보면 vsCode에서 AWS Toolkit을 사용하기 위해서 로컬에 있는 ~/.aws/credentials 폴더를 찾는데 이미 삭제했으므로 aws IAM 정보가 없어서 액세스하지 못합니다.

하지만 아래와 같은 방법으로 액세스 정보를 제공하여 AWS Toolkit를 사용할 수 있습니다.

vi ~/.aws/config
credentials_process = aws-vault exec [profile] --json
mfa_serial=[AWS MFA ARN]

저의 설정은 아래와 같습니다.

[default]
region = ap-northeast-2
output = json
mfa_serial = arn:aws:iam::[IAM번호]:mfa/iphone-12-mini
credential_process = aws-vault exec default --json