翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
での IAM ロール認証情報の読み取り Amazon EC2
IAM ロールを使用して、EC2 インスタンスで実行され、 AWS CLI または AWS API リクエストを作成しているアプリケーションの一時的な認証情報を管理できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。EC2 インスタンスに AWS ロールを割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時的な認証情報を取得できます。詳細については、「IAM ユーザーガイド」の「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用して権限を付与する」を参照してください。
このトピックでは、EC2 インスタンスで実行するように Java アプリケーションをセットアップし、SDK for Java で IAM ロール認証情報を取得できるようにする方法について説明します。
環境から IAM ロールの認証情報を取得する
アプリケーションが create
メソッド (または builder().build()
メソッド) を使用して AWS サービスクライアントを作成する場合、SDK for Java はデフォルトの認証情報プロバイダーチェーン を使用します。デフォルトの認証情報プロバイダーチェーンは、SDK が一時的な認証情報と取引できる設定要素を実行環境を検索します。デフォルトの認証情報プロバイダーチェーン セクションでは、検索プロセス全体について説明します。
デフォルトのプロバイダーチェーンの最後のステップは、アプリケーションが Amazon EC2 インスタンスで実行されている場合にのみ使用できます。このステップでは、SDK は InstanceProfileCredentialsProvider
を使用して EC2 インスタンスプロファイルで定義されている IAM ロールを読み取ります。次に SDK はその IAM ロールの一時的な認証情報を取得します。
これらの認証情報は一時的なもので、最終的には失効しますが、InstanceProfileCredentialsProvider
によって定期的に更新されるため、 AWSにアクセスを許可し続けることができます。
IAM ロールの認証情報をプログラムで取得する
InstanceProfileCredentialsProvider
EC2 で を最終的に使用するデフォルトの認証情報プロバイダーチェーンの代わりに、 を使用してサービスクライアントを明示的に設定できますInstanceProfileCredentialsProvider
。このアプローチは次のスニペットに示されています。
S3Client s3 = S3Client.builder() .credentialsProvider(InstanceProfileCredentialsProvider.create()) .build();
IAM ロールの認証情報を安全に取得する
デフォルトでは、EC2 インスタンスは IMDS (インスタンスメタデータサービス) を実行します。これにより、SDK は設定された IAM ロールなどの情報InstanceProfileCredentialsProvider
にアクセスできます。EC2 インスタンスはデフォルトで 2 つのバージョンの IMDS を実行します。
-
インスタンスメタデータサービスバージョン 1 (IMDSv1) – リクエスト/レスポンスメソッド
-
インスタンスメタデータサービスバージョン 2 (IMDSv2) – セッション指向メソッド
IMDSv2 は IMDSv1 よりも安全なアプローチ
デフォルトでは、Java SDK はまず IMDSv2 を試行して IAM ロールを取得しますが、失敗した場合は IMDSv1 を試行します。ただし、IMDSv1 は安全性が低いため、 AWS では、IMDSv2 のみを使用し、SDK による IMDSv1 の試行を無効にすることをお勧めします。
より安全なアプローチを使用するには、次のいずれかの設定に の値を指定して、SDK による IMDSv1 の使用を無効にしますtrue
。
-
環境変数:
AWS_EC2_METADATA_V1_DISABLED
-
JVM システムプロパティ: aws。
disableEc2MetadataV1
-
共有設定ファイルの設定:
ec2_metadata_v1_disabled
これらの設定のいずれかを に設定した場合true
、最初の IMDSv2 呼び出しが失敗しても、SDK は IMDSv1 を使用して IMDSv2ロールの認証情報をロードしません。