MFA が必要な IAM ユーザで AWS CLI を利用する場合、GetSessionToken API を用いて一時的な Credentials を取得する必要がある。
参考: AWS CLI 経由で MFA を使用してアクセスを認証する
しかしこれが面倒くさい。
aws sts get-session-token
コマンドを実行して表示された JSON から Credentials を抜き出して ~/.aws/credentials
に書き込むなり環境変数に設定するなりを毎回手作業でやらなければならない。
そこで、環境変数へ設定する作業を自動でやってくれるシェルスクリプトを書いた。
set-aws-session-token
#!/bin/sh -eu
if [ ! -p /dev/stdin ]; then
echo "Usage:"
echo " aws sts get-session-token [options] | source ${0}"
else
json=$(cat - | tr -d '\n')
export AWS_ACCESS_KEY_ID=$(echo ${json} | sed -E 's/^.*"AccessKeyId": *"([^"]+)".*$/\1/')
export AWS_SECRET_ACCESS_KEY=$(echo ${json} | sed -E 's/^.*"SecretAccessKey": *"([^"]+)".*$/\1/')
export AWS_SESSION_TOKEN=$(echo ${json} | sed -E 's/^.*"SessionToken": *"([^"]+)".*$/\1/')
env | grep AWS
fi
macOS では動作確認をしているが、GNU 版 sed が入っている Linux では動かないかもしれない。
jq が入っている人は sed 部分を jq で書き直しても良さそう。
このスクリプトを PATH が通ってるどこかに置いておいて、以下のように使う。
$ aws sts get-session-token \
--serial-number arn:aws:iam::0123456789:mfa/username \
--token-code 000000 \
| source set-aws-session-token
手作業でコピペする必要がなくなって便利。