たまにMFAが有効になっていないとマネジメントコンソールへのログインだけでなく、APIでのアクセスもできなくしているケースがあります。
もちろんCLIでMFAを使う方法はあるのですが、ちょっと面倒な手順です。そこで1発でMFA認証付きでAWS CLI使うスクリプト作ったので紹介します。
Authy
前提として2段階認証アプリとしてauthyを使います。
Twilioという電話のAPIを提供するアメリカの企業が提供しているクラウドベースの2段階認証アプリで、最大の特徴はクラウドベースなので複数端末での利用をサポートしていることです。MacでもスマホでもiPadでも使うことができ、機種変更の時も引き継ぎ作業が不要です。またもしalrredのPowerPackを買っている方はalfredからMFAのコードが取得可能になります(詳細はここでは割愛)。
API経由でMFAのコードを取得することもでき、https://github.com/momaek/authy こちらのツールを使用させていただきます。
インストール方法はReadmeに丁寧に書いてあるので割愛します。インストールしログインするとこんな感じにコマンドラインからトークンがゲットできます。
さらにaオプションを付けるとjsonで取れるのでこれを活用します。
スクリプト
mfaarn=arn:aws:iam::<your aws account id>:mfa/<your iam user name>
profile=<profile nama>
accountid=<your aws account id>
aws sts get-session-token --serial-number $mfaarn --token-code \
`authy fuzz $accountid -a | jq '.items[] | .arg' -r` --profile $profile \
| jq '.Credentials |
"export AWS_ACCESS_KEY_ID="+.AccessKeyId,
"export AWS_SECRET_ACCESS_KEY="+.SecretAccessKey,
"export AWS_SESSION_TOKEN="+.SessionToken' -r > .tmp-awsmfakey
source .tmp-awsmfakey
rm -f .tmp-awsmfakey
スクリプトの中でjqコマンドを使っているのでjqをまだインストールしていない方はこちらを。
スクリプトをset-aws-cli-credential.shという名前で保存し、1,2,3行目を自身のものに変えます。
- mfaarnにはMFAデバイスのARNを。<your aws account id>の部分をAWSアカウントID、<your iam user name>をユーザ名に。
- profileのところは特に使っていなければdefaultと書いてください。
- accountidには12桁のAWSアカウントIDを入れます。
1,2,3行目を変えたら次のコマンドで実行します。sourceコマンドなのでシェル毎に、AWS CLIを実行する前に実行してください。最後の実行から1時間くらいでトークンが切れるのでその場合はサイド以下のコマンドを実行します。
source set-aws-cli-credential.sh
その後適当なコマンドを実行して動作しているか確かめてみてください。ユーザ情報を確かめるなら以下。
aws sts get-caller-identity
最後に
今回は普通にやると面倒なAWS CLIでのMFA認証を一発でやってみました。もしご自身のご都合にあえばぜひ活用してやってください。