本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適用於 Java 的 SDK 2.x 在 Amazon EC2 上讀取 IAM 角色憑證
您可以使用 IAM 角色來管理在 EC2 執行個體上執行之應用程式的臨時登入資料,以及提出 AWS CLI 或 AWS API 請求。這是在 EC2 執行個體內儲存存取金鑰的較好方式。若要將 AWS 角色指派給 EC2 執行個體並將其提供給其所有應用程式,您可以建立連接至執行個體的執行個體描述檔。執行個體設定檔包含該角色,並且可讓 EC2 執行個體上執行的程式取得臨時憑證。如需詳細資訊,請參閱《IAM 使用者指南》中的使用 IAM 角色來授予許可權給 Amazon EC2 執行個體上執行的應用程式。
本主題提供如何設定您的 Java 應用程式以在 EC2 執行個體上執行,並讓 AWS SDK for Java 2.x 取得 IAM 角色登入資料的相關資訊。
從環境取得 IAM 角色登入資料
如果您的應用程式使用 create
方法 (或 builder().build()
方法) 建立 AWS 服務用戶端,適用於 Java 的 開發套件會使用預設憑證提供者鏈結。預設登入資料提供者鏈結會搜尋執行環境,尋找開發套件可以交換臨時登入資料的組態元素。中的預設登入資料提供者鏈結 AWS SDK for Java 2.x 本節說明完整的搜尋程序。
預設提供者鏈中的最後一個步驟僅在您的應用程式在 Amazon EC2 執行個體上執行時可用。在此步驟中,軟體開發套件會使用 InstanceProfileCredentialsProvider
來讀取 EC2 執行個體描述檔中定義的 IAM 角色。開發套件接著會取得該 IAM 角色的臨時登入資料。
雖然這些登入資料是暫時的,最終會過期,但 InstanceProfileCredentialsProvider
會定期為您重新整理這些登入資料,以便繼續允許存取 AWS。
以程式設計方式取得 IAM 角色登入資料
做為最終在 EC2 InstanceProfileCredentialsProvider
上使用 的預設登入資料提供者鏈的替代方案,您可以使用 明確設定服務用戶端InstanceProfileCredentialsProvider
。此方法會顯示在下列程式碼片段中。
S3Client s3 = S3Client.builder() .credentialsProvider(InstanceProfileCredentialsProvider.create()) .build();
安全地取得 IAM 角色登入資料
根據預設,EC2 執行個體會執行 IMDS (Instance Metadata Service),允許 SDK InstanceProfileCredentialsProvider
存取資訊,例如已設定的 IAM 角色。EC2 執行個體預設會執行兩個版本的 IMDS:
-
執行個體中繼資料服務第 1 版 (IMDSv1) – 請求/回應方法
-
執行個體中繼資料服務第 2 版 (IMDSv2) – 工作階段導向方法
IMDSv2 是比 IMDSv1 更安全的方法
根據預設,Java 開發套件會先嘗試 IMDSv2 來取得 IAM 角色,但如果失敗,則會嘗試 IMDSv1。不過,由於 IMDSv1 較不安全, AWS 因此建議僅使用 IMDSv2,並停用 SDK 來嘗試 IMDSv1。
若要使用更安全的方法,請透過提供下列其中一個值為 的設定,停用 SDK 以停止使用 IMDSv1true
。
-
環境變數:
AWS_EC2_METADATA_V1_DISABLED
-
JVM 系統屬性:aws。
disableEc2MetadataV1
-
共用組態檔案設定:
ec2_metadata_v1_disabled
當其中一個設定設為 時true
,如果初始 IMDSv2 呼叫失敗,開發套件不會使用 IMDSv1 載入 IMDSv2角色登入資料。