🦁
AWS CLIのMFA認証自動化スクリプト
AWS CLIでMFAを利用する必要がある場合、自動化する手順を以下に覚書しておきます
【前提】
AWS で多要素認証が設定されていること
AWS CLIがインストールされていること
AWS Access Key ID と、AWS Secret Access Keyを取得して、以下のように実行します。
$ aws configure --profile my-mfa-profile
AWS Access Key ID [None]: ****************
AWS Secret Access Key [None]: ****************
Default region name [None]: ap-northeast-1
Default output format [None]:json
自動的にセットしてくれるシェルスクリプト。シェルスクリプトが実行できる環境で動作します。windowsの場合も、git bashで./mfa.sh {6桁のトークン}
で実行可能
#!/bin/bash
# MFAクレデンシャル # AWSにて確認
SESSION_SERIAL_DOMEIN=arn:aws:iam::{aws多要素認証識別子の値}:mfa/{aws多要素認証識別子の値}
# プロファイル名
MFA_PROFILE_NAME=my-mfa-profile
echo "Profile: $MFA_PROFILE_NAME"
echo 'MFA認証ログイン'
# MFAクレデンシャル情報取得
SESSION_JSON=$(aws --profile $MFA_PROFILE_NAME sts get-session-token --serial-number $SESSION_SERIAL_DOMEIN --token-code $1 --output json)
if [ $? -ne 0 ]; then
exit 1
fi
# 必要な項目を変数にセットする *git bash に、jqがインストールされていな環境のためgrep と sed で代用
MFA_ACCESS_KEY=$(echo "$SESSION_JSON" | grep -o '"AccessKeyId":\s*"[^"]*"' | sed 's/"AccessKeyId":\s*"//g' | sed 's/"//g')
MFA_SECRET_ACCESS_KEY=$(echo "$SESSION_JSON" | grep -o '"SecretAccessKey":\s*"[^"]*"' | sed 's/"SecretAccessKey":\s*"//g' | sed 's/"//g')
MFA_SESSION_TOKEN=$(echo "$SESSION_JSON" | grep -o '"SessionToken":\s*"[^"]*"' | sed 's/"SessionToken":\s*"//g' | sed 's/"//g')
MFA_EXPIRATION=$(echo "$SESSION_JSON" | grep -o '"Expiration":\s*"[^"]*"' | sed 's/"Expiration":\s*"//g' | sed 's/"//g')
# 必要な変数が設定されているか確認
echo "Access Key: $MFA_ACCESS_KEY"
echo "Secret Key: $MFA_SECRET_ACCESS_KEY"
echo "Session Token: $MFA_SESSION_TOKEN"
# MFA用プロファイルにクレデンシャルを一時的な環境変数へセット(bashなどを閉じると環境変数は消える)
export AWS_ACCESS_KEY_ID=$MFA_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=$MFA_SECRET_ACCESS_KEY
export AWS_SESSION_TOKEN=$MFA_SESSION_TOKEN
echo "MFA認証に成功しました (profile: $MFA_PROFILE_NAME, expiration: $MFA_EXPIRATION)"
上手くいったか確認
aws s3 ls --profile my-mfa-profile
などで確認して上手く表示されればよし。
参考URL
Discussion