

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

# 在 Lightsail 中访问实例元数据服务 (IMDS) 和用户数据
<a name="amazon-lightsail-instance-metadata"></a>

*实例元数据* 是有关您的实例的数据，可以用来配置或管理正在运行的实例。实例元数据分为几类，例如，主机名、事件和安全组。您也可以使用实例元数据访问您启动实例时指定的用户数据。例如，您可以指定参数以配置实例，或者包含简单的脚本。实例还可包括动态数据，例如启动实例时生成的实例身份文档。

**重要**  
虽然您只能从实例本身中访问实例元数据和用户数据，但并未使用身份验证或加密方法对数据进行保护。任何可以直接访问实例的人以及可能在实例上运行的任何软件都可以查看其元数据。因此，您不应将敏感数据（例如密码或长期保存的加密密钥）存储为用户数据。

## 使用实例元数据服务
<a name="amazon-lightsail-use-imds"></a>

您可以使用以下方法之一从 Lightsail 中正在运行的实例访问实例元数据：
+ 实例元数据服务版本 1 (IMDSv1)-一种 request/response 方法
+ 实例元数据服务版本 2 (IMDSv2)-一种面向会话的方法
**重要**  
不是 Light IMDSv2 sail 中的所有实例蓝图都支持。使用`MetadataNoToken`实例指标来跟踪正在使用的对实例元数据服务的调用次数 IMDSv1。有关更多信息，请参阅[查看实例指标](amazon-lightsail-viewing-instance-health-metrics.md)。

有关使用 IMDS 的更多信息，请参阅[配置实例元数据服务（IMDS）](amazon-lightsail-configuring-instance-metadata-service.md)。

## 其他 IMDS 文档
<a name="amazon-lightsail-imds-documentation"></a>

以下 IMDS 文档在《Amazon Elastic Compute Cloud 用户指南（适用于 Linux 实例）**》和《Amazon Elastic Compute Cloud 用户指南（适用于 Windows 实例）**》中提供：

**注意**  
在 Amazon EC2 中，实例蓝图被称为亚马逊系统映像 (AMIs)。
+ 对于 Linux 实例：
  + [配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)
  + [检索实例元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)
  + [处理实例用户数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html)
  + [检索动态数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-dynamic-data-retrieval.html)
  + [实例元数据类别](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)
  + [示例：AMI 启动索引值](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMI-launch-index-examples.html)
  + [实例身份文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)
+ 对于 Windows 实例：
  + [配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)
  + [检索实例元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)
  + [处理实例用户数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html)
  + [检索动态数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-dynamic-data-retrieval.html)
  + [实例元数据类别](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)
  + [示例：AMI 启动索引值](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMI-launch-index-examples.html)
  + [实例身份文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)

# 在 Lightsail 上访问和配置实例元数据服务 (IMDS)
<a name="amazon-lightsail-configuring-instance-metadata-service"></a>

您可以使用以下其中一种方法，从正在运行的实例中访问实例元数据：
+ 实例元数据服务版本 1 (IMDSv1)-一种 request/response 方法
+ 实例元数据服务版本 2 (IMDSv2)-一种面向会话的方法
**重要**  
不是 Light IMDSv2 sail 中的所有实例蓝图都支持。使用`MetadataNoToken`实例指标来跟踪正在使用的对实例元数据服务的调用次数 IMDSv1。有关更多信息，请参阅[查看实例指标](amazon-lightsail-viewing-instance-health-metrics.md)。

默认情况下，您可以使用 IMDSv1 或 IMDSv2，或两者兼而有之。实例元数据服务根据任何给定 IMDSv2 请求中是否存在唯一的`PUT`或`GET`标头来 IMDSv2区分 IMDSv1 和请求。有关更多信息，请参阅[借助 EC2 实例元数据服务的增强功能，为开放式防火墙、反向代理和 SSRF 漏洞增加深度防御](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)。

您可以在每个实例上配置实例元数据服务，以便本地代码或用户必须使用 IMDSv2。当您指定 IMDSv2 必须使用时，将 IMDSv1 不再起作用。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南（适用于 Linux 实例）**》中的[配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)。

要检索实例元数据，请参阅《Amazon Elastic Compute Cloud 用户指南（适用于 Linux 实例）**》中的[检索实例元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)。

**注意**  
本节中的示例使用实例元数据服务 IPv4 的地址:`169.254.169.254`. 如果您要通过 IPv6 地址检索实例的实例元数据，请务必启用并改用该 IPv6 地址：`fd00:ec2::254`。实例元数据服务 IPv6 的地址与 IMDSv2命令兼容。

## 实例元数据服务版本 2 的工作原理
<a name="instance-metadata-v2-how-it-works"></a>

IMDSv2 使用面向会话的请求。对于面向会话的请求，您创建一个会话令牌以定义会话持续时间，该时间最少为 1 秒，最多为 6 小时。在指定的持续时间内，您可以将相同的会话令牌用于后续请求。在指定的持续时间到期后，您必须创建新的会话令牌以用于将来的请求。

**重要**  
默认情况下，从亚马逊 Linux 2023 和 Ubuntu 24 蓝图启动的 Lightsail 实例将进行配置。 IMDSv2

以下示例使用 Linux 和 PowerShell shell 脚本 IMDSv2 来检索顶级实例元数据项。这些示例执行以下操作：
+ 使用 `PUT` 请求创建持续 6 小时（21600 秒）的会话令牌
+ 将会话令牌标头存储在名为 `TOKEN`（在 Linux 上）或 `token`（在 Windows 上）的变量中
+ 使用令牌请求顶级元数据项

通过运行以下命令开始：
+ **在 Linux 上：**
  + 首先，使用以下命令生成令牌。

    ```
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
    ```
  + 然后，通过令牌使用以下命令生成顶级元数据项。

    ```
    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
    ```
+ **在 Windows 上：**
  + 首先，使用以下命令生成令牌。

    ```
    PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
    ```
  + 然后，通过令牌使用以下命令生成顶级元数据项。

    ```
    PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/
    ```

创建令牌后，您可以重复使用令牌，直到令牌过期。在以下示例中，每个命令都会获取用于启动实例的蓝图（亚马逊云机器镜像（AMI））的 ID。上一个示例中的令牌可以重复使用。该令牌存储在 `$TOKEN`（在 Linux 上）或 `$token`（在 Windows 上）中。
+ **在 Linux 上：**

  ```
  [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id
  ```
+ **在 Windows 上：**

  ```
  PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} `
  -Method GET -uri http://169.254.169.254/latest/meta-data/ami-id
  ```

当您使用 IMDSv2 请求实例元数据时，请求必须包含以下内容：
+ **`PUT` 请求** – 使用 `PUT` 请求可启动到实例元数据服务的会话。`PUT` 请求返回一个令牌，该令牌必须包含在对实例元数据服务的后续 `GET` 请求中。使用时需要使用令牌才能访问元数据 IMDSv2。
+ **令牌** – 将该令牌包含在对实例元数据服务的所有 `GET` 请求中。如果将令牌使用设置为 `required`，没有有效令牌或令牌过期的请求将显示 `401 - Unauthorized` HTTP 错误代码。有关更改令牌使用要求的信息，请参阅《*AWS CLI 命令参考*》[update-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/lightsail/update-instance-metadata-options.html)中的。
  + 令牌是实例特定的密钥。令牌在其他实例上无效，如果尝试在生成令牌的实例外部使用，令牌将会被拒绝。
  + `PUT` 请求必须包含一个标头，它以秒为单位指定令牌的生存时间（TTL）。TTL 最多可以指定为 6 小时（21600 秒）。令牌表示一个逻辑会话。TTL 指定令牌的有效时间长度，因而指定会话的持续时间。
  + 在令牌过期后，要继续访问实例元数据，您必须使用另一个 `PUT` 请求创建新会话。
  + 您可以选择在每个请求中重复使用令牌或创建新的令牌。对于少量请求，在每次需要访问实例元数据服务时生成并立即使用令牌可能更方便。但为了提高效率，您可以为令牌指定更长的持续时间并重复使用令牌，而不是在每次需要请求实例元数据时都编写 `PUT` 请求。并发令牌的数量没有实际限制，每个令牌代表自己的会话。 IMDSv2 但是，仍受普通实例元数据服务连接和限制的限制。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南（适用于 Linux 实例）**》中的[查询限制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#instancedata-throttling)。

允许在 IMDSv2 实例元数据请求中使用 HTTP `GET` 和 `HEAD` 方法。如果 `PUT` 请求包含 `X-Forwarded-For` 标头，则会被拒绝。

默认情况下，`PUT` 请求的响应在 IP 协议级别的响应跃点数限制（生存时间）为 `1`。如果需要更大的跃点数限制，您可以使用 `update-instance-metadata-options` 命令进行调整。例如，您可能需要使用更大的跃点数限制，以便与实例上运行的容器服务保持向后兼容。有关更多信息，请参阅《AWS CLI 命令参考》**中的 [update-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/lightsail/update-instance-metadata-options.html)。

## 转换为使用 实例元数据服务版本 2
<a name="instance-metadata-transition-to-version-2"></a>

使用实例元数据服务版本 2 (IMDSv2) 是可选的。将继续无限期地支持实例元数据服务版本 1 (IMDSv1)。如果您选择迁移到使用 IMDSv2，我们建议您使用以下工具和过渡路径。

**帮助转换为 IMDSv2 的工具**

如果您的软件使用 IMDSv1，请使用以下工具来帮助重新配置要使用的 IMDSv2软件。
+ **AWS 软件：** AWS SDKs 和 AWS CLI 支持的最新版本 IMDSv2。要使用 IMDSv2，请确保您的实例具有 AWS SDKs 和的最新版本 AWS CLI。有关更新的信息 AWS CLI，请参阅《*AWS Command Line Interface 用户指南》 AWS CLI*中的[安装、更新和卸载](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。所有亚马逊 Linux 2 软件包都支持 IMDSv2。
+ **实例指标**： IMDSv2 使用令牌支持的会话，但 IMDSv1 不使用。`MetadataNoToken`实例指标跟踪正在使用的对实例元数据服务的调用次数 IMDSv1。通过查看该指标是否为零，您可以确定是否以及何时将所有软件升级为使用 IMDSv2。有关更多信息，请参阅[在 Amazon Lightsail 中查看实例指标](amazon-lightsail-viewing-instance-health-metrics.md)。
+ 对 **Lightsail API 操作和 AWS CLI 命令的更新**：对于现有实例，您可以使用[update-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/lightsail/update-instance-metadata-options.html) AWS CLI 命令（或 [UpdateInstanceMetadataOptions](https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_UpdateInstanceMetadataOptions.html)API 操作）来要求使用。 IMDSv2以下命令是一个示例。请务必*InstanceName*替换为实例的名称，并*RegionName*使用您的实例 AWS 区域 所在的名称进行替换。

  ```
  aws lightsail update-instance-metadata-options --region RegionName --instance-name InstanceName --http-tokens required
  ```

**要求 IMDSv2 访问的建议途径**

在使用上述工具时，我们建议您按照以下途径转换为 IMDSv2：

### 步骤 1：在开始时
<a name="path-step-1"></a>

将 AWS SDKs您的实例上使用角色凭证的 AWS CLI、和您的软件更新为 IMDSv2兼容版本。有关更新的信息 AWS CLI，请参阅*AWS Command Line Interface 用户指南 AWS CLI*中的[升级到最新版本](https://docs.aws.amazon.com/cli/latest/userguide/install-linux.html#install-linux-awscli-upgrade)的。

然后，使用 IMDSv2 请求更改直接访问实例元数据（换句话说，不使用 S AWS DK）的软件。

### 步骤 2：在转换期间
<a name="path-step-2"></a>

使用实例指标 `MetadataNoToken` 跟踪您的转换进度。该指标显示您的实例上使用的对实例元数据服务的调用 IMDSv1 次数。有关更多信息，请参阅[查看实例指标](amazon-lightsail-viewing-instance-health-metrics.md)。

### 步骤 3：在所有实例上一切准备就绪时
<a name="path-step-3"></a>

当实例指标`MetadataNoToken`记录的 IMDSv1 使用率为零时，所有实例都已准备就绪。在此阶段，您可以通过[update-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/lightsail/update-instance-metadata-options.html)命令要求 IMDSv2 使用。您可以在正在运行的实例上进行这些更改，而无需重新启动实例。

更新现有实例的实例元数据选项只能通过 Lightsail API 或。 AWS CLI它目前在 Lightsail 控制台中不可用。有关更多信息，请参阅 [update-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/lightsail/update-instance-metadata-options.html)。

## 其他 IMDS 文档
<a name="amazon-lightsail-configuring-instance-metadata-service-imds-documentation"></a>

以下 IMDS 文档在《Amazon Elastic Compute Cloud 用户指南（适用于 Linux 实例）**》和《Amazon Elastic Compute Cloud 用户指南（适用于 Windows 实例）**》中提供：

**注意**  
在 Amazon EC2 中，实例蓝图被称为亚马逊系统映像 (AMIs)。
+ 对于 Linux 实例：
  + [配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)
  + [检索实例元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)
  + [处理实例用户数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html)
  + [检索动态数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-dynamic-data-retrieval.html)
  + [实例元数据类别](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)
  + [示例：AMI 启动索引值](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMI-launch-index-examples.html)
  + [实例身份文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)
+ 对于 Windows 实例：
  + [配置实例元数据选项](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)
  + [检索实例元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)
  + [处理实例用户数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html)
  + [检索动态数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-dynamic-data-retrieval.html)
  + [实例元数据类别](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html)
  + [示例：AMI 启动索引值](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMI-launch-index-examples.html)
  + [实例身份文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)