閱讀 IAM 角色登入資料,請 Amazon EC2 - AWS SDK for Java 2.x

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

閱讀 IAM 角色登入資料,請 Amazon EC2

您可以使用 IAM 角色管理在 EC2 執行個體上執行的應用程式以及發出 AWS CLI 或 AWS API 請求的臨時登入資料。這是在 EC2 執行個體內存放存取金鑰的較好方式。若要將 AWS 角色指派給 EC2 執行個體並提供給其所有應用程式,請建立連接至執行個體的執行個體設定檔。執行個體設定檔包含該角色,並且可讓 EC2 執行個體上執行的程式取得臨時性憑證。如需詳細資訊,請參閱《IAM 使用者指南》中的利用 IAM 角色來授予許可給 Amazon EC2 執行個體上執行的應用程式

本主題提供有關如何將 Java 應用程式設定為在 EC2 執行個體上執行,以及如何讓 Java SDK 取得 IAM 角色登入資料的相關資訊。

從環境取得 IAM 角色登入資料

如果您的應用程式使用create方法 (或方builder().build()法) 建立 AWS 服務用戶端,Java 的 SDK 會使用預設的認證提供者鏈結。預設憑證提供者鏈會在執行環境中搜尋 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 (執行個體中繼資料服務),InstanceProfileCredentialsProvider讓 SDK 存取已設定的 IAM 角色等資訊。EC2 執行個體預設會執行兩個版本的 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 載入 IMDS 角色認證。