AmplifyはIAMロール作成権限が必要
IAMのスイッチロールを理解したい | DevelopersIO 2020
Swith Roleで複数のAWSアカウント間を切替える - Qiita 2015
【小ネタ】AWS CLIでスイッチロールして作業を行うための設定をやってみた | DevelopersIO 2019
MFAを有効にしている場合にはその設定も必要になります。
[初心者向け]AWS CLIでMFA必須のスイッチロール先のS3にアクセスしてみた | DevelopersIO 2018
【IAM】スイッチロールの運用について考えてみた | DevelopersIO
CloudFormation(CFn)
そもそも最初のTerraformを実行するユーザー作成自体は、コンソールから作成する必要がある。ユーザー作成のコードはTerraforomとCFnを分けずに、CFnにまとめたほうが混乱しなそう。
AWSマルチアカウント 2段階認証(MFA)制限のスイッチロールで環境切替え | zoo200's MemoMemo
【CloudFormation入門】5分と6行で始めるAWS CloudFormationテンプレートによるインフラ構築 | DevelopersIO
MFA強制ポリシー
MFA 強制ポリシーを適用した IAM ユーザーで初回ログイン時のパスワード変更(リセット)ができない時の対処法 | DevelopersIO
IAMユーザにパスワード変更を許可するアクション ~ChangePasswordとUpdateLoginProfileの違い~ | DevelopersIO 2019
パーミッションバウンダリー Permissions Boundary
最低限のガードレールを考慮したシンプルな IAM 設計を CloudFormation でデプロイする | DevelopersIO
その中でも今回の特徴としては、スイッチロール先のIAMロールの権限を、通常のIAMポリシーと Permissions Boundary(パーミッションバウンダリー)で管理している点です。この構成のメリットは、IAMポリシーではとりあえず広くアクションを許可し、パーミッションバウンダリーでこれだけは禁止したいというアクションを制限する、といった柔軟な権限設定が可能になる点かと思われます。
スイッチロール先の本番・開発アカウントにてIAMロール、ポリシー、パーミッションバウンダリーを作ってみた | DevelopersIO 2020
Terraform MFA Switch Role
AWS Vault
MFA認証はエラーとなる
IAMを利用している方は、ユーザーおよびパスワードだけじゃなくMFAを必須とするポリシーで運用されている方が多いと思います。また、環境分離でAWSアカウント間はスイッチロールする運用されている場合、aws:MultiFactorAuthPresentをtrueとするように設定している方も多いかと思います。Terraform CLIでも同じくMFAを必須とするよう、credentials、configにmfa_serialが指定されたprofileを指定して実行すると以下のエラーが発生します。
Error: error configuring Terraform AWS Provider: Error creating AWS session: AssumeRoleTokenProviderNotSetError: assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.
AWS CLIなら対話型で6桁のMFAコードを入力して認証情報(AccessKeyId、SecretAccessKey、SessionToken)を取得して実行しますが、Terraform CLIではMFAコードの入力が求められません。どうやら対話型認証はサポートされていないようです。「じゃあMFAを無効化するか」と簡単にセキュリティポリシーを曲げるわけにもいかないのでMFAが必須とする環境で実行できる方法を調べてみました。その一つがAWSVaultです。
[Terraform CLI]MFA認証を使ったAssumeRole。AWSVaultで解決 | DevelopersIO 2021
mfa_serialが指定されたprofileを指定するとエラーが発生する。
TerraformのAWS Providerに関して必要な設定は以下です。
実行時の環境変数からクレデンシャル情報を取得するため、profileなどの指定は必要ありません。
TerraformをMFA & Assume Roleな環境でも実行 - aws-vaultでやってみた - SMARTCAMP Engineer Blog 2019
AWS Vault
https://github.com/99designs/aws-vault
aws-vault --backend=file list aws-vault --backend=file clear
aws-vault を使って AWS IAM のクレデンシャルを安全に管理する – もばらぶエンジニアブログ 2021
amplify-cli