初めに
国のガイドラインなどで、多要素認証が義務付けられることは多いです。AWS CLIを使ってデータを扱う際にも多要素認証が必要になることがあります。そんなとき、AWSのドキュメントにちょうど解決方法が記載されていましたので紹介します。
手順
1. 仮想MFAデバイスのインストール
こちらからインストールします。
2. MFAデバイスを割り当てる
IAMからユーザーを選択し、赤枠で囲った「管理」をクリックします。
3. 一時認証情報の取得
デフォルトのまま続行をクリックします。
シークレットキーの表示をクリックし、シークレットキーをコピーします。
WinAuth.exeを起動し、Addをクリックします。Authenticatorを選択します。
シークレットキーを1. Enter the Secret Code ... のテキスト部分に貼り付けます(緑枠で囲った部分)。その後、3. Click the Verify button ... の箇所にある「Verify Authenticator」をクリックします。
次に、4. Verify the followinf code ... の場所に一定間隔で6桁の数字が表示されるので、2回連続でその数字を記録します。
それらの数字をMFAコード1, 2に入力します。その後、MFAの割り当てをクリックします。
4. profileに一時認証情報を追加する
以下の更新マークを押すと、- - - - - - の部分に6桁の数字が表示されるのでメモしておきます。
コマンドラインで以下を入力します。(もちろんcliを操作できるロールまたは認証情報が別途必要です)
--serial-number
には、ARNを渡します。
--token-code
には、先ほどの6桁の数字を渡します。
$ aws sts get-session-token --serial-number arn:aws:iam::012345678912:mfa/user_name --token-code 012345
アクセスキーID、シークレットキーアクセスキー、セッショントークンが返ってきます。
{
"Credentials": {
"AccessKeyId": "ASIA...",
"SecretAccessKey": "Edr...",
"SessionToken": "IQo...",
"Expiration": "2021-04-19T22:42:00+00:00"
}
}
これらを.aws/credentials
に登録します。(もし永続的なIAM 認証情報である[default]があれば、[default]を消去して次のステップに進むと一時認証が機能していることがわかります)
[mfa]
aws_access_key_id = ASIA...
aws_secret_access_key = Edr...
aws_session_token = IQo...
profile名を与えてcliを操作します。
$ aws s3 ls --profile mfa