AWS
PowerShell
IAM

AWS Powershell で MFA必須のAssumeRoleを使う

More than 1 year has passed since last update.

いまどき、AssumeRoleにMFA必須は当然ですよね。
awscliがMFA対応しているのは有名ですが、AWS PowershellもMFA対応していました。

プロファイルを保存してデフォルト設定します。

Set-AWSCredential -StoreAs Default -AccessKey <アクセスキー> -SecretKey <シークレットキー>
Set-AWSCredential -StoreAs AdminRole -SourceProfile Default -RoleArn <RoleARN> -MfaSerial <MFASerial>
Initialize-AWSDefaultConfiguration -ProfileName AdminRole -Region ap-northeast-1

この状態で Get-EC2Instance とか実行するとMFA Codeを求められるので入力してください。
保存したプロファイルは毎回入力する必要はありません。
プロファイル名やリージョンは好きなものを指定してください。
アクセスキー、シークレットキー、RoleARN、MFASerialはIAMから指定された値です。
有効期間(1時間?)を過ぎるか、プロセス終了まで有効です。
子プロセスには引き継がれるようですが、兄弟プロセスには引き継がれないようです。
VSCodeの統合シェルでもOKでした。

ただし、PowerShell ISEだとMFA Codeを入力する間もなくエラーになりました。
試行錯誤したところ、下記のようにすれば大丈夫なようです。

$targetrole = Get-AWSCredential -ProfileName AdminRole
$role = Use-STSRole -RoleArn $targetrole.RoleArn -RoleSessionName $targetrole.RoleSessionName -ProfileName Default -SerialNumber $targetrole.Options.MfaSerialNumber -TokenCode (Read-Host "MFA Code")
Get-EC2Instance -Credential $role.Credentials

取得したクレデンシャルをデフォルト指定する方法をご存知の方は教えてください。