プロセス認証情報プロバイダー - AWS SDK とツール

プロセス認証情報プロバイダー

注記

設定ページのレイアウトを理解したり、以下の AWS SDK とツールによるサポートの表を解釈したりするには、「このガイドの設定ページについて」を参照してください。

SDK には、カスタムユースケースに合わせて認証情報プロバイダーチェーンを拡張する方法の機能があります。このプロバイダーは、オンプレミスの認証情報ストアからの認証情報の取得やオンプレミスの ID プロバイダーとの統合など、カスタム実装を提供するために使用できます。

例えば、IAM Roles Anywhere は credential_process を使用して、アプリケーションに代わって一時的な認証情報を取得します。この用途に合わせて credential_process を設定するには、 IAM Roles Anywhere を使用して AWS SDK とツールを認証する を参照してください。

注記

外部プロセスから認証情報を取得する方法を以下に示します。これは、AWS の外部でソフトウェアを実行している場合に使用できます。AWS コンピューティングリソース上に構築する場合は、他の認証情報プロバイダーを使用します。このオプションを使用する場合は、使用しているオペレーティングシステムのセキュリティ上のベストプラクティスに従って、設定ファイルができるだけロックされていることを確認する必要があります。カスタム認証情報ツールが機密情報を StdErr に書き込まないよう確認してください。SDK および AWS CLI がそのような情報をキャプチャしてログに記録し、不正ユーザーに情報を公開する可能性があるためです。

この機能を設定するには、以下のように使用します。

credential_process - AWS config 共有ファイル設定

使用する認証情報を生成あるいは取得するために ユーザーに代わって SDK またはツールが実行する外部のコマンドを指定します。この設定では、SDK が呼び出すプログラム/コマンドの名前を指定します。SDK がプロセスを呼び出すと、プロセスが JSON データを stdout に書き込むのを待ちます。カスタムプロバイダーは、特定の形式で情報を返す必要があります。この情報には、 SDK またはツールがユーザーを認証するために使用できる認証情報が含まれています。

注記

プロセス認証情報プロバイダーは 認証情報プロバイダーチェーンを理解する の一部です。ただし、プロセス認証情報プロバイダーは、このシリーズの他のいくつかのプロバイダーの後にのみチェックされます。そのため、プログラムでこのプロバイダーの認証情報を使用する場合は、設定から他の有効な認証情報プロバイダーを削除するか、別のプロファイルを使用する必要があります。あるいは、認証情報プロバイダーチェーンに頼ってどのプロバイダーが有効な認証情報を返すかを自動的に検出する代わりに、プロセス認証情報プロバイダーの使用をコードで指定してください。サービスクライアントを作成するときに、認証情報ソースを直接指定できます。

認証情報プログラムへのパスの指定

設定の値は、SDK または開発ツールがユーザーに代わって実行するプログラムへのパスを含む文字列です。

  • パスとファイル名には、A~Z、a~z、0~9、ハイフン (-)、アンダースコア (_)、ピリオド (.)、フォワードスラッシュ (/)、バックスラッシュ (\)、スペースのみを使用できます。

  • パスまたはファイル名にスペースが含まれている場合は、完全なパスとファイル名を二重引用符 (" ") で囲みます。

  • パラメータ名またはパラメータ値にスペースが含まれている場合は、その要素を二重引用符 (" ") で囲みます。囲むのは、名前または値のみであり、そのペアではありません。

  • 文字列に環境変数を含めないでください。例えば、$HOME または %USERPROFILE% を含めることはできません。

  • ホームフォルダを ~ として指定しないでください。* フルパスまたはベースファイル名を指定する必要があります。ベースファイル名がある場合、システムは PATH 環境変数で指定されたフォルダー内でプログラムを検索しようとします。次のようにパスはオペレーティングシステムによって異なります。

    次の例は、Linux/macOS上の config 共有ファイルに credential_process を設定する方法を示しています。

    credential_process = "/path/to/credentials.sh" parameterWithoutSpaces "parameter with spaces"

    次の例は、Windows 上の config 共有ファイルに credential_process を設定する方法を示しています。

    credential_process = "C:\Path\To\credentials.cmd" parameterWithoutSpaces "parameter with spaces"
  • 以下の専用プロファイル内で指定できます。

    [profile cred_process] credential_process = /Users/username/process.sh region = us-east-1

認証情報プログラムからの有効な出力

SDK はプロファイルで指定されたようにコマンドを実行し、次に標準出力からデータを読み取ります。スクリプトであるかバイナリープログラムであるかに関わらず、指定するコマンドは、以下の構文と一致する JSON 出力を STDOUT に生成する必要があります。

{ "Version": 1, "AccessKeyId": "an AWS access key", "SecretAccessKey": "your AWS secret access key", "SessionToken": "the AWS session token for temporary credentials", "Expiration": "RFC3339 timestamp for when the credentials expire" }
注記

本文書の執筆時点では、Version キーは 1 に設定する必要があります。構造が進化するため、時間の経過と共に増えていく可能性があります。

Expiration キーは、RFC3339 形式のタイムスタンプです。Expiration キーがツールの出力にない場合、SDK はこの認証情報が更新されない長期の認証情報であると判断します。それ以外の認証情報は一時的な認証情報と見なされ、有効期限が切れる前に credential_process を再実行して自動的に更新されます。

注記

SDK は、外部プロセスの認証情報をロールを引き受けるような認証情報としてキャッシュしません。キャッシュが必要な場合は、外部プロセス内で実装する必要があります。

外部プロセスはゼロ以外のリターンコードを返して、認証情報の取得時にエラーが発生したことを示すことができます。

AWS SDK とツールによるサポート

以下の SDK は、このトピックで説明する機能と設定をサポートします。部分的な例外があれば、すべて記載されています。JVM システムプロパティ設定は、AWS SDK for Java と AWS SDK for Kotlin でのみサポートされます。

SDK サポート 注意または詳細情報
AWS CLI v2 あり
SDK for C++ あり
SDK for Go V2 (1.x) あり
SDK for Go 1.x (V1) あり 共有 config ファイル設定を使用するには、設定ファイルからの読み込みを有効にする必要があります。「セッション」を参照してください。
SDK for Java 2.x あり
SDK for Java 1.x あり
SDK for JavaScript 3.x あり
SDK for JavaScript 2.x あり
SDK for Kotlin あり
SDK for .NET 4.x あり
SDK for .NET 3.x あり
SDK for PHP 3.x あり
SDK for Python (Boto3) あり
SDK for Ruby 3.x あり
SDK for Rust あり
SDK for Swift あり
Tools for PowerShell V5 あり
Tools for PowerShell V4 あり