AWS SDK for Java 2.x を使用した外部プロセスからの認証情報のロード - AWS SDK for Java 2.x

AWS SDK for Java 2.x を使用した外部プロセスからの認証情報のロード

警告

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

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

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

credential_process 設定を使用する

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

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

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

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 リファレンスガイド」の「process credentials」セクションを参照してください。

ProcessCredentialsProvider を使用する

config ファイル内の設定を使用する代わりに、SDK の ProcessCredentialsProvider を使用して Java を使用して一時的な認証情報を読み込むこともできます。

以下の例は、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 から一時的な認証情報を取得するための専用の認証情報プロバイダーはありませんが、認証情報ヘルパーツールと、外部プロセスから認証情報を取得するいずれかのオプションを使用できます。

プロファイルでの 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();

すべてのアーティファクトを集めた後、赤で表示されているテキストを自分の値に置き換えます。