

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# IMDS 凭证提供者
<a name="feature-imds-credentials"></a>

**注意**  
如需了解设置页面布局或解释后面的 Support b **y Amazon SDKs 和 tools** 表格的帮助，请参阅[了解本指南的设置页面](settings-reference.md#settingsPages)。

实例元数据服务（IMDS）提供有关您的实例的数据，您可以用它来配置或管理正在运行的实例。有关可用数据的更多信息，请参阅《Amazon EC2 用户指南》中的[使用实例元数据](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)**。Amazon EC2 提供了可供实例使用的本地端点，该端点可以为实例提供各种信息。如果实例附加了角色，则它可以提供一组对该角色有效的凭证。 SDKs 可以使用该端点来解析作为其[默认凭证提供程序链](standardized-credentials.md#credentialProviderChain)一部分的证书。默认使用实例元数据服务版本 2 (IMDSv2)，即使用会话令牌的更安全的 IMDS 版本。如果由于不可重试的情况（HTTP 错误代码 403、404、405）而失败，则使用后备方法。 IMDSv1 

使用以下方法配置此功能：

**`AWS_EC2_METADATA_DISABLED` - 环境变量**  
是否尝试使用 Amazon EC2 实例元数据服务（IMDS）来获取凭证。  
**默认值：**`false`。  
**有效值：**  
+ **`true`** – 请勿使用 IMDS 来获取凭证。
+ **`false`** – 使用 IMDS 来获取凭证。

**`ec2_metadata_v1_disabled`-共享 Amazon `config`文件设置`AWS_EC2_METADATA_V1_DISABLED` - 环境变量`aws.disableEc2MetadataV1`-JVM 系统属性：仅限 Java/Kotlin **  
如果 IMDSv2 失败，是否使用实例元数据服务版本 1 (IMDSv1) 作为后备方案。  
New SDKs 不支持 IMDSv1 ，因此不支持此设置。有关详细信息，请见表 [Support by Amazon SDKs and too](#feature-imds-credentials-sdk-compat)。
**默认值：**`false`。  
**有效值：**  
+ **`true`**— 请勿 IMDSv1 用作备用。
+ **`false`**— IMDSv1 用作备用。

**`ec2_metadata_service_endpoint`-共享 Amazon `config`文件设置`AWS_EC2_METADATA_SERVICE_ENDPOINT` - 环境变量`aws.ec2MetadataServiceEndpoint`-JVM 系统属性：仅限 Java/Kotlin **  
IMDS 的端点。此值将覆盖软件开发工具包和 Amazon 工具用于搜索 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`-共享 Amazon `config`文件设置`AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE` - 环境变量`aws.ec2MetadataServiceEndpointMode`-JVM 系统属性：仅限 Java/Kotlin **  
IMDS 的端点模式。  
**默认值：**`IPv4`。  
**有效值：**`IPv4`、`IPv6`。

**注意**  
IMDS 凭证提供者是 [了解默认凭证提供者链](standardized-credentials.md#credentialProviderChain) 的一部分。但是，只有在本系列中的其他几个提供者之后，才会检查 IMDS 凭证提供者。因此，如果您希望您的程序使用此提供者的凭证，则必须从配置中删除其他有效的凭证提供者或使用其他配置文件。或者，与其依赖凭证提供者链自动发现哪个提供者返回了有效凭证，不如在代码中指定使用的 IMDS 凭证提供者。创建服务客户端时，可直接指定凭证来源。

## IMDS 凭证的安全性
<a name="feature-imds-credentials-sdk-security"></a>

默认情况下，当 Amazon 软件开发工具包未配置有效凭证时，软件开发工具包将尝试使用 Amazon EC2 实例元数据服务 (IMDS) 来检索 Amazon 角色的证书。通过将 `AWS_EC2_METADATA_DISABLED` 环境变量设置为 `true`，可以禁用此行为。这样可以防止不必要的网络活动，并增强不可信网络的安全性，此类网络可能会模拟 Amazon EC2 实例元数据服务。

**注意**  
Amazon 无论这些设置如何，配置了有效凭证的 SDK 客户端都不会使用 IMDS 检索凭证。

### 禁用 Amazon EC2 IMDS 凭证
<a name="feature-imds-credentials-disabling"></a>

如何设置此环境变量取决于所使用的操作系统以及您是否希望更改保持不变。

#### Linux 和 macOS
<a name="feature-imds-credentials-disabling-unix"></a>

使用 Linux 或 macOS 的客户可以使用以下命令设置此环境变量：

```
$ export AWS_EC2_METADATA_DISABLED=true
```

如果您希望此设置在多个 shell 会话和系统重启中保持不变，则可以将上述命令添加到您的 shell 配置文件中，例如 `.bash_profile`、`.zsh_profile` 或 `.profile`。

#### Windows
<a name="feature-imds-credentials-disabling-windows"></a>

使用 Windows 的客户可以使用以下命令设置此环境变量：

```
$ set AWS_EC2_METADATA_DISABLED=true
```

如果您希望此设置在多个 shell 会话和系统重启中保持不变，则可以改用以下命令：

```
$ setx AWS_EC2_METADATA_DISABLED=true
```

**注意**  
该 **setx** 命令不会将该值应用于当前的 shell 会话，因此您需要重新加载或重新打开 shell 才能使更改生效。

## Support by Amazon SDKs and too
<a name="feature-imds-credentials-sdk-compat"></a>

以下内容 SDKs 支持本主题中描述的功能和设置。所有部分例外情况均已注明。 适用于 Java 的 Amazon SDK 和 适用于 Kotlin 的 Amazon SDK 唯一支持任何 JVM 系统属性设置。


| SDK | 支持 | 备注或更多信息 | 
| --- | --- | --- | 
| [Amazon CLI](https://docs.amazonaws.cn/cli/latest/userguide/) v2 | 是 |  | 
| [适用于 C\$1\$1 的 SDK](https://docs.amazonaws.cn/sdk-for-cpp/latest/developer-guide/) | 是 |  | 
| [适用于 Go V2 (1.x) 的 SDK](https://docs.amazonaws.cn/sdk-for-go/v2/developer-guide/) | 是 |  | 
| [适用于 Go 1.x（V1）的 SDK](https://docs.amazonaws.cn/sdk-for-go/latest/developer-guide/) | 是 | 要使用共享 config 文件设置，必须开启从配置文件加载的功能；请参阅[会话](https://docs.amazonaws.cn/sdk-for-go/api/aws/session/)。 | 
| [适用于 Java 2.x 的 SDK](https://docs.amazonaws.cn/sdk-for-java/latest/developer-guide/) | 是 |  | 
| [适用于 Java 1.x 的 SDK](https://docs.amazonaws.cn/sdk-for-java/v1/developer-guide/) | 部分 | JVM 系统属性：使用 com.amazonaws.sdk.disableEc2MetadataV1 而不是 aws.disableEc2MetadataV1；不支持 aws.ec2MetadataServiceEndpoint 和 aws.ec2MetadataServiceEndpointMode。 | 
| [适用于 JavaScript 3.x 的软件开发工具包](https://docs.amazonaws.cn/sdk-for-javascript/latest/developer-guide/) | 是 |  | 
| [适用于 JavaScript 2.x 的 SDK](https://docs.amazonaws.cn/sdk-for-javascript/v2/developer-guide/) | 是 |  | 
| [适用于 Kotlin 的 SDK](https://docs.amazonaws.cn/sdk-for-kotlin/latest/developer-guide/) | 是 | 不使用 IMDSv1 后备。 | 
| [适用于.NET 4.x 的 SDK](https://docs.amazonaws.cn/sdk-for-net/latest/developer-guide/) | 是 |  | 
| [适用于 .NET 3.x 的 SDK](https://docs.amazonaws.cn/sdk-for-net/v3/developer-guide/) | 是 |  | 
| [适用于 PHP 3.x 的 SDK](https://docs.amazonaws.cn/sdk-for-php/latest/developer-guide/) | 是 |  | 
| [适用于 Python (Boto3) 的 SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) | 是 |  | 
| [适用于 Ruby 3.x 的 SDK](https://docs.amazonaws.cn/sdk-for-ruby/latest/developer-guide/) | 是 |  | 
| [适用于 Rust 的 SDK](https://docs.amazonaws.cn/sdk-for-rust/latest/dg/) | 是 | 不使用 IMDSv1 后备。 | 
| [适用于 Swift 的 SDK](https://docs.amazonaws.cn/sdk-for-swift/latest/developer-guide/) | 是 |  | 
| [适用于 PowerShell V5 的工具](https://docs.amazonaws.cn/powershell/latest/userguide/) | 是 | 您可以使用在代码中显式禁用 IMDSv1 回退。[Amazon.Util.EC2InstanceMetadata]::EC2MetadataV1Disabled = \$1true | 
| [适用于 PowerShell V4 的工具](https://docs.amazonaws.cn/powershell/v4/userguide/) | 是 | 您可以使用在代码中显式禁用 IMDSv1 回退。[Amazon.Util.EC2InstanceMetadata]::EC2MetadataV1Disabled = \$1true | 