- Terraformを実行して IAM user
a-userと IAM Rolemfa-roleを作成します。a-userはmfa-roleにAssumeRoleできます。mfa-roleは 同一アカウントからの AssumeRoleを許可しますが利用には mfaが必須です。mfa-roleは S3 へのフルアクセスを持っています。 ~/.aws/credentialsを作成します。~/.aws/credentialsの a-user プロファイルは IAM Usera-userの aws access/secretkey の入力に使います。~/.aws/configを作成します。~/.aws/configで、 mfa-role プロファイルは、a-userからmfa-roleにAssumeRoleし利用すること。mfa-roleが求めるmfaにmfa_serialで指定した に IAM Usera-userの仮想MFAデバイスのarnを使うことを宣言します。mfa_serialによって、aws cli はmfaが必要な時に自動的にプロンプトを行います。
準備ができました。aws cli で mfa-role プロファイルとして s3一覧取得を実行しましょう。
コマンドを実行すると、.aws/config で指定した IAM User の MFAデバイスのパスコード入力が求められます。TOTP を入力すると、IAM Role mfa-role に付与されたポリシーに従って S3 バケットのリストを列挙します。
S3 アクセス権限は IAM User a-user にはなかったので、mfa-role に AssumeRole され、また MFA が必須になっていることがわかります。
TIPS: mfa がないと Deny するポリシーを用いるとわかりやすい
$ aws s3 ls --profile mfa-role
Enter MFA code for arn:aws:iam::0123456789:mfa/foobar: ここに MFA のTOTPを入力する