Windowsデスクトップ環境でのAWSクレデンシャルの使用

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Windowsデスクトップ環境でのAWSクレデンシャルの使用

通常、Windows Server上のアプリケーションでAWS SDKを利用する際は、IAM Roleを用いることによりクレデンシャル情報をハードコードしないようにしているかと思います。逆にWindowsデスクトップ上でAWSに関連したアプリケーション(Windows Forms、WPF、Officeアドオン等)を動作させる事があると思います。この際、クレデンシャル(Long Term Access Key)をローカルに保存する必要がある場合があります。その際、Visual StudioまたはPowerShellを用いる環境では主にクレデンシャルを『SDK Store』という定められた場所に保存する事が推奨されます。

※本記事ではデスクトップWindows環境でCommand Line Interfaceを用いる場合のクレデンシャルの扱いに関しては述べません。Command Line Interfaceを用いる場合はhomeフォルダ下のcredentials fileに保存されます。

SDK Storeとは

  • SDK Storeはクレデンシャルを暗号化し、homeフォルダの下に保存します。
  • SDK StoreはAWS SDK for .NET、AWS Toolkit for Visual Studio及びAWS SDK for PowerShellで用いることができます。
  • SDK Storeへは『プロファイル』という形でクレデンシャルを保存します。これはクレデンシャルに名前をつけたものです。

AWS Toolkit for Visual Studioでのクレデンシャルの利用

Visual Studioで作業している場合のクレデンシャルの保存方法をご紹介します。

Visual Studioの場合は非常に簡単で、AWS SDK for .NETをインストールするとAWS Toolkit for Visual Studioもインストールされ、下記のようなAWS Explorerがインストールされます。

dotnet_security_credentials-01

このツールの右上に人型のProfileの追加、編集、削除ボタンが有ります。追加ボタンを押すと、下記のようなダイアログが表示されて、クレデンシャルを登録することができます。

dotnet_security_credentials-02

Profile Nameには適切なものを指定し、Access Key IDとSecret Access Keyを入力して保存します。

このAWS Explorerでプロファイルを設定しておくと、PowerShellやプロファイルからクレデンシャルを取得するようにプログラムされているWindowsアプリケーションでプロファイル名を指定してAWS APIを呼び出すことができます。

AWS SDK for PowerShellでのクレデンシャルの利用

AWS SDK for PowerShellでAWSを操作する場合は、特定のコマンドを用いて予めプロファイルを登録しておきます。

プロファイルの新規作成

PS> Set-AWSCredentials -AccessKey your_access_key -SecretKey your_secret_key -StoreAs your_profile_name

プロファイルの一覧表示

PS> Get-AWSCredentials -ListProfiles
profile01
profile02
profile03

プロファイルの削除

PS> Clear-AWSCredentials -ProfileName MyProfileName

Visual Studioがインストールされていない環境でAWS SDKを用いたWindows Forms、WPF、Officeアドオンなどのアプリケーションを利用する場合は、PowerShellを用いて予めプロファイルを登録しておくとよいでしょう。

(参考)PowerShell利用時のクレデンシャルの探索順序

Windowsデスクトップアプリケーション、Windows ServerアプリケーションでPowerShellを用いる場合、下記の探索順序でクレデンシャルが探索されます。

  1. (非推奨)PowerShellコマンド実行時の引数に直接指定されているAccess Key IDとSecret Access Keyを使用する。
    1. 特定の目的がない限り推奨されていません。特にLong Term Credentialsを利用する場合は。
  2. 指定されたProfile Name、またはProfile Locationを使用する。
    1. Profile Nameのみ指定されていた場合、SDK Store内の指定されたProfileを使用する。無い場合、デフォルトロケーションのクレデンシャルファイルのプロファイルを使用する。
    2. Profile Locationのみ指定されていた場合、指定されたProfile Locationのクレデンシャルファイルのdefaultプロファイルを使用する。
    3. Profile NameとProfile Locatinoが指定されていた場合、指定されたProfile Locationのクレデンシャルファイルの指定されたProfile Nameのプロファイルを使用する。
  3. -Credentialsパラメータで指定されたプロファイルを使用する。
  4. セッションプロファイルを使用する。
  5. 次の順序でdefaultプロファイルを使用する。
    1. SDK Storeのdefaultプロファイル
    2. (デフォルトのProfile Locationにある)クレデンシャルファイのdefaultプロファイル
    3. SDK StoreのAWS PS Defaultプロファイル
  6. IAM Roleが指定されているAmazon EC2インスタンスでコマンドを実行している場合、インスタンスプロファイルにあるEC2インスタンスクレデンシャルを使用する。