AWS PowerShell で MFA入力を減らしてみる
AWS PowerShell で MFA入力を減らしてみる:
AWS PowerShell 使ってますか?
awscliはMFA対応がちゃんとしていて、一度MFA入力したらしばらく大丈夫ですが、AWSPowerShellだと入力の都度求められて嫌になりますよね。
PowerShellでもスクリプトスコープの変数にSessionTokenを突っ込めばイケそうなきがしたので実装してみました。
モジュール内部からAWSPowerShellを使うのでインストールしておいてください。
msi版でもよいですが、PowerShell v5.x(Windows10)なら
スクリプトモジュールとして実装したので、 STSHelper.psm1 をダウンロードして、BOM付きUTF-8で保存して、下記の要領でインストールしてください。
認証情報をプロファイルに保存します
以降は
プロセス起動毎に初回利用時または期限切れのときはMFA入力が求められます。
それ以外は新たなMFA入力無しで1時間延長です。
メモリ(スクリプトスコープの変数)に保存しているのでランタイム毎に必要です。
スクリプト内でプロファイル保存しても呼び出し元に反映されないので
ファイルに保存すればランタイムをまたげると思うのですが、生で保存したくないので実装していません。
awscliみたいに無効時に必要に応じて自動的に呼び出せるようにしたいかな。
AWS PowerShell 使ってますか?
awscliはMFA対応がちゃんとしていて、一度MFA入力したらしばらく大丈夫ですが、AWSPowerShellだと入力の都度求められて嫌になりますよね。
PowerShellでもスクリプトスコープの変数にSessionTokenを突っ込めばイケそうなきがしたので実装してみました。
インストール方法
モジュール内部からAWSPowerShellを使うのでインストールしておいてください。msi版でもよいですが、PowerShell v5.x(Windows10)なら
install-module awspowershell
でもインストールできます。スクリプトモジュールとして実装したので、 STSHelper.psm1 をダウンロードして、BOM付きUTF-8で保存して、下記の要領でインストールしてください。
install.ps1
$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入力無しで1時間延長です。
メモリ(スクリプトスコープの変数)に保存しているのでランタイム毎に必要です。
スクリプト内でプロファイル保存しても呼び出し元に反映されないので
iex
してます。
期限の確認
Get-STSCredential
課題
ファイルに保存すればランタイムをまたげると思うのですが、生で保存したくないので実装していません。awscliみたいに無効時に必要に応じて自動的に呼び出せるようにしたいかな。
コメント
コメントを投稿