この記事は公開されてから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へぼやいた所素敵なツール(それも作者)を紹介してもらい非常に助かりました。