AWS IAM スイッチロール

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

パーミッションバウンダリー 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