2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS PowerShell で MFA入力を減らしてみる

Last updated at Posted at 2018-11-11

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 <MFAARN>
    

毎回起動時に設定するのは大変なので下記の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みたいに無効時に必要に応じて自動的に呼び出せるようにしたいかな。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?