
PowerShellでassume-roleを楽にするツールaws-masqueradeを使ってみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちはCX事業本部IoT事業部のさかじです。 IAMロールを切り替えることがPowerShellで手軽に切り替えられないかなと、社内Slackに投げた所、作者本人の夏目さんから紹介を受けたので使ってみました。
環境
- Windows10
前提条件
- AWS CLIがインストールしてあること
PS C:\> aws --version aws-cli/2.7.7 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
はじめに
今回実施したかったスイッチロールする方法はAWS CLIの標準機能を使用して実施できます。しかし、MFAの自動認証ができるなど手間を省ける機能がありますので、aws-masqueradeというツールを使ってみました。
やってみた
※ ビルド済みのバイナリをこちらからダウンロードできます。ビルド済みバイナリを使う場合には以下の作業は不要です。
- Visual Studioビルドツールインストール
- Rustインストール
Visual Studioビルドツールインストール
Build Tools for Visual Studio 2022インストール
ダウンロードページ

ダウンロードされた vs_BuildTools.exeを起動します。

インストーラーが起動します。

「C++によるデスクトップ開発」「.NETデスクトップビルドツール」「ユニバーサルWindowsプラットフォームビルドツール」を選択して「インストール」をクリックします。

インストール進行状況

インストールが完了しましたら再起動します。
Rustインストール
Rustをインストールページへ行き、[RUSTUP-INIT.EXE(64BIT)]をダウンロードします。
※ 環境に合わせてダウンロードしてください。
ダウンロードしたrustup-init.exeを起動します。
1 を選択して進めます。

インストールが終了しましたら、PowerShellを起動します。
バージョンをチェックします。
PS C:\> cargo --version cargo 1.61.0 (a028ae42f 2022-04-29) PS C:\> rustc -V rustc 1.61.0 (fe5b13d68 2022-05-18) PS C:\> rustup -V rustup 1.24.3 (ce5817a94 2021-05-31) info: This is the version for the rustup toolchain manager, not the rustc compiler. info: The currently active `rustc` version is `rustc 1.61.0 (fe5b13d68 2022-05-18)` PS C:\> rustup show Default host: x86_64-pc-windows-msvc rustup home: C:\Users\ユーザ名\.rustup stable-x86_64-pc-windows-msvc (default) rustc 1.61.0 (fe5b13d68 2022-05-18) PS C:\>
aws-masqueradeを使ってみる
aws-masqueradeのインストール
PS C:\> cargo install aws-masquerade PS C:\> aws-masquerade.exe --version aws-masquerade 0.2.2
プロファイルを追加
PS C:\> aws-masquerade.exe add account name (required): test ※1 source profile name []: source_profile ※2 role arn (required): arn:aws:iam::123456789012:role/RoleName mfa arn []: arn:aws:iam::123456789012:mfa/UserName mfa secret []: xxxxxxxxxxxxxxxxxxxxxxxx ※3 Select Credential Output Type: [0] SharedCredentials [1] bash [2] fish [3] PowerShell > [0]: 3 Select awscli output type: [0] json [1] text [2] table > []: 1 Default Region Name []: ap-northeast-1
- ※1 : プロファイル名を入力します
- ※2 :
~\.aws\credentialsに定義しているプロファイル名を入力します - ※3 : MFAを設定するためのシークレット設定キー。わからない場合には入力しなくても使用できます
すべて入力すると設定したjsonが作成されますので問題なければ yを入力して完了です。
{
"test": {
"sourceProfile": "classmethod",
"roleArn": "arn:aws:iam::123456789012:role/RoleName",
"mfaArn": "arn:aws:iam::123456789012:mfa/UserName",
"mfaSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"credentialOutput": "PowerShell",
"output": "text",
"region": "ap-northeast-1"
}
}
Do you confirm add account? (y/n) [y]: y
assume-roleしてみる
MFAシークレット設定キー設定済みの場合
PS C:\> aws-masquerade.exe assume -a test | Invoke-Expression PS C:\>
これで完了です。
MFAシークレット設定キー設定されていない場合
コマンドを実行すると各環境設定ファイルが表示されます。これらをコピーし環境設定そのまま実行すると環境設定が行われます。
PS C:\> aws-masquerade.exe assume -a test MFA TOKEN: 123456 $env:AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxxxxxx" $env:AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxx" $env:AWS_SESSION_TOKEN="xxxxxxxxxxxxxxxxxxxxx" $env:AWS_SECURITY_TOKEN="xxxxxxxxxxxxxxx" $env:AWS_DEFAULT_OUTPUT="text" $env:AWS_DEFAULT_REGION="ap-northeast-1" コマンド実行 PS C:\> $env:AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxxxxxx" PS C:\> $env:AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxx" PS C:\> $env:AWS_SESSION_TOKEN="xxxxxxxxxxxxxxxxxxxxx" PS C:\> $env:AWS_SECURITY_TOKEN="xxxxxxxxxxxxxxx" PS C:\> $env:AWS_DEFAULT_OUTPUT="text" PS C:\> $env:AWS_DEFAULT_REGION="ap-northeast-1"
assume-roleされたか確認します。今回はS3にあるファイル一覧を取得します。
PS C:\> aws s3 ls 2022-06-18 19:43:33 xxx 2020-02-20 08:07:56 xxx 2020-06-12 02:50:43 xxx
使用したいRoleが複数ある場合
aws-masquerade.exe addコマンドを実行し、必要な情報を設定し使い分けることができます。
参考サイト
- IAM ロールへの切り替え (Tools for Windows PowerShell)
- GitHub aws-masquerade
- Windows で Rust 用の開発環境を設定する
- Rustのバージョン確認
最後に
昨年まではMacを使用していたため、不自由していなかったのですがWindowsPCに変更して少しでもPowerShellと仲良くなりたいと思い、弊部のSlackへぼやいた所素敵なツール(それも作者)を紹介してもらい非常に助かりました。






