AWS Tools for PowerShell で MFAを用いたAssume Roleによるクレデンシャル取得を行なってみた
はじめに
好物はインフラとフロントエンドのかじわらゆたかです。
AWS CLIではAssume Roleによるクレデンシャル取得はConfigファイルに設定することで、
自動的に取得したクレデンシャルでコマンドの実行を行うことが可能です。
AWS Tools for PowerShellでも同様にできるだろと思ったらそんなことはなく、
自動取得の無い一昔まえに戻されたと言った内容になります。
AWS Tools for PowerShellでAssumeRoleによるクレデンシャル取得
AWS Tools for PowerShellのバージョンは以下のバージョンで確認を行なっています。
PS C:\> Get-AWSPowerShellVersion AWS Tools for Windows PowerShell Version 3.3.57.0 Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. Amazon Web Services SDK for .NET Core Runtime Version 3.3.8.2 Copyright 2009-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Release notes: https://aws.amazon.com/releasenotes/PowerShell This software includes third party software subject to the following copyrights: - Logging from log4net, Apache License [http://logging.apache.org/log4net/license.html]
MFAを用いない場合、AWS Tools for PowerShellでAssumeRoleによるクレデンシャル取得はAWSの公式ドキュメントに記載されている方法で取得できます。
Tools for Windows PowerShell で一時的なセキュリティ認証情報を使用する
MFAを用いてAssumeRoleから取得する場合は、以前のAWS CLIでやっていたと同様にSerialNumberとTokenCodeといったパラメータにMFAのARNとMFAの数字を入れる必要があります。
AWSの公式ドキュメントの例に付け加えると、以下のようになります。
PS C:\> $role = Use-STSRole -RoleArn arn:aws:iam::123456789012:role/MySampleRole -RoleSessionName RoleSession1 -StoredCredentials IAM-user-name -SerialNumber arn:aws:iam::987654321098:mfa/user-mfa -TokenCode 123456
あとは、$roleに取得したCredential情報が入っているので、それを用いてAWS Toolsのコマンドを実行します。
PS C:\> Get-EC2Instance -Region ap-northeast-1 -Credential $role.Credentials (出力結果については省略します。)
まとめ
AWS Tools for PowerShellでは自動的にAssumeRoleでCredentialを自動で取得し、
コマンドを実行すると言った事はまだできない模様です。
今回の記事の用に、実行前にクレデンシャルを取得すると言った事は行えるため、
AssumeRoleすることができないわけではないのですが、
AWS CLIに比べると一手間かかってしまうと言った事になります。
また、AWS SDK for .NETのissue等も見ては見ましたが、
AWS CLIの用に自動で取得するといった流れはまだ無さそうでした。
参考
AWS Security Token Service: Use-STSRole Cmdlet Cmdlet | AWS Tools for PowerShell