🦁

AWS CLIのMFA認証自動化スクリプト

2024/12/12に公開

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
https://qiita.com/mizue/items/8292a1ea39d31a0d43bf

Discussion