AWS CLI の MFA 認証をスクリプトで簡単に実行する方法
AWS のマネージメントコンソールで MFA を有効化しても、実はアクセスキーを使用したAWS CLIの実行はできてしまいます。つまり、コンソールでのMFA設定だけでは、CLI経由のアクセスを完全に保護できているとは言えません。
特に、組織のセキュリティポリシーでMFA認証が強制されている環境(参考:多要素認証(MFA)するまで使えません!なIAMユーザを作成してみた)では、AWS CLIでのMFA認証の設定が必須となります。
本記事では、プロファイルを切り替える方式でMFA認証を実装する方法を解説します。
AWS CLIでのMFA認証については、こちらの記事も参考になりますので併せて読んでみてください。
前提条件
- AWS CLIがインストール済み
- IAM ユーザーが作成済み
- MFAデバイスが設定済み(Google Authenticatorなど)
1.AWS CLIのプロファイルを作成
まず、MFAのプロファイルを作成するために以下のコマンドを実行します。
~ % aws configure
AWS Access Key ID [None]: 【アクセスキーID】
AWS Secret Access Key [None]: 【シークレットアクセスキー】
Default region name [None]: ap-northeast-1 # 東京リージョン
Default output format [None]: json
設定を確認します。
~ % aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
~ % aws sts get-caller-identity
{
"UserId": "XXXXXXXXXXXXXXXXXXXXX",
"Account": "xxxxxxxxxxxx",
"Arn": "arn:aws:iam::xxxxxxxxxxxx:user/mfauser"
}
2.MFAデバイスのシリアル番号(ARN)を確認
MFAデバイスのシリアル番号(ARN)を確認します。このARNは後ほど必要になりますので、メモをしておいてください。
~ % aws iam list-mfa-devices
{
"MFADevices": [
{
"UserName": "mfauser",
"SerialNumber": "arn:aws:iam::xxxxxxxxxxxx:mfa/mfauser",
"EnableDate": "2025-02-05T06:10:08+00:00"
}
]
3.MFA認証用のスクリプトを作成
#!/bin/bash
# MFAデバイスのARNを設定(上で確認したSerialNumberを設定)
MFA_SERIAL_NUMBER="arn:aws:iam::xxxxxxxxxxxx:mfa/mfauser"
# MFAコードの入力を求める
echo -n "Enter MFA code: "
read MFA_CODE
# AWS STSを使用して一時的な認証情報を取得
CREDENTIALS=$(aws sts get-session-token \
--serial-number ${MFA_SERIAL_NUMBER} \
--token-code ${MFA_CODE} \
--duration-seconds 43200)
# 取得した認証情報を変数に格納
AWS_ACCESS_KEY_ID=$(echo ${CREDENTIALS} | jq -r '.Credentials.AccessKeyId')
AWS_SECRET_ACCESS_KEY=$(echo ${CREDENTIALS} | jq -r '.Credentials.SecretAccessKey')
AWS_SESSION_TOKEN=$(echo ${CREDENTIALS} | jq -r '.Credentials.SessionToken')
# 認証情報をAWS credentialsファイルに書き込み
aws configure set aws_access_key_id "${AWS_ACCESS_KEY_ID}" --profile mfa
aws configure set aws_secret_access_key "${AWS_SECRET_ACCESS_KEY}" --profile mfa
aws configure set aws_session_token "${AWS_SESSION_TOKEN}" --profile mfa
echo "MFA credentials have been set for profile 'mfa'"
スクリプトに実行権限を付与します。
~ % chmod +x mfa.sh
4.MFA認証の実行
~ % ./mfa.sh
Enter MFA code: 123456
MFA credentials have been set for profile 'mfa'
設定されたプロファイルを確認
~ % aws configure list --profile mfa
Name Value Type Location
---- ----- ---- --------
profile mfa manual --profile
access_key ****************YYYY shared-credentials-file
secret_key ****************YYYY shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
5.MFAプロファイルの使用
MFA認証が必要なAWS CLIコマンドを実行する際は、--profile mfa オプションを付けます。
# S3バケットの一覧表示
~ % aws s3 ls --profile mfa
# EC2インスタンスの一覧表示
~ % aws ec2 describe-instances --profile mfa
おまけ
~/.zshrc や ~/.bashrc に以下を追加すると、より簡単にMFAプロファイルを使用できます。
alias aws-mfa='aws --profile mfa'
参考
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。