aws-session-token を取得して環境変数に入れるシェルスクリプト
経緯
AWS のIAMでは設定でMFA認証を強制させるポリシーを作成することができます。
AWS CLIから利用する際にはコンソールから発行できるアクセスキー(アクセスキーとシークレットキー)を~/.aws/credentials
に発行されたキーを登録して利用します。しかし、MFAを設定している場合には、このアクセスキーを利用して一時的なトークンを取得し、これを利用してCLIを利用することになります。
いちいち取得した変数を登録するのが面倒だったため関数を作成してbashrcに追加しておくことで、その作業を楽にしました。
設定
1.まず、自分のMFAデバイスのarnを取得します(MFA デバイスの割り当て
のARNです)。IAMのユーザの項目から探すことができます。
2.~/.aws/confing
にmfa-device
を追記します。
[profile hogehoge]
region = ap-northeast-1
output = json
mfa-device = arn:aws:iam::************:mfa/user #この行
3.bashrc に以下を追記します。
set-awssession-token() {
profile_name=$1
code=$2
mfa_device=$(cat ~/.aws/config | grep -A 4 $profile_name | grep mfa-device | cut -f 3 -d " ")
session_token=$(aws sts get-session-token --serial-number $mfa_device --token-code $code --profile $profile_name)
export AWS_ACCESS_KEY_ID=$(echo $session_token | jq -r .Credentials.AccessKeyId)
export AWS_SECRET_ACCESS_KEY=$(echo $session_token | jq -r .Credentials.SecretAccessKey)
export AWS_SESSION_TOKEN=$(echo $session_token | jq -r .Credentials.SessionToken)
}
release-awssession-token() {
export -n AWS_ACCESS_KEY_ID
export -n AWS_SECRET_ACCESS_KEY
export -n AWS_SESSION_TOKEN
}
4.設定が完了しました。
source ~/.bashrc
set-awssession-token hogehoge {{ MFA_CODE }}
とすることで一時的なトークンが環境変数にセットされるので心置きなくCLIが叩けるようになります。