AWS Tools for PowerShell
ユーザーガイド

AWS 認証情報の使用

AWS Tools for PowerShell の各コマンドには、対応するウェブサービスリクエストの暗号署名に使用する AWS 認証情報セットを含める必要があります。コマンド個別、セッション個別、またはすべてのセッションに対して認証情報が指定できます。ベストプラクティスとして、認証情報を公開しないように、コマンドにリテラル認証情報を配置しないでください。代わりに、使用する認証情報セットごとにプロファイルを作成し、このプロファイルを 2 つの認証情報ストアのどちらかに保存します。コマンドで正しいプロファイル名を指定すると、Tools for PowerShell が対応する認証情報を取得します。AWS 認証情報を安全に管理する方法の概要については、「AWS アクセスキーを管理するためのベストプラクティス」を参照してください。

注記

認証情報を取得して Tools for PowerShell を使用するには、AWS アカウントが必要です。アカウントにサインアップする方法については、「AWS アカウントとアクセスキー」を参照してください。

認証情報ストアの場所

Tools for PowerShell では 2 つの認証情報ストアのどちらかを使用できます。

  • AWS SDK ストアは、認証情報を暗号化してユーザーのホームフォルダに保存します。Windows では、このストアは AppData\Local\AWSToolkit\RegisteredAccounts.json です。

    AWS SDK for .NETToolkit for Visual Studio でも AWS SDK ストアを使用できます。

  • 認証情報ファイルもホームフォルダに配置されますが、認証情報がプレーンテキストとして保存されます。

    デフォルトでは次の場所に認証情報ファイルが保存されます。C:\Users\username\.aws\credentials。AWS SDK と AWS Command Line Interface でも認証情報ファイルが使用できます。AWS ユーザーのコンテキスト外でスクリプトを実行している場合は、認証情報を含むファイルを必ず、すべてのユーザーアカウント (ローカルシステムおよびユーザー) からアクセスできる場所にコピーしてください。

プロファイルの管理

このセクションでは、Tools for PowerShell を使用して AWS SDK ストアのプロファイルを管理する方法について説明します。AWS SDK ストアは、Toolkit for Visual Studio を使用して管理できます。または、AWS SDK for .NET を使用してプログラムで管理することもできます。認証情報ファイルのプロファイルを管理する方法については、「AWS アクセスキーを管理するためのベストプラクティス」を参照してください。

新しいプロファイルを追加

AWS SDK ストアに新しいプロファイルを追加するには、Set-AWSCredential を実行します。ユーザーのアクセスキーとシークレットキーは、デフォルトの認証情報ファイルに保存されます。

PS C:\> Set-AWSCredential -AccessKey AKIAIOSFODNN7EXAMPLE -SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY -StoreAs MyProfileName
  • -AccessKey – アクセスキー。

  • -SecretKey – シークレットキー。

  • -StoreAs – プロファイル名。これは一意である必要があります。

    デフォルトのプロファイルを指定するには、default にプロファイル名を設定します。

プロファイルの更新

AWS SDK ストアは手動で管理する必要があります。IAM コンソールなどで後でサービスの認証情報を変更する場合、ローカルに保存された認証情報を使用してコマンドを実行すると、次のエラーメッセージが表示されて失敗します。

The AWS Access Key Id you provided does not exist in our records.

プロファイルを更新するには、プロファイルに対して Set-AWSCredential コマンドを繰り返し使用して、新しいアクセスキーとシークレットキーをプロファイルに渡します。

プロファイルのリスト表示

現在の名前のリストは次のようにして確認できます。

PS C:\> Get-AWSCredential -ListProfileDetail

プロファイルの削除

プロファイルを削除するには、次のコマンドを使用します。

PS C:\> Remove-AWSCredentialProfile -ProfileName MyProfileName

-ProfileName パラメータにはプロファイル名を指定します。

下位互換性のために Clear-AWSCredential も継続して使用できますが、Remove-AWSCredentialProfile を使用することをお勧めします。

認証情報の指定

認証情報を指定する方法は複数あります。推奨される方法は、コマンドラインにリテラル認証情報を組み込むのではなく、プロファイルを使用することです。Tools for PowerShell は、「認証情報の検索順序」で説明されている順序でプロファイルを検索します。このセクションでは、プロファイルを指定する最も一般的な方法について説明します。

AWS 認証情報はログオンしている Windows ユーザーの ID により暗号化されます。これは別のアカウントを使用して復号化することはできず、また認証情報を作成したデバイス以外のデバイスで使用することもできません。たとえばスケジュールされたタスクを実行する場合など、別のユーザーのコンテキストでタスクを実行するには、前のセクションで説明した方法により、そのユーザーとしてコンピュータにログオンする場合に使用する暗号化された認証情報プロファイルをセットアップします。タスクを実行するユーザーとしてログオンし、認証情報のセットアップ手順を完了して、そのユーザー用のプロファイルを作成します。その後ログオフして、自身の認証情報を使用して再度ログオンし、スケジュールされたタスクをセットアップします。

注記

共通パラメータ -ProfileName を使用してプロファイルを指定します。このパラメータは、以前の Tools for PowerShell リリースでの -StoredCredentials パラメータに相当します。下位互換性のために、-StoredCredentials も引き続きサポートされています。

認証情報は、default という名前のプロファイルに保存すると、ローカルコンピュータのすべての AWS SDK と管理ツールで自動的に検索できます。たとえば、ローカルコンピュータに default という名前のプロファイルがある場合、Initialize-AWSDefaultConfigurationSet-AWSCredential コマンドレットを実行する必要はありません。ツールでは、アクセスキーとシークレットキーのデータが自動的に使用されます。デフォルトリージョン (Get-DefaultAWSRegion の結果) 以外のリージョンを使用する場合は、Set-DefaultAWSRegion を実行してリージョンを指定できます。

プロファイルが default という名前でなくても、現在のセッションでデフォルトプロファイルとして使用したい場合は、Set-AWSCredential を実行してデフォルトプロファイルとして設定します。

Initialize-AWSDefaultConfiguration を実行すると、すべての PowerShell セッションのデフォルトプロファイルを指定できます。この場合、認証情報はカスタム名のプロファイルから読み込まれ、default プロファイルは指定したプロファイルで上書きされます。

Initialize-AWSDefaultConfiguration は実行しないようお勧めします。ただし、PowerShell を実行している EC2 インスタンスの起動にインスタンスプロファイルを使用していなくて、認証情報プロファイルを手動で設定する場合は除きます。この場合は、認証情報プロファイルに認証情報が含まれないことに注意してください。Initialize-AWSDefaultConfiguration を EC2 インスタンスで実行した結果としての認証情報プロファイルは、インスタンスメタデータを参照して認証情報を取得します (認証情報は更新されるため)。ただし、このプロファイルにはインスタンスのリージョンが保存されます。Initialize-AWSDefaultConfiguration を実行する別のシナリオとして、インスタンスが実行されているリージョン以外のリージョンに対して呼び出しを実行する場合があります。この場合、インスタンスメタデータに保存されているリージョンは永続的に上書きされます。

PS C:\> Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2

注記

デフォルトの認証情報は default プロファイル名の下の AWS SDK ストアに含まれています。このコマンドを使用すると、その名前の既存のプロファイルが上書きされます。

EC2 インスタンスの起動にインスタンスプロファイルを使用している場合、PowerShell は認証情報とリージョン情報をインスタンスプロファイルから取得します。Initialize-AWSDefaultConfiguration を実行する必要はありません。EC2 インスタンスの起動にインスタンスプロファイルを使用している場合、Initialize-AWSDefaultConfiguration コマンドレットの実行は不要です。PowerShell がデフォルトで使用するのと同じインスタンスプロファイルが使用されます。

セッションのプロファイル

特定セッションにデフォルトのプロファイルを指定するには、Set-AWSCredential を使用します。このプロファイルはセッション期間中、デフォルトのプロファイルを上書きします。現在の default プロファイルの代わりにカスタム名のプロファイルをセッションで使用する場合は、この方法をお勧めします。

PS C:\> Set-AWSCredential -ProfileName MyProfileName

注記

Tools for Windows PowerShell 1.1 より前のバージョンでは Set-AWSCredential コマンドが正しく機能せず、「MyProfileName」で指定したプロファイルが上書きされていました。最新バージョンの Tools for Windows PowerShell を使用することをお勧めします。

コマンドのプロファイル

特定のコマンドに対してプロファイルを指定するには、-ProfileName パラメータを追加します。このプロファイルはすべてのデフォルトまたはセッションのプロファイルを上書きします。以下に例を示します。

PS C:\> Get-EC2Instance -ProfileName MyProfileName

注記

デフォルトまたはセッションのプロファイルを指定する場合には、-Region パラメータを追加してデフォルトまたはセッションのリージョンを指定することもできます。詳細については、「AWS リージョンの指定」を参照してください。次の例では、デフォルトのプロファイルとリージョンを指定しています。

PS C:\> Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2

デフォルトでは、認証情報ファイルはユーザーのホームフォルダ (Windows の場合は C:\Users\username\.aws、Linux の場合は ~/.aws) に配置されます。別の場所の認証情報ファイルを指定するには、-ProfileLocation パラメータを追加して、認証情報ファイルのパスを設定します。次の例では、特定のコマンドに対してデフォルト以外の認証情報ファイルを指定しています。

PS C:\> Get-EC2Instance -ProfileName MyProfileName -ProfileLocation C:\aws_service_credentials\credentials

注記

AWS に通常サインインしていない時間帯に PowerShell スクリプトを実行している場合 (通常の作業時間以外で、スケジュールされたタスクとして PowerShell スクリプトを実行している場合など) は、使用するプロファイルを指定するときに -ProfileLocation パラメータを追加し、その値として認証情報が保存されているファイルのパスを設定します。Tools for PowerShell スクリプトの実行に正しいアカウント認証情報を確実に使用するために、AWS アカウントを使用しないコンテキストやプロセスでスクリプトを実行する場合に、必ず -ProfileLocation パラメータを追加してください。スクリプトがタスクを実行するために使用するローカルシステムまたは他のアカウントからアクセス可能な場所に、認証情報ファイルをコピーすることもできます。

認証情報の検索順序

コマンドを実行する際、Tools for PowerShell は次の順序で認証情報を検索し、最初に利用できるセットを使用します。

  1. コマンドラインに組み込まれたリテラル認証情報を使用します。

    コマンドラインにリテラル認証情報を指定するのではなく、プロファイルを使用することを強くお勧めします。

  2. 指定されたプロファイル名またはプロファイルの場所を使用します。

    • プロファイル名のみを指定した場合は、AWS SDK ストアにある指定のプロファイルが使用されますが、そのようなプロファイルが存在しない場合は、デフォルトの場所にある認証情報ファイルの指定プロファイルが使用されます。

    • プロファイルの場所のみを指定した場合は、その認証情報ファイルの default プロファイルが使用されます。

    • 名前と場所を指定した場合は、その認証情報ファイルの指定したプロファイルが使用されます。

    指定されたプロファイルまたは場所が見つからない場合、このコマンドは例外をスローします。プロファイルとロケーションを両方とも指定しなかった場合のみ、以下の手順で検索が行われます。

  3. -Credential パラメータで指定された認証情報を使用します。

  4. セッションのプロファイルを使用します。

  5. 次の順序で、デフォルトのプロファイルを使用します。

    1. AWS SDK ストアの default プロファイル。

    2. 認証情報ファイルの default プロファイル。

    3. AWS SDK ストアの AWS PS Default プロファイルを使用します。

  6. IAM ロールを設定した Amazon EC2 インスタンスでコマンドを実行する場合は、インスタンスプロファイルに保存された EC2 インスタンス認証情報を使用します。

    Amazon EC2 インスタンスで IAM ロールを使用する方法については、AWS SDK for .NET を参照してください。

この検索により指定された認証情報が検索できなかった場合、このコマンドは例外をスローします。

AWS Tools for PowerShell Core での認証情報の処理

AWS Tools for PowerShell Core のコマンドレットは、AWS Tools for PowerShell と同様に、実行時に AWS のアクセスキーとシークレットキー、または認証情報プロファイルの名前を受け取ります。Windows で実行すると、どちらのモジュールも AWS SDK for .NET の認証情報ストアファイル (各ユーザーの AppData\Local\AWSToolkit\RegisteredAccounts.json ファイルに保存されています) にアクセスします。このファイルにはユーザーのキーが暗号化された形式で保存されていて、別のコンピュータで使用することはできません。これは、 Tools for PowerShell が認証情報プロファイルを検索する場合に最初に検索するファイルであり、また AWS Tools for PowerShell が認証情報プロファイルを保存するファイルでもあります。AWS SDK for .NET の認証情報ストアファイルの詳細については、「AWS 認証情報の設定」を参照してください。Tools for PowerShell モジュールでは、他のファイルまたは場所への認証情報の書き込みを現在サポートしていません。

どちらのモジュールも、他の AWS SDK および AWS CLI で使用される ini 形式の共有認証情報ファイルのプロファイルを読み取ることができます。Windows では、このファイルのデフォルトの場所は C:\Users\<userid>\.aws\credentials です。Windows 以外のプラットフォームでは、このファイルは ~/.aws/credentials に保存されています。-ProfileLocation パラメータを使用して、デフォルト以外のファイル名またはファイルの場所を指定することができます。

SDK 認証情報ストアには、Windows 暗号化 API を使用して暗号化された形式の認証情報が保持されています。これらの API は他のプラットフォームでは使用できないため、AWS Tools for PowerShell Core モジュールは、ini 形式の共有認証情報ファイルを排他的に使用して、共有認証情報ファイルへの新しい認証情報プロファイルの書き込みをサポートしています。この機能は、AWS Tools for Windows PowerShell の将来のリリースでサポートが予定されています。

以下の例は、Set-AWSCredential コマンドレットを使用して、[AWSPowerShell] または [AWSPowerShell.NetCore] モジュールのいずれかにより Windows で認証情報プロファイルを処理するためのオプションを示しています。

# Writes a new (or updates existing) profile with name "myProfileName" # in the encrypted SDK store file Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName # Checks the encrypted SDK credential store for the profile and then # falls back to the shared credentials file in the default location Set-AWSCredential -ProfileName myProfileName # Bypasses the encrypted SDK credential store and attempts to load the # profile from the ini-format credentials file "mycredentials" in the # folder C:\MyCustomPath Set-AWSCredential -ProfileName myProfileName -ProfileLocation C:\MyCustomPath\mycredentials

以下の例は、Linux または Mac OS X オペレーティングシステムでの [AWSPowerShell.NetCore] モジュールの動作を示しています。

# Writes a new (or updates existing) profile with name "myProfileName" # in the default shared credentials file ~/.aws/credentials Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName # Writes a new (or updates existing) profile with name "myProfileName" # into an ini-format credentials file "~/mycustompath/mycredentials" Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName -ProfileLocation ~/mycustompath/mycredentials # Reads the default shared credential file looking for the profile "myProfileName" Set-AWSCredential -ProfileName myProfileName # Reads the specified credential file looking for the profile "myProfileName" Set-AWSCredential -ProfileName myProfileName -ProfileLocation ~/mycustompath/mycredentials