IMDS 憑證提供者 - AWS SDKs和工具

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

IMDS 憑證提供者

Instance Metadata Service (IMDS) 提供執行個體的資料,您可以用來設定或管理執行中的執行個體。如需可用資料的詳細資訊,請參閱 Amazon EC2使用者指南 中的使用執行個體中繼資料。Amazon EC2提供可供執行個體使用的本機端點,可為執行個體提供各種位元的資訊。如果執行個體已連接角色,則可以提供一組對該角色有效的憑證。SDKs 可以使用該端點來解析憑證,作為其預設憑證提供者鏈 的一部分。預設會使用執行個體中繼資料服務第 2 版 (IMDSv2),IMDS這是使用工作階段權杖更安全的 版本。如果由於無法重試的條件 (HTTP錯誤碼 403、404、405) 而失敗,IMDSv1則會用作退避。

使用下列各項設定此功能:

AWS_EC2_METADATA_DISABLED - 環境變數

是否嘗試使用 Amazon EC2 Instance Metadata Service (IMDS) 來取得憑證。

預設值false

有效值

  • true – 請勿使用 IMDS 取得憑證。

  • false – 使用 IMDS 取得憑證。

ec2_metadata_v1_disabled - 共用 AWS config檔案設定
AWS_EC2_METADATA_V1_DISABLED - 環境變數
aws.disableEc2MetadataV1 - JVM系統屬性:僅限 Java/Kotlin

如果IMDSv2失敗,是否使用執行個體中繼資料服務第 1 版 (IMDSv1) 作為後援。

注意

新 SDKs 不支援IMDSv1,因此不支援此設定。如需詳細資訊,請參閱資料表 與 的相容性 AWS SDKs

預設值false

有效值

  • true – 請勿IMDSv1用作退避。

  • false – IMDSv1用作後援。

ec2_metadata_service_endpoint - 共用 AWS config檔案設定
AWS_EC2_METADATA_SERVICE_ENDPOINT - 環境變數
aws.ec2MetadataServiceEndpoint - JVM系統屬性:僅限 Java/Kotlin

的端點IMDS。此值會覆寫 和工具將搜尋 AWS SDKsAmazon EC2執行個體中繼資料的預設位置。

預設值:如果 ec2_metadata_service_endpoint_mode等於 IPv4,則預設端點為 http://169.254.169.254。如果 ec2_metadata_service_endpoint_mode等於 IPv6,則預設端點為 http://[fd00:ec2::254]

有效值:有效 URI。

ec2_metadata_service_endpoint_mode - 共用 AWS config檔案設定
AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE - 環境變數
aws.ec2MetadataServiceEndpointMode - JVM系統屬性:僅限 Java/Kotlin

的端點模式IMDS。

預設值:IPv4

有效值:IPv4IPv6

注意

IMDS 憑證提供者是 的一部分了解憑證提供者鏈。不過,只有在此系列中的其他幾個提供者之後,才會檢查IMDS憑證提供者。因此,如果您希望程式使用此提供者的憑證,您必須從組態中移除其他有效的憑證提供者,或使用不同的設定檔。或者,不要依賴憑證提供者鏈自動探索哪個提供者傳回有效的憑證,而是在程式碼中指定IMDS憑證提供者的使用。您可以在建立服務用戶端時直接指定憑證來源。

IMDS 憑證的安全性

根據預設,當 AWS SDK未設定有效憑證時, SDK會嘗試使用 Amazon EC2 Instance Metadata Service (IMDS) 來擷取 AWS 角色的憑證。將AWS_EC2_METADATA_DISABLED環境變數設定為 ,即可停用此行為true。這可防止不必要的網路活動,並增強可能模擬 Amazon EC2 Instance Metadata Service 的不受信任網路的安全性。

注意

AWS SDK 設定有效憑證的用戶端永遠不會用來IMDS擷取憑證,無論這些設定為何。

停用 Amazon EC2IMDS憑證

設定此環境變數的方式取決於正在使用的作業系統,以及您是否希望變更持續存在。

Linux 和 macOS

使用 Linux 或 macOS 的客戶可以使用下列命令來設定此環境變數:

$ export AWS_EC2_METADATA_DISABLED=true

如果您希望此設定在多個 Shell 工作階段和系統重新啟動之間持續存在,您可以將上述命令新增至 Shell 設定檔檔案,例如 .bash_profile.zsh_profile.profile

Windows

使用 Windows 的客戶可以使用下列命令來設定此環境變數:

$ set AWS_EC2_METADATA_DISABLED=true

如果您希望此設定在多個 Shell 工作階段和系統重新啟動之間持續存在,則可以改用下列命令:

$ setx AWS_EC2_METADATA_DISABLED=true
注意

setx 命令不會將值套用至目前的 Shell 工作階段,因此您需要重新載入或重新開啟 Shell,變更才會生效。

與 的相容性 AWS SDKs

以下SDKs支援本主題所述的功能和設定。會記下任何部分例外狀況。 AWS SDK for Java 和 適用於 Kotlin 的 AWS SDK 僅支援任何JVM系統屬性設定。

SDK 支援 備註或更多資訊
AWS CLI v2
SDK 適用於 C++
SDK for Go V2 (1.x)
SDK for Go 1.x (V1) 若要使用共用config檔案設定,您必須開啟從組態檔案載入;請參閱工作階段
SDK 適用於 Java 2.x
SDK 適用於 Java 1.x 部分 JVM 系統屬性:使用 com.amazonaws.sdk.disableEc2MetadataV1而非 aws.disableEc2MetadataV1aws.ec2MetadataServiceEndpointaws.ec2MetadataServiceEndpointMode不支援 和 。
SDK 適用於 JavaScript 3.x
SDK 適用於 JavaScript 2.x
SDK 適用於 Kotlin 不使用退IMDSv1避。
SDK 適用於 。NET 3.x
SDK 適用於 PHP 3.x
SDK for Python (Boto3)
SDK 適用於 Ruby 3.x
SDK for Rust 不使用退IMDSv1避。
SDK 適用於 Swift
適用於 的工具 PowerShell 您可以使用 明確停用程式碼中的退IMDSv1信[Amazon.Util.EC2InstanceMetadata]::EC2MetadataV1Disabled = $true