PowerShellコマンド
MFAセッショントークンを取得し、環境変数に設定するPowershellコマンド。
# アカウントID、ユーザー名、ワンタイムパスワードは書き換える
# 有効期間は3600秒を設定(最大129600秒(36時間))
$session = aws sts get-session-token `
--serial-number arn:aws:iam::{アカウントID}:mfa/{ユーザー名} `
--token-code {ワンタイムパスワード} `
--duration-seconds 3600 `
--profile default | ConvertFrom-Json
# ユーザーの環境変数に設定
[System.Environment]::SetEnvironmentVariable("AWS_ACCESS_KEY_ID", $session.Credentials.AccessKeyId, "User")
[System.Environment]::SetEnvironmentVariable("AWS_SECRET_ACCESS_KEY", $session.Credentials.SecretAccessKey, "User")
[System.Environment]::SetEnvironmentVariable("AWS_SESSION_TOKEN", $session.Credentials.SessionToken, "User")
# プロンプトを開き直さなくてもよいように、プロンプト上の環境変数にも設定
$env:AWS_ACCESS_KEY_ID = $session.Credentials.AccessKeyId
$env:AWS_SECRET_ACCESS_KEY = $session.Credentials.SecretAccessKey
$env:AWS_SESSION_TOKEN = $session.Credentials.SessionToken
~\.aws\credentials
[default]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}
Powershellのコマンドとして登録する
毎回スクリプトを実行するのは面倒なので、Powershell上のコマンドとしていつでも実行できるようにする。
Powershellのプロファイルに以下を記載する。
※プロファイルの場所は、\$PROFILE 変数の値。
(現在のユーザーの場合は、$HOME\Documents\PowerShell\Microsoft.PowerShell_profile.ps1)
※初回作成時はファイルが存在しないので作成する
Microsoft.PowerShell_profile.ps1
function SetMFASessionToken() {
Param([Parameter(Mandatory)]$token)
# アカウントID、ユーザー名は書き換える
# 有効期間は3600秒を設定
$session = aws sts get-session-token `
--serial-number arn:aws:iam::{アカウントID}:mfa/{ユーザー名} `
--token-code $token `
--duration-seconds 3600 `
--profile default | ConvertFrom-Json
# ユーザーの環境変数に設定
[System.Environment]::SetEnvironmentVariable("AWS_ACCESS_KEY_ID", $session.Credentials.AccessKeyId, "User")
[System.Environment]::SetEnvironmentVariable("AWS_SECRET_ACCESS_KEY", $session.Credentials.SecretAccessKey, "User")
[System.Environment]::SetEnvironmentVariable("AWS_SESSION_TOKEN", $session.Credentials.SessionToken, "User")
# プロンプトを開き直さなくてもよいように、プロンプト上の環境変数にも設定
$env:AWS_ACCESS_KEY_ID = $session.Credentials.AccessKeyId
$env:AWS_SECRET_ACCESS_KEY = $session.Credentials.SecretAccessKey
$env:AWS_SESSION_TOKEN = $session.Credentials.SessionToken
}
Powershell上でコマンドレットのように呼び出せる
※動作確認環境※
AWS CLI:2.1.32
PowerShell:7.3.4