aws-cliで資格情報を保存すると、~/.aws/credentials(SharedCredentialsFile)に格納されますが。
Windows環境のAWS Tools for PowerShellでSet-AWSCredentialを使用して資格情報を保存した場合、NetSDKCredentialsFileに資格情報が格納されます。
今回はNetSDKCredentialsFileに格納されている資格情報を一括表示するスクリプトを紹介します。
なお、AWS Tools for PowerShellでは必ずNetSDKCredentialsFileを利用されるかといえばそんなこともなく。
Linux環境ではAWS Tools for PowerShellを使っても、SharedCredentialsFileに格納されますし、Windows環境でもSet-AWSCredentialにProfileLocationを指定して、SharedCredentialsFileに書き込むと、SharedCredentialsFileに格納されます。
今回テスト用に利用するダミーCredentialsを登録する
今回は下記MyNewProfile1,MyNewProfile2,MyNewProfile3という名前でダミーの資格情報をNetSDKCredentialsFileに登録して、こちらの情報を一括出力してみます。
Set-AWSCredential -AccessKey AKIA0123456787EXAMPLE `
-SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY `
-StoreAs MyNewProfile1
Set-AWSCredential -AccessKey AKIA0123456787EXAMPLE `
-SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY `
-StoreAs MyNewProfile2
Set-AWSCredential -AccessKey AKIA0123456787EXAMPLE `
-SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY `
-StoreAs MyNewProfile3
# MyNewProfile1,MyNewProfile2,MyNewProfile3が登録された事を確認する
Get-AWSCredential -ListProfileDetail | ? StoreTypeName -eq NetSDKCredentialsFile
NetSDKCredentialsFileに登録された資格情報を一括出力する
ごちゃごちゃしたワンライナーになっていますが、下記を実行するとNetSDKCredentialsFileに登録された資格情報を一括表示できます。
Get-AWSCredential -ListProfileDetail | ? StoreTypeName -eq NetSDKCredentialsFile | select-object profilename , @{Name="AccessKey";Expression={ ($_ | Get-AWSCredential).GetCredentials().AccessKey}} , @{Name="SecretKey";Expression={($_ | Get-AWSCredential).GetCredentials().SecretKey}}, @{Name="Token";Expression={($_ | Get-AWSCredential).GetCredentials().Token}}, @{Name="UseToken";Expression={($_ | Get-AWSCredential).GetCredentials().UseToken}}
PipelineVariableを利用してまとめてみようと試みましたがあまりかわらず? 参考までにおいておきます。
下記でも同様に動作します。
Get-AWSCredential -ListProfileDetail | ? StoreTypeName -eq NetSDKCredentialsFile -PipelineVariable Credential | Get-AWSCredential | %{$_.GetCredentials()} | Select-Object @{Name="ProfileName";Expression={ $Credential.profilename }}, @{Name="AccessKey";Expression={ $_.AccessKey}}, @{Name="SecretKey";Expression={$_.SecretKey}}, @{Name="Token";Expression={$_.Token}}, @{Name="UseToken";Expression={$_.UseToken}}
やっている事
Get-AWSCredential -ListProfileDetail | ? StoreTypeName -eq NetSDKCredentialsFile
上記コマンドでNetSDKCredentialsFileに格納されている一覧が取得できます。
この一覧をPipeでGet-AWSCredentialに渡すと、Amazon.Runtime.BasicAWSCredentialsというオブジェクトが戻ってきます。
このオブジェクトの詳細についてはドキュメントを参照してもらうとして。
このオブジェクトには、GetCredentials()という資格情報を返却するメソッドがあります。
今回紹介するワンライナーではGetCredentialsメソッドを、計算プロパティ(Calculated_Properties)で実行して各項目の値を取得しています。
総評
AWS Tools for PowerShellを利用する場合、NetSDKCredentialsFileに保存された資格情報を出力する方法について説明しました。
端末移行する場合などで、NetSDKCredentialsFileから登録してあるファイルに一括出力 & ファイルから一括インポートするようなスクリプトをつくるといった利用方法もありかもしれません。


