🧢
AWS CLIで手軽にスイッチロールしたい(PowerShell編)
AWSエンジニアのゆたかです。
今回はPowerShellを用いたAWS CLIでのスイッチロールについてまとめました。
想定ケース
- PowerShellでサクッとスイッチロールしたい。
- 一時作業のためコマンドのみでシンプルにスイッチロールしたい
- 認証情報の手動コピペをしたくない(+コマンドプロンプトでjqが使えない)
- 認証情報ファイル(~/.aws/config)を編集せずにスイッチロールしたい など
コマンド
早速ですが、以下コマンドを用いてスイッチロールできます。
# 変数の設定
$AssumeRoleArn = <スイッチロールしたいIAMロールのARN>
$SessionName = <任意のセッション名>
# スイッチロール + 認証情報を変数に代入
$AssumeRoleCred = $(aws sts assume-role --role-arn $AssumeRoleArn --role-session-name $SessionName) | ConvertFrom-Json
# 環境変数の設定
$Env:AWS_ACCESS_KEY_ID = $AssumeRoleCred.Credentials.AccessKeyID
$Env:AWS_SECRET_ACCESS_KEY = $AssumeRoleCred.Credentials.SecretAccessKey
$Env:AWS_SESSION_TOKEN = $AssumeRoleCred.Credentials.SessionToken
# 認証情報の設定確認
aws sts get-caller-identity
これらを一連の処理にしたい場合、以下のような記述もできます。
# 変数の設定
$AssumeRoleArn = <スイッチロールしたいIAMロールのARN>
$SessionName = <任意のセッション名>
try {
# スイッチロール + 認証情報を変数に代入
$AssumeRoleCred = $(aws sts assume-role --role-arn $AssumeRoleArn --role-session-name $SessionName) | ConvertFrom-Json
if ($AssumeRoleCred -and $AssumeRoleCred.Credentials) {
# 環境変数の設定
$Env:AWS_ACCESS_KEY_ID = $AssumeRoleCred.Credentials.AccessKeyID
$Env:AWS_SECRET_ACCESS_KEY = $AssumeRoleCred.Credentials.SecretAccessKey
$Env:AWS_SESSION_TOKEN = $AssumeRoleCred.Credentials.SessionToken
Write-Host "スイッチロールに成功しました。環境変数を設定しました。" -ForegroundColor Green
# 認証情報の設定確認
Write-Host "--- 認証情報の設定確認 (get-caller-identity) ---" -ForegroundColor Cyan
aws sts get-caller-identity
Write-Host "--------------------------------------------------" -ForegroundColor Cyan
} else {
throw "認証情報を取得できませんでした。"
}
} catch {
Write-Host "スイッチロール処理中にエラーが発生しました。" -ForegroundColor Red
}
まとめ
今回はサクッとスイッチロールできるようにシンプルに作成したので、
今後は運用スクリプトにする場合を考慮してエラーハンドリングを丁寧に実装してみたいです。
ご覧いただき、ありがとうございました!
Discussion