AWS PowerShell 使ってますか?
awscliはMFA対応がちゃんとしていて、一度MFA入力したらしばらく大丈夫ですが、AWSPowerShellだと入力の都度求められて嫌になりますよね。
PowerShellでもスクリプトスコープの変数にSessionTokenを突っ込めばイケそうなきがしたので実装してみました。
インストール方法
モジュール内部からAWSPowerShellを使うのでインストールしておいてください。
msi版でもよいですが、PowerShell v5.x(Windows10)ならinstall-module awspowershell
でもインストールできます。
スクリプトモジュールとして実装したので、 STSHelper.psm1 をダウンロードして、BOM付きUTF-8で保存して、下記の要領でインストールしてください。
$destdir = Join-Path $env:PSModulePath.split(';')[0] "STSHelper"
if (Test-Path $destdir) {} else { mkdir $destdir }
copy-item STSHelper.psm1 $destdir
使用方法
準備
認証情報をプロファイルに保存します
-
<ソースプロファイル> IAMアカウントのアクセスキーを指定したプロファイル
Set-AWSCredential -StoreAs <ソースプロファイル> -AccessKey <アクセスキー> -SecretKey <シークレットキー>
-
<ターゲットプロファイル> AssumeRole先を指定したプロファイル
Set-AWSCredential -StoreAs <ターゲットプロファイル> -SourceProfile <ソースプロファイル> -RoleArn <ロールのARN> -MfaSerial <MFAのARN>
毎回起動時に設定するのは大変なので下記のprofile.ps1
に書いておくのがおすすめ
$env:USERPROFILE\Documents\WindowsPowerShell\profile.ps1
profile.ps1
について詳しく知りたい場合は PowerShell で Profile を利用して スクリプトの自動読み込みをしてみよう が詳しいです。
利用
import-module STSHelper
New-STSCredential <ターゲットプロファイル> <ソースプロファイル>
iex (Update-STSCredential)
以降はiex
... だけで更新されます。
iex (Update-STSCredential)
プロセス起動毎に初回利用時または期限切れのときはMFA入力が求められます。
それ以外は新たなMFA入力無しで1時間延長です。
メモリ(スクリプトスコープの変数)に保存しているのでランタイム毎に必要です。
スクリプト内でプロファイル保存しても呼び出し元に反映されないのでiex
してます。
期限の確認
Get-STSCredential
課題
ファイルに保存すればランタイムをまたげると思うのですが、生で保存したくないので実装していません。
awscliみたいに無効時に必要に応じて自動的に呼び出せるようにしたいかな。