本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
閱讀 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) – 工作階段導向方法
根據預設,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 角色認證。