LoginSignup
3
1

More than 5 years have passed since last update.

AWS Powershell で MFA必須のAssumeRoleを使う

Last updated at Posted at 2017-10-05

いまどき、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

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1