外部プロセスからの一時的な認証情報をロードする - AWS SDK for Java 2.x

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

外部プロセスからの一時的な認証情報をロードする

警告

以下では、外部プロセスから一時的な認証情報を調達する方法について説明します。これは危険な場合があるため、注意して進めてください。可能であれば、他の認証情報プロバイダーの利用をお勧めします。このオプションを使用する場合は、使用しているオペレーティングシステムのセキュリティ上のベストプラクティスに従って、config ファイルができるだけロックされていることを確認する必要があります。

カスタム認証情報ツールが StdErr に秘密情報を書き込まないようにしてください。SDKs および AWS CLI は、このような情報をキャプチャしてログに記録し、許可されていないユーザーに公開する可能性があります。

SDK for Java 2.x を使用すると、カスタムユースケースの外部プロセスから一時的な認証情報を取得できます。この機能を設定するには、次の 2 つの方法があります。

credential_process 設定を使用する

一時的な認証情報を提供する方法がある場合は、その credential_process 設定を config ファイル内のプロファイル定義の一部として追加することで統合できます。指定する値には、コマンドファイルへのフルパスを使用する必要があります。ファイルパスにスペースが含まれている場合は、引用符で囲む必要があります。

SDK は指定されたとおりにコマンドを呼び出し、 から JSON データを読み取りますstdout

次の例は、スペースを含まないファイルパスとスペースを含むファイルパスにこの設定を使用する方法を示しています。

Linux/macOS
ファイルパス内にスペースを含まない
[profile process-credential-profile] credential_process = /path/to/credential/file/credential_file.sh --custom-command custom_parameter
ファイルパス内のスペースを含む
[profile process-credential-profile] credential_process = "/path/with/space to/credential/file/credential_file.sh" --custom-command custom_parameter
Windows
ファイルパス内にスペースを含まない
[profile process-credential-profile] credential_process = C:\Path\To\credentials.cmd --custom_command custom_parameter
ファイルパス内のスペースを含む
[profile process-credential-profile] credential_process = "C:\Path\With Space To\credentials.cmd" --custom_command custom_parameter

次のコードスニペットは、process-credential-profile というプロファイルの一部として定義された一時的な認証情報を使用するサービスクライアントを構築する方法を示しています。

Region region = Region.US_WEST_2; S3Client s3Client = S3Client.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create("process-credential-profile")) .build();

一時的な認証情報のソースとして外部プロセスを使用する方法の詳細については、 AWS SDKs and Tools リファレンスガイドのプロセス認証情報セクションを参照してください。

ProcessCredentialsProvider を使用する

config ファイルで設定を使用する代わりに、SDK を使用して Java を使用して一時的な認証情報ProcessCredentialsProviderをロードできます。

以下の例は、ProcessCredentialsProvider を使用して外部プロセスを指定する方法と、一時的な認証情報を使用するサービスクライアントを設定する方法のさまざまなバージョンを示しています。

Linux/macOS
ファイルパス内にスペースを含まない
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("/path/to/credentials.sh optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();
ファイルパス内のスペースを含む
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("/path\\ with\\ spaces\\ to/credentials.sh optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();
Windows
ファイルパス内にスペースを含まない
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("C:\\Path\\To\\credentials.exe optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();
ファイルパス内のスペースを含む
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("\"C:\\Path\\With Spaces To\\credentials.exe\" optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();

認証に IAM Roles Anywhere を使用する

IAM Roles Anywhere は、 の外部で実行 AWS のサービス されているワークロードの一時的な AWS 認証情報を取得できる です AWS。これにより、オンプレミスやその他のクラウド環境から AWS リソースへの安全なアクセスが可能になります。

IAM Roles Anywhere でリクエストを認証する前に、まず必要な情報を収集し、認証情報ヘルパーツールをダウンロードする必要があります。IAM Roles Anywhere ユーザーガイドの開始手順に従うことで、必要なアーティファクトを作成できます。

SDK for Java には、IAM Roles Anywhere から一時的な認証情報を取得する専用の認証情報プロバイダーはありませんが、認証情報ヘルパーツールとオプションの 1 つを使用して、外部プロセスから認証情報を取得できます。

プロファイルで credential_process設定を使用する

共有AWS設定ファイルの次のスニペットは、 という名前のプロファイルを示しています。 は credential_process設定roles_anywhereを使用します。

[profile roles_anywhere] credential_process = ./aws_signing_helper credential-process \ --certificate /path/to/certificate \ --private-key /path/to/private-key \ --trust-anchor-arn arn:aws:rolesanywhere:region:account:trust-anchor/TA_ID \ --profile-arn arn:aws:rolesanywhere:region:account:profile/PROFILE_ID \ --role-arn arn:aws:iam::account:role/role-name-with-path

すべてのアーティファクトをアセンブルした後、赤で表示されているテキストを値に置き換える必要があります。設定の最初の要素である はaws_signing_helper、認証情報ヘルパーツールの実行ファイルであり、 コマンドcredential-processです。

次のコードに示すように、roles_anywhereプロファイルを使用するようにサービスクライアントを設定すると、SDK は一時的な認証情報をキャッシュし、有効期限が切れる前に更新します。

S3Client s3Client = S3Client.builder() .credentialsProvider(ProfileCredentialsProvider.builder() .profileName("roles_anywhere").build()) .build();

を設定する ProcessCredentialsProvider

次に示すように、プロファイル設定を使用するProcessCredentialsProvider代わりに、 でコードのみのアプローチを使用できます。

ProcessCredentialsProvider processCredentialsProvider = ProcessCredentialsProvider.builder() .command(""" ./aws_signing_helper credential-process \ --certificate /path/to/certificate \ --private-key /path/to/private-key \ --trust-anchor-arn arn:aws:rolesanywhere:region:account:trust-anchor/TA_ID \ --profile-arn arn:aws:rolesanywhere:region:account:profile/PROFILE_ID \ --role-arn arn:aws:iam::account:role/role-name-with-path """).build(); S3Client s3Client = S3Client.builder() .credentialsProvider(processCredentialsProvider) .build();

すべてのアーティファクトをアセンブルした後、赤で表示されているテキストを値に置き換えます。