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