

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

# 設定執行個體中繼資料服務選項
<a name="configuring-instance-metadata-options"></a>

執行個體中繼資料服務 (IMDS) 會在每個 EC2 執行個體本機上執行。*執行個體中繼資料選項*是指一組能控制 IMDS 在 EC2 執行個體上的可存取性和行為的祖態。

您可以在每個執行個體上設定下列執行個體中繼資料選項：

**執行個體中繼資料服務 (IMDS)**：`enabled` \| `disabled`  
您可以在執行個體上啟用或停用 IMDS。停用時，您或任何程式碼都無法在執行個體上存取執行個體中繼資料。  
IMDS 在執行個體上有兩個端點：IPv4 (`169.254.169.254`) 和 IPv6 (`[fd00:ec2::254]`)。當您啟用 IMDS 時，IPv4 端點會自動啟用。如果您想要啟用 IPv6 端點，則需要明確啟用。

**IMDS IPv6 端點**：`enabled` \| `disabled`  
您可以在執行個體上明確啟用 IPv6 IMDS 端點。啟用 IPv6 端點時，IPv4 端點會保持啟用狀態。IPv6 端點僅在 [IPv6 支援的子網路](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range) (僅支援雙重堆疊或 IPv6) 中的 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)受到支援。

**中繼資料版本**：`IMDSv1 or IMDSv2 (token optional)` \| `IMDSv2 only (token required)`  
要求執行個體中繼資料時，IMDSv2 呼叫需要字符。IMDSv1 呼叫不需要字符。您可以設定執行個體以允許 IMDSv1 或 IMDSv2 呼叫 (其中字符為選用項目)，或者僅允許 IMDSv2 呼叫 (其中字符為必要項目)。

**中繼資料回應跳轉限制**：`1`–`64`  
跳轉限制是允許 PUT 回應進行的網路跳轉數量。您可以將跳轉限制設定為最小 `1`及最大 `64`。在容器環境中，`1` 的跳轉限制可能會導致問題。如需如何緩解這些問題的資訊，請參閱 [執行個體中繼資料存取考量](instancedata-data-retrieval.md#imds-considerations) 下容器環境的相關資訊。

**存取執行個體中繼資料中的標籤**：`enabled` \| `disabled`  
您可以從執行個體中繼資料啟用或停用執行個體標籤的存取權。如需詳細資訊，請參閱[使用執行個體中繼資料檢視 EC2 執行個體的標籤](work-with-tags-in-IMDS.md)。

若要檢視執行個體的目前組態，請參閱 [查詢現有執行個體的執行個體中繼資料選項](instancedata-data-retrieval.md#query-IMDS-existing-instances)。

## 設定執行個體中繼資料選項的位置
<a name="where-to-configure-instance-metadata-options"></a>

執行個體中繼資料選項可以在不同層級設定，如下所示：
+ **帳戶**：您可以在帳戶層級為每個 AWS 區域設定執行個體中繼資料選項的預設值。啟動執行個體時，執行個體中繼資料選項會自動設定為帳戶層級值。您可以在啟動時變更這些值。帳戶層級預設值不會影響現有的執行個體。
+ **AMI**：註冊或修改 AMI 時，可以將 `imds-support` 參數設定為 `v2.0`。使用此 AMI 啟動執行個體時，執行個體中繼資料版本會自動設定為 IMDSv2 且跳轉限制設定為 2。
+ **執行個體**：您可以在啟動時變更所有在執行個體上的執行個體中繼資料選項，並覆寫預設設定。您也可以在執行中或已停止的執行個體啟動後，變更執行個體中繼資料選項。請注意，IAM 或 SCP 政策可能會限制變更。

如需詳細資訊，請參閱[設定新執行個體的執行個體中繼資料選項](configuring-IMDS-new-instances.md)及[修改現有執行個體的執行個體中繼資料選項](configuring-IMDS-existing-instances.md)。

## 執行個體中繼資料選項的優先順序
<a name="instance-metadata-options-order-of-precedence"></a>

每個執行個體中繼資料選項的值都是在執行個體啟動時，依照階層優先順序來決定。階層結構如下，從最上方的最高優先權開始：
+ **優先順序 1：啟動時的執行個體組態**：值可以在啟動範本或執行個體組態中指定。此處指定的任何值都會覆寫在帳戶層級或 AMI 中指定的值。
+ **優先順序 2：帳戶設定** – 如果在執行個體啟動時未指定值，則由帳戶層級設定 （針對每個設定 AWS 區域) 決定。帳戶層級設定會包括每個中繼資料選項的值，或完全不表示任何偏好設定。
+ **優先順序 3：AMI 組態**：如果未在執行個體啟動或帳戶層級指定值，則由 AMI 組態決定。這僅會套用到 `HttpTokens` 和 `HttpPutResponseHopLimit`。

每個中繼資料選項都會分別進行評估。執行個體可以混合使用直接執行個體組態、帳戶層級預設值，以及來自 AMI 的組態加以設定。

您可以在執行中或已停止的執行個體啟動後，變更任何中繼資料選項的值，除非變更內容受限於 IAM 或 SCP 政策。

**注意**  
帳戶層級 IMDSv2 強制執行設定會在優先順序決定執行個體的 IMDS 設定之後進行評估。啟用 IMDSv2 強制執行時，使用 IMDSv1 啟用的執行個體將會失敗。如需強制執行的詳細資訊，請參閱 [在帳戶層級強制執行 IMDSv2](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level)。

**警告**  
如果已啟用 IMDSv2 強制執行，且未在啟動時執行個體組態、帳戶設定或 AMI 組態`required`中`httpTokens`設定為 ，則您的啟動將會失敗。

**範例 1 – 判斷中繼資料選項的值**

在此範例中，EC2 執行個體會在將 `HttpPutResponseHopLimit` 以帳戶層級設定為 `1` 的區域中啟動。指定的 AMI 已將 `ImdsSupport` 設定為 `v2.0`。啟動時，不會直接在執行個體上指定中繼資料選項。執行個體會使用下列中繼資料選項啟動：

```
"MetadataOptions": {
    ...
    "HttpTokens": "required",
    "HttpPutResponseHopLimit": 1,
    ...
```

這些值的判斷方式如下所示：
+ **啟動時未指定中繼資料選項：**在執行個體啟動期間，未在執行個體啟動參數或啟動範本中提供中繼資料選項的特定值。
+ **帳戶設定的優先順序為次要：**如果啟動時未指定特定值，則以區域內帳戶層級的設定為準。這表示會套用在帳戶層級設定的預設值。在此情況下，已將 `HttpPutResponseHopLimit` 設定為 `1`。
+ **AMI 設定的優先順序為最後：**如果沒有在啟動時或 `HttpTokens` (執行個體中繼資料版本) 之帳戶層級指定的特定值，則套用 AMI 設定。在此情況下，AMI 設定 `ImdsSupport: v2.0` 決定 `HttpTokens` 設定為 `required`。請注意，雖然 AMI 設定 `ImdsSupport: v2.0` 旨在設定 `HttpPutResponseHopLimit: 2`，但優先順序較高的帳戶層級設定 `HttpPutResponseHopLimit: 1` 已將其覆寫。

**範例 2 – 判斷中繼資料選項的值**

在此範例中，EC2 執行個體的啟動設定與範例 1 相同，但 `HttpTokens` 在啟動時執行在執行個體上設定為 `optional`。執行個體會使用下列中繼資料選項啟動：

```
"MetadataOptions": {
    ...
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    ...
```

`HttpPutResponseHopLimit` 的值採用與範例 1 相同的決定方法。但是，`HttpTokens` 的值決定方法如下：啟動時，在執行個體上設定的中繼資料選項為優先。即使 AMI 使用 `ImdsSupport: v2.0` 設定 (也就是，將 `HttpTokens` 設定為 `required`)，啟動時在執行個體上指定的值 (將 `HttpTokens` 設定為 `optional`) 仍為優先。

**範例 3 – 判斷啟用 HttpTokensEnforced 的中繼資料選項的值**

在此範例中， 區域中的帳戶具有 `HttpTokens = required`和 `HttpTokensEnforced = enabled`。

請考慮下列 EC2 執行個體啟動嘗試：
+ 啟動嘗試`HttpTokens`設定為 `optional` – 啟動失敗，因為已啟用帳戶層級強制執行 (`HttpTokensEnforced = enabled`)，且啟動參數優先於帳戶預設值。
+ `HttpTokens` 將 設定為 的啟動嘗試 `required` – 啟動成功，因為它符合帳戶層級強制執行。
+ 未指定`HttpTokens`值的啟動嘗試 – 啟動會成功，因為該值`required`會根據帳戶設定預設為 。

### 設定執行個體中繼資料版本
<a name="metadata-version-order-of-precedence"></a>

啟動執行個體時，執行個體*中繼資料版本的*值為 **IMDSv1 或 IMDSv2 （金鑰選用）** (`httpTokens=optional`) 或**僅限 IMDSv2 （需要金鑰） (`httpTokens=required`) **。

在執行個體啟動時，您可以手動指定中繼資料版本的值，或使用預設值。如果您手動指定值，即會覆寫任何預設值。如果您選擇不手動指定值，則會由預設設定的組合決定。

下列流程圖顯示啟動時執行個體的中繼資料版本如何取決於不同組態層級的設定，以及強制執行的評估位置。以下資料表提供每個層級的特定設定。

![流程圖，顯示執行個體中繼資料版本和 IMDSv2 強制執行的評估點。](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/imds-defaults-launch-flow.png)


此表格顯示啟動時的執行個體中繼資料版本 (如欄 4 中**產生的執行個體組態**所示) 如何由不同組態層級的設定決定。優先順序從左到右，其中第一欄採用最高優先順序，如下所示：
+ 欄 1：**啟動參數**：代表您在啟動時手動指定之執行個體上的設定。
+ 欄 2：**帳戶層級預設值**：代表帳戶的設定。
+ 欄 3：**AMI 預設值**：代表 AMI 上的設定。


| 啟動參數 | 帳戶層級預設值 | AMI 預設值 | 產生的執行個體組態 | 
| --- | --- | --- | --- | 
| 僅限 V2 (需要字符) | 無偏好設定 | 僅限 V2 | 僅限 V2 | 
| 僅限 V2 (需要字符) | 僅限 V2 | 僅限 V2 | 僅限 V2 | 
| 僅限 V2 (需要字符) | V1 或 V2 | 僅限 V2 | 僅限 V2 | 
| V1 或 V2 (字符為選用項目) | 無偏好設定 | 僅限 V2 | V1 或 V2 | 
| V1 或 V2 (字符為選用項目) | 僅限 V2 | 僅限 V2 | V1 或 V2 | 
| V1 或 V2 (字符為選用項目) | V1 或 V2 | 僅限 V2 | V1 或 V2 | 
| 未設定 | 無偏好設定 | 僅限 V2 | 僅限 V2 | 
| 未設定 | 僅限 V2 | 僅限 V2 | 僅限 V2 | 
| 未設定 | V1 或 V2 | 僅限 V2 | V1 或 V2 | 
| 僅限 V2 (需要字符) | 無偏好設定 | null | 僅限 V2 | 
| 僅限 V2 (需要字符) | 僅限 V2 | null | 僅限 V2 | 
| 僅限 V2 (需要字符) | V1 或 V2 | null | 僅限 V2 | 
| V1 或 V2 (字符為選用項目) | 無偏好設定 | null | V1 或 V2 | 
| V1 或 V2 (字符為選用項目) | 僅限 V2 | null | V1 或 V2 | 
| V1 或 V2 (字符為選用項目) | V1 或 V2 | null | V1 或 V2 | 
| 未設定 | 無偏好設定 | null | V1 或 V2 | 
| 未設定 | 僅限 V2 | null | 僅限 V2 | 
| 未設定 | V1 或 V2 | null | V1 或 V2 | 

## 使用 IAM 條件索引鍵限制執行個體中繼資料選項
<a name="iam-condition-keys-and-imds"></a>

您可以在 IAM 政策或 SCP 中使用 IAM 條件索引鍵，如下所示：
+ 只有在執行個體設定為需要使用 IMDSv2 時才允許啟動該執行個體
+ 限制允許的轉跳數目
+ 關閉對執行個體中繼資料的存取

**Topics**
+ [設定執行個體中繼資料選項的位置](#where-to-configure-instance-metadata-options)
+ [執行個體中繼資料選項的優先順序](#instance-metadata-options-order-of-precedence)
+ [使用 IAM 條件索引鍵限制執行個體中繼資料選項](#iam-condition-keys-and-imds)
+ [設定新執行個體的執行個體中繼資料選項](configuring-IMDS-new-instances.md)
+ [修改現有執行個體的執行個體中繼資料選項](configuring-IMDS-existing-instances.md)

**注意**  
您應該謹慎繼續執行和仔細進行測試，然後再進行任何變更。請記得下列事項：  
如果您強制使用 IMDSv2，使用 IMDSv1 來存取執行個體中繼資料的應用程式或代理程式便會中斷。
如果您關閉對執行個體中繼資料的所有存取，則需要存取執行個體中繼資料才能正常運作的應用程式或代理程式便會中斷。
對於 IMDSv2，在檢索字符時必須使用 `/latest/api/token`。
(僅限 Windows) 如果您的 PowerShell 版本早於 4.0，您必須[更新至 Windows Management Framework 4.0](https://devblogs.microsoft.com/powershell/windows-management-framework-wmf-4-0-update-now-available-for-windows-server-2012-windows-server-2008-r2-sp1-and-windows-7-sp1/)，才能使用 IMDSv2。