AWS Tools for PowerShellで利用するNetSDKCredentialsFileから資格情報を一括出力してみる

`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`に登録して、こちらの情報を一括出力してみます。

```pwsh:テスト用の資格情報を登録する
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
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/f64d7c41-9617-f8ce-3037-0c624145a5b6.png)

## NetSDKCredentialsFileに登録された資格情報を一括出力する

ごちゃごちゃしたワンライナーになっていますが、下記を実行すると`NetSDKCredentialsFile`に登録された資格情報を一括表示できます。

```pwsh:資格情報を一括出力
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}}
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/9d6d3a3c-7eff-b381-642d-7ae036737f70.png)

`PipelineVariable`を利用してまとめてみようと試みましたがあまりかわらず？　参考までにおいておきます。
下記でも同様に動作します。

```pwsh:資格情報を一括出力（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`に格納されている一覧が取得できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/88035fcb-a658-b900-fb17-8f9ab64b19c0.png)

この一覧をPipeで`Get-AWSCredential`に渡すと、`Amazon.Runtime.BasicAWSCredentials`というオブジェクトが戻ってきます。

このオブジェクトの詳細についてはドキュメントを参照してもらうとして。

[BasicAWSCredentials Class](https://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_Runtime_BasicAWSCredentials.htm)

このオブジェクトには、`GetCredentials()`という資格情報を返却するメソッドがあります。

今回紹介するワンライナーでは`GetCredentials`メソッドを、計算プロパティ（Calculated_Properties）で実行して各項目の値を取得しています。

## 総評

`AWS Tools for PowerShell`を利用する場合、`NetSDKCredentialsFile`に保存された資格情報を出力する方法について説明しました。

端末移行する場合などで、`NetSDKCredentialsFile`から登録してあるファイルに一括出力　＆　ファイルから一括インポートするようなスクリプトをつくるといった利用方法もありかもしれません。