AWS 認証情報の使用 - AWS Tools for PowerShell

AWS 認証情報の使用

各 AWS Tools for PowerShell コマンドには AWS 認証情報のセットが含まれている必要があり、これを使用して対応するウェブサービスリクエストが暗号で署名されます。コマンド個別、セッション個別、すべてのセッションに対して認証情報が指定できます。

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

注記

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

認証情報ストアの場所

AWS Tools for PowerShell では認証情報の保存場所として、2 つのストアのどちらかを使用できます。

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

    AWS SDK for .NET および Toolkit for Visual Studio でも AWS SDK ストアを使用できます。

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

    デフォルトでは次の場所に認証情報ファイルが保存されます。

    • Windows の場合: C:\Users\username\.aws\credentials

    • Mac/Linuxの場合: ~/.aws/credentials

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

プロファイルの管理

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

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

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

PS > Set-AWSCredential ` -AccessKey AKIA0123456787EXAMPLE ` -SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY ` -StoreAs MyNewProfile
  • -AccessKey – アクセスキー ID。

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

  • -StoreAs – プロファイル名。これは一意である必要があります。デフォルトのプロファイルを指定するには、名前 default を使用します。

プロファイルの更新

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

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

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

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

現在の名前のリストを確認するには、次のコマンドを使用します。この例では、Shirley という名前のユーザーは、共有認証情報ファイル (~/.aws/credentials) に保存されている 3 つのプロファイルにアクセスできます。

PS > Get-AWSCredential -ListProfileDetail ProfileName StoreTypeName ProfileLocation ----------- ------------- --------------- default SharedCredentialsFile /Users/shirley/.aws/credentials production SharedCredentialsFile /Users/shirley/.aws/credentials test SharedCredentialsFile /Users/shirley/.aws/credentials

プロファイルの削除

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

PS > Remove-AWSCredentialProfile -ProfileName an-old-profile-I-do-not-need

-ProfileName パラメータは、削除するプロファイルを指定します。

廃止されたコマンド Clear-AWSCredential は、下位互換性のために引き続き使用できますが、Remove-AWSCredentialProfile を使用することをお勧めします。

認証情報の指定

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

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

注記

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

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

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

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

Initialize-AWSDefaultConfiguration は実行しないことをお勧めします。ただし、インスタンスプロファイルを使用して起動されていない Amazon EC2 インスタンスで PowerShell セッションを実行している場合と、認証情報プロファイルを手動で設定する場合は除きます。この場合、認証情報プロファイルに認証情報は含まれません。EC2 インスタンスで Initialize-AWSDefaultConfiguration を実行した結果生じる認証情報プロファイルは、認証情報を直接保存するのではなく、インスタンスメタデータ (自動的に更新される一時的な認証情報を提供する) を指します。ただし、インスタンスのリージョンは保存されます。Initialize-AWSDefaultConfiguration を実行する別のシナリオとして、インスタンスが実行されているリージョン以外のリージョンに対して呼び出しを実行する場合があります。そのコマンドを実行すると、インスタンスメタデータに保存されているリージョンは永続的に上書きされます。

PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2
注記

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

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

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

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

PS > Set-AWSCredential -ProfileName MyProfileName
注記

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

コマンドのプロファイル

個々のコマンドでは、-ProfileName パラメータを追加して、その 1 つのコマンドだけに適用されるプロファイルを指定できます。このプロファイルは、次の例に示すように、デフォルトプロファイルまたはセッションプロファイルを上書きします。

PS > Get-EC2Instance -ProfileName MyProfileName
注記

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

PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2

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

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

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

認証情報の検索順序

コマンドを実行すると、AWS Tools for PowerShell は、次の順序で認証情報を検索します。使用可能な認証情報が見つかると停止します。

  1. コマンドラインにパラメータとして埋め込まれているリテラル認証情報。

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

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

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

    • プロファイルの場所のみを指定した場合、コマンドはその認証情報ファイルから default プロファイルを検索します。

    • 名前と場所の両方を指定した場合、コマンドはその認証情報ファイルで指定したプロファイルを検索します。

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

  3. -Credential パラメータで指定された認証情報。

  4. セッションプロファイル (存在する場合)。

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

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

    2. AWS 共有認証情報ファイル内の 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 Windows PowerShell と同様に、実行時に AWS アクセスキーとシークレットキー、または認証情報プロファイルの名前を受け入れます。Windows で実行すると、どちらのモジュールも AWS SDK for .NET 認証情報ストアファイル (各ユーザーの AppData\Local\AWSToolkit\RegisteredAccounts.json ファイルに保存されています) にアクセスできます。

このファイルにはユーザーのキーが暗号化された形式で保存されていて、別のコンピュータで使用することはできません。これは、AWS Tools for PowerShell が認証情報プロファイルを検索する最初のファイルであり、AWS Tools for PowerShell が認証情報プロファイルを保存するファイルでもあります。AWS SDK for .NET 認証情報ストアファイルの詳細については、「AWS 認証情報の設定」を参照してください。Tools for Windows PowerShell モジュールでは、他のファイルまたは場所への認証情報の書き込みを現在サポートしていません。

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

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

以下のスクリプトの例は、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 オペレーティングシステムでの [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