本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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
- 共用 AWSconfig
檔案設定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
- 共用 AWSconfig
檔案設定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
- 共用 AWSconfig
檔案設定AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE
- 環境變數aws.ec2MetadataServiceEndpointMode
- JVM系統屬性:僅限 Java/Kotlin-
的端點模式IMDS。
預設值:
IPv4
。有效值:
IPv4
、IPv6
。
注意
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.disableEc2MetadataV1 ;aws.ec2MetadataServiceEndpoint aws.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 。 |