👏
AWS CLI の `sts get-session-token` で 2FA を設定するワンライナーシェルスクリプト
はじめに
AWS IAM の 2FA を設定してて aws-cli
を使う時も 2FA を利用しないといけない場合のためのワンライナーシェルスクリプトです。
ワンライナー
aws sts get-session-token --serial-number "AWS_IAM_2FA_シリアルナンバーのARN" --token-code "$(read v; echo $v)" \
| jq -r '.Credentials | to_entries[] | [.key, .value] | join(" ")' \
| sed "s/AccessKeyId/aws_access_key_id/;s/SecretAccessKey/aws_secret_access_key/;s/SessionToken/aws_session_token/; s/^/aws configure set --profile 取得した認証をセットするprofile名 /" \
| bash
実行して、2FAのコードを標準入力に入力すれば aws --profile 取得した認証をセットするprofile名
で 2FA認証済みの上智で AWS CLI を実行できます。
仕組み
aws sts get-session-token
で取得した認証情報を aws configure set
で ~/.aws/credentials
に書き込んでいます。
関数にした例
関数にするとこんな感じです。
function aws::renew::credentails() {
local serial_number="AWS_IAM_2FA_シリアルナンバーのARN"
local out_aws_profile="取得した認証をセットするprofile名"
aws sts get-session-token --serial-number "${serial_number}" --token-code "$(read v; echo $v)" \
| jq -r '.Credentials | to_entries[] | [.key, .value] | join(" ")' \
| sed "s/AccessKeyId/aws_access_key_id/;s/SecretAccessKey/aws_secret_access_key/;s/SessionToken/aws_session_token/; s/^/aws configure set --profile ${out_aws_profile} /" \
| bash
}
Discussion