🧢

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