👏

AWS CLI の `sts get-session-token` で 2FA を設定するワンライナーシェルスクリプト

2022/09/11に公開

はじめに

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
}
GitHubで編集を提案

Discussion