2022-10-10 @이영훈
AWS에서 보안을 이유로 MFA를 설정하는 것이 좋습니다. 이때 AWS CLI도 필수로 설정하게 할 수 있습니다.
CLI에서 받은 키값을 aws credentials 파일(~/.aws/credentials)에 넣는 반복 작업이 힘들어서 간단한 스크립트를 만들었습니다.
AWS CLI에서 MFA로 로그인하기
AWS 문서를 보면, AWS CLI로 로그인하기 위해서 환경변수나 프로필에 자격 증명을 넣어서 사용하라고 되어있습니다. 환경변수보다는 프로필에 자격 증명을 넣어서 사용하는 편이 관리하기가 편하기 때문에 이 방법을 사용하도록 하겠습니다.
위의 값을 serial-number에 기입합니다.
인증 시간(duration-seconds)은 24시간으로 설정합니다.
•
기본값은 12시간 (43,200초) 입니다.
•
최대값은 36시간 (129,600초) 입니다.
•
최소값은 15분 (900초) 입니다.
그리고 저는 profile 별로 나누어서 관리하기 때문에 leedo 라는 프로파일을 선택했습니다.
•
선택값입니다. default 프로파일을 사용하신다면 해당 필드를 삭제해주시면 됩니다.
aws sts get-session-token \
--serial-number {MFA Device의 ARN} \
--token-code {6자리 MFA 번호} \
--profile leedo \
--duration-seconds 86400
# ex
aws sts get-session-token \
--serial-number arn:aws:iam::551111111111:mfa/leedo@leedo.me \
--token-code 123456 \
--profile leedo \
--duration-seconds 86400
Bash
복사
# Response
{
"Credentials": {
"AccessKeyId": "ASIABDUOYI77JUNDAJ1E",
"SecretAccessKey": "VK0gcrPSe5XPe1ApMfJ19lp40C5LCDeCcfyCYezc",
"SessionToken": "FwoGZXIvYXdzEKf//////////wEaDID2aAhF8+mVJaAYjiKFAdW4J+rzDRftkQ6h6eggT7loIvEZIyl3u3/LFVx3terq+qN00/pY47uaaBRQBOCju3hUrb33roWDIqeQmkc1VRtfdjuzYJ0yULUSW9+KssFX/RwnEf7HAzubka8X0SCAsI8l2tm998TrvB93Ycx4JJqxHZj5CxX5Shkb9v+0svCoSWFokLQo38mQmgYyKPidtnpwOaZ1uPXSDHt6Vox9BcoArwmepapbxrAZbnWe8bm4vjUU+5E=",
"Expiration": "2022-10-10T14:12:51+00:00"
}
}
Bash
복사
이렇게 나온 결과값을 새로운 profile을 만들어서 기입하면 됩니다. 저는 mfa 라는 프로파일을 만들었습니다.
# ~/.aws/credentials 파일
# 기존에 사용하던 profile 입니다
# leedo@leedo.me
[leedo]
aws_access_key_id = AKIAYDUOJI71FIPIKZ4K
aws_secret_access_key = zy3iwWMSNIybm4ipMJiw5AA0htak979vxlf5N09n
# ⭐️ 이 부분에 추가해주시면 됩니다
# mfa for leedo@leedo.me
[mfa]
aws_access_key_id = ASIABDUOYI77JUNDAJ1E
aws_secret_access_key = VK0gcrPSe5XPe1ApMfJ19lp40C5LCDeCcfyCYezc
aws_session_token = FwoGZXIvYXdzEKf//////////wEaDID2aAhF8+mVJaAYjiKFAdW4J+rzDRftkQ6h6eggT7loIvEZIyl3u3/LFVx3terq+qN00/pY47uaaBRQBOCju3hUrb33roWDIqeQmkc1VRtfdjuzYJ0yULUSW9+KssFX/RwnEf7HAz ubka8X0SCAsI8l2tm998TrvB93Ycx4JJqxHZj5CxX5Shkb9v+0svCoSWFokLQo38mQmgYyKPidtnpwOaZ1uPXSDHt6Vox9BcoArwmepapbxrAZbnWe8bm4vjUU+5E=
Bash
복사
aws cli 사용할 때 aws {command} --profile=mfa 로 호출하면 됩니다.
AWS CLI MFA 로그인 자동화 스크립트
매번 이렇게 로그인하면 좋겠지만 복사 붙여넣기 하는 과정이 번거롭기 때문에 자동화 스크립트를 만들어서 사용하면 편리합니다.
제가 만든 쉘스크립트는 jq 라이브러리 (Json Parser)를 사용합니다. 다음 커맨드로 jq를 설치합니다.
•
Mac에서는 brew install jq
•
Ubuntu에서는 apt-get install jq
각 줄에 주석을 달아서 설명해 놓았습니다.
스크롤을 더 내리시면 주석없는 버전이 있습니다.
#!/bin/bash
# 에러가 발생하면 exit(종료) 합니다.
set -e
# aws cli로 토큰을 만들고 mfa-temp.json 파일에 저장합니다
# ⭐️ serial-number(MFA의 arn)와 profile을 적절히 수정해주세요.
aws sts get-session-token \
--serial-number arn:aws:iam::111111:mfa/{replace@here.me} \
--token-code $1 \
--profile {leedo} \
--duration-seconds 86400 > mfa-temp.json
# jq 라이브러로 AccessKeyId와 SecretAccessKey, SessionToken를 파싱하고 변수에 저장합니다
accessKeyId=$(cat mfa-temp.json | jq -r .Credentials.AccessKeyId)
secretAccessKey=$(cat mfa-temp.json | jq -r .Credentials.SecretAccessKey)
sessionToken=$(cat mfa-temp.json | jq -r .Credentials.SessionToken)
# 파싱한 결과를 표시합니다
echo ${accessKeyId}
echo ${secretAccessKey}
echo ${sessionToken}
# mfa 프로파일에 AccessKeyId와 SecretAccessKey, SessionToken 저장합니다
# ⭐️ 원하는 프로파일명으로 적절히 수정해주세요
aws configure set aws_access_key_id $accessKeyId --profile mfa
aws configure set aws_secret_access_key $secretAccessKey --profile mfa
aws configure set aws_session_token $sessionToken --profile mfa
# 임시로 생성한 mfa-temp.json 파일을 삭제합니다
rm mfa-temp.json
Bash
복사
주석 없는 버전
실행 권한을 추가합니다.
chmod +x {file_name}.sh
# 저는 파일명을 aws-cli-mfa.sh로 했습니다
# ex.
chmod +x aws-cli-mfa.sh
Bash
복사
다음 명령어로 실행하면 됩니다.
첫번째 변수에 6자리 MFA 숫자를 넣으면 됩니다.
./aws-cli-mfa.sh {6자리 MFA 숫자}
# ex.
./aws-cli-mfa.sh 123456
Bash
복사