

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

# 在 上存取和設定執行個體中繼資料服務 (IMDS) Lightsail
<a name="amazon-lightsail-configuring-instance-metadata-service"></a>

您可以使用下列任一種方法，從執行中的執行個體存取執行個體中繼資料：
+ 執行個體中繼資料服務第 1 版 (IMDSv1) – 請求/回應方法
+ 執行個體中繼資料服務第 2 版 (IMDSv2) – 工作階段導向方法
**重要**  
並非 Lightsail 中的所有執行個體藍圖都支援 IMDSv2。使用 `MetadataNoToken` 執行個體指標追蹤對於正在使用 IMDSv1 的執行個體中繼資料服務所發出的呼叫次數。如需詳細資訊，請參閱[檢視執行個體指標](amazon-lightsail-viewing-instance-health-metrics.md)。

依預設，您可以使用 IMDSv1 或 IMDSv2，或兩者。執行個體中繼資料服務會依據任何指定請求中是否存在 IMDSv2 特有的 `PUT` 或 `GET` 標頭來區分 IMDSv1 和 IMDSv2 請求。如需詳細資訊，請參閱 [透過 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 使用者指南》**中的[設定執行個體中繼資料選項](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html)。

若要擷取執行個體中繼資料，請參閱《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》**中的[擷取執行個體中繼資料](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 小時。在指定持續期間，您可以將相同的工作階段字符用於後續請求。在指定持續期間到期之後，您必須建立新的工作階段字符，才能使用未來請求。

**重要**  
Lightsail 從 Amazon Linux 2023 和 Ubuntu 24 藍圖啟動的 執行個體預設會設定 IMDSv2。

下列範例會使用 Linux 與 PowerShell 的 shell 指令碼及 IMDSv2，擷取最上層執行個體中繼資料項目。這些範例會執行下列操作：
+ 使用 `PUT` 請求，建立持續六小時 (21,600 秒) 的工作階段字符
+ 將工作階段字符標頭存放到名為 `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/
    ```

建立字符後，您可以重複使用直至其到期為止。在下列範例中，每個命令會取得用於啟動執行個體的藍圖 (Amazon Machine Image (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 指定為最多六小時 (21,600 秒)。字符會代表邏輯工作階段。TTL 會指定字符有效的時間長度，也就是工作階段的持續期間。
  + 在字符到期後，若要繼續存取執行個體中繼資料，您必須使用另一個 `PUT` 請求建立新的工作階段。
  + 您可以選擇重複使用字符或使用每個請求來建立新字符。對於少量請求，您每次需要存取執行個體中繼資料服務時，就能更輕鬆地產生和立即使用字符。但為了提升效率，您可以為字符指定更長的存留期間，並重複使用該字符，而不用在每次需請求執行個體中繼資料時寫入 `PUT` 請求。並行字符數量沒有實際限額，每個都代表它自己的工作階段。但 IMDS2 仍會受到正常執行個體中繼資料服務連線和調節限額的限制。如需詳細資訊，請參閱《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》**中的[查詢限流](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#instancedata-throttling)。

HTTP `GET` 及 `HEAD` 方法可在 IMDSv2 執行個體中繼資料請求中使用。如果 `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>

可選擇使用 Instance Metadata Service Version 2 (IMDSv2)。Instance Metadata Service Version 1 (IMDSv1) 將持續無限期受到支援。如果您選擇使用 IMDSv2 進行移轉，我們建議您使用下列工具和轉換路徑。

**協助轉換至 IMDSv2** 的工具

如果您的軟體使用 IMDSv1，請使用下列工作，以協助將您的軟體重新設定為使用 IMDSv2。
+ **AWS 軟體：** SDK 的最新版本 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) 。所有 Amazon 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-compatible版本。如需更新 的資訊 AWS CLI，請參閱*AWS Command Line Interface 《 使用者指南*》中的[升級至最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-linux.html#install-linux-awscli-upgrade)。

然後，使用 IMDSv2 請求變更直接存取執行個體中繼資料 （也就是不使用 AWS SDK 的軟體） 的軟體。

### 步驟 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>

可在《適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南》**與《適用於 Windows 執行個體的 Amazon Elastic Compute Cloud 使用者指南》**中找到以下 IMDS 文件：

**注意**  
在 Amazon EC2 中，執行個體藍圖稱為 Amazon Machine Image (AMI)。
+ 對於 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)