IMDS 凭证提供者
注意
如需获得相关帮助,以了解设置页面的布局或解释后面的 Amazon SDK 和工具支持表,请参阅了解本指南的设置页面。
实例元数据服务(IMDS)提供有关您的实例的数据,您可以用它来配置或管理正在运行的实例。有关可用数据的更多信息,请参阅《Amazon EC2 用户指南》中的使用实例元数据。Amazon EC2 提供了可供实例使用的本地端点,该端点可以为实例提供各种信息。如果实例附加了角色,则它可以提供一组对该角色有效的凭证。SDK 可以使用该端点来解析作为其默认凭证提供者链一部分的凭证。默认情况下,使用实例元数据服务版本 2 (IMDSv2),即使用会话令牌的更安全的 IMDS 版本。如果由于不可重试的情况(HTTP 错误代码 403、404、405)而失败,则使用 IMDSv1 作为回退。
使用以下方法配置此功能:
AWS_EC2_METADATA_DISABLED- 环境变量-
是否尝试使用 Amazon EC2 实例元数据服务(IMDS)来获取凭证。
默认值:。
false有效值:
-
true– 请勿使用 IMDS 来获取凭证。 -
false– 使用 IMDS 来获取凭证。
-
ec2_metadata_v1_disabled- 共享 Amazonconfig文件设置AWS_EC2_METADATA_V1_DISABLED- 环境变量aws.disableEc2MetadataV1:JVM 系统属性,仅适用于 Java/Kotlin-
如果 IMDSv2 出现故障,是否使用实例元数据服务版本 1(IMDSv1)作为备用方法。
注意
新的 SDK 不支持 IMDSv1,因此不支持此设置。有关详细信息,请见表 Amazon SDK 和工具支持。
默认值:。
false有效值:
-
true– 请勿将 IMDSv1 用作回退。 -
false– 将 IMDSv1 用作回退。
-
ec2_metadata_service_endpoint- 共享 Amazonconfig文件设置AWS_EC2_METADATA_SERVICE_ENDPOINT- 环境变量aws.ec2MetadataServiceEndpoint:JVM 系统属性,仅适用于 Java/Kotlin-
IMDS 的端点。此值将覆盖 Amazon SDK 和工具搜索 Amazon 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- 共享 Amazonconfig文件设置AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE- 环境变量aws.ec2MetadataServiceEndpointMode:JVM 系统属性,仅适用于 Java/Kotlin-
IMDS 的端点模式。
默认值:
IPv4。有效值:、
IPv4。IPv6
注意
IMDS 凭证提供者是 了解默认凭证提供者链 的一部分。但是,只有在本系列中的其他几个提供者之后,才会检查 IMDS 凭证提供者。因此,如果您希望您的程序使用此提供者的凭证,则必须从配置中删除其他有效的凭证提供者或使用其他配置文件。或者,与其依赖凭证提供者链自动发现哪个提供者返回了有效凭证,不如在代码中指定使用的 IMDS 凭证提供者。创建服务客户端时,可直接指定凭证来源。
IMDS 凭证的安全性
默认情况下,当 Amazon SDK 未配置有效凭证时,SDK 将尝试使用 Amazon EC2 实例元数据服务(IMDS)来检索 Amazon 角色的凭证。通过将 AWS_EC2_METADATA_DISABLED 环境变量设置为 true,可以禁用此行为。这样可以防止不必要的网络活动,并增强不可信网络的安全性,此类网络可能会模拟 Amazon EC2 实例元数据服务。
注意
无论这些设置如何,配置了有效凭证的 Amazon SDK 客户端都不会使用 IMDS 检索凭证。
禁用 Amazon EC2 IMDS 凭证
如何设置此环境变量取决于所使用的操作系统以及您是否希望更改保持不变。
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 才能使更改生效。
Amazon SDK 和工具支持
以下 SDK 支持本主题中所述的功能和设置。所有部分例外情况均已注明。任何 JVM 系统属性设置都仅支持 适用于 Java 的 Amazon SDK 和 适用于 Kotlin 的 Amazon SDK。
| SDK | 支持 | 备注或更多信息 |
|---|---|---|
| Amazon CLI v2 | 是 | |
| 适用于 C++ 的 SDK | 是 | |
| 适用于 Go V2 (1.x) 的 SDK |
是 | |
| 适用于 Go 1.x(V1)的 SDK | 是 | 要使用共享 config 文件设置,必须开启从配置文件加载的功能;请参阅会话。 |
| 适用于 Java 2.x 的 SDK | 是 | |
| 适用于 Java 1.x 的 SDK | 部分 | JVM 系统属性:使用 com.amazonaws.sdk.disableEc2MetadataV1 而不是 aws.disableEc2MetadataV1;不支持 aws.ec2MetadataServiceEndpoint 和 aws.ec2MetadataServiceEndpointMode。 |
| 适用于 JavaScript 3.x 的 SDK | 是 | |
| 适用于 JavaScript 2.x 的 SDK | 是 | |
| 适用于 Kotlin 的 SDK | 是 | 请勿使用 IMDSv1 回退。 |
| 适用于 .NET 4.x 的 SDK | 是 | |
| 适用于 .NET 3.x 的 SDK | 是 | |
| 适用于 PHP 3.x 的 SDK | 是 | |
| 适用于 Python (Boto3) 的 SDK |
是 | |
| 适用于 Ruby 3.x 的 SDK | 是 | |
| 适用于 Rust 的 SDK | 是 | 请勿使用 IMDSv1 回退。 |
| 适用于 Swift 的 SDK | 是 | |
| Tools for PowerShell V5 | 是 | 您可以使用 [Amazon.Util.EC2InstanceMetadata]::EC2MetadataV1Disabled = $true 在代码中显式禁用 IMDSv1 回退。 |
| Tools for PowerShell V4 | 是 | 您可以使用 [Amazon.Util.EC2InstanceMetadata]::EC2MetadataV1Disabled = $true 在代码中显式禁用 IMDSv1 回退。 |