

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

# 設定新執行個體的執行個體中繼資料選項
<a name="configuring-IMDS-new-instances"></a>

您可以為新執行個體設定下列執行個體中繼資料選項。

**Topics**
+ [需要使用 IMDSv2](#configure-IMDS-new-instances)
+ [啟用 IMDS IPv4 和 IPv6 端點](#configure-IMDS-new-instances-ipv4-ipv6-endpoints)
+ [關閉對執行個體中繼資料的存取](#configure-IMDS-new-instances--turn-off-instance-metadata)
+ [允許存取執行個體中繼資料中的標籤](#configure-IMDS-new-instances-tags-in-instance-metadata)

**注意**  
這些選項的設定是在帳戶層級所設定，可直接在帳戶中設定，或使用宣告式政策來設定。它們必須在每個您要設定執行個體中繼資料選項的 AWS 區域 中設定。您可使用宣告式政策同時在多個區域及多個帳戶套用設定。使用宣告式政策時，您無法直接在帳戶中修改設定。本主題說明如何直接在帳戶內配置設定。如需使用宣告式政策的相關資訊，請參閱「AWS Organizations 使用者指南」**中的[宣告式政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

## 需要使用 IMDSv2
<a name="configure-IMDS-new-instances"></a>

您可以使用下列方法來要求在新執行個體上使用 IMDSv2。

**Topics**
+ [將 IMDSv2 設定為帳戶的預設值](#set-imdsv2-account-defaults)
+ [在帳戶層級強制執行 IMDSv2](#enforce-imdsv2-at-the-account-level)
+ [啟動時設定執行個體](#configure-IMDS-new-instances-instance-settings)
+ [設定 AMI](#configure-IMDS-new-instances-ami-configuration)
+ [使用 IAM 政策](#configure-IMDS-new-instances-iam-policy)

### 將 IMDSv2 設定為帳戶的預設值
<a name="set-imdsv2-account-defaults"></a>

您可以在帳戶層級為每個執行個體中繼資料服務 (IMDS) 設定預設版本 AWS 區域。這表示在啟動*新的*執行個體時，執行個體中繼資料版本會自動設定為帳戶層級的預設值。但是，您可以在啟動時或啟動後手動覆寫該值。如需有關帳戶層級設定和手動覆寫如何影響執行個體的詳細資訊，請參閱 [執行個體中繼資料選項的優先順序](configuring-instance-metadata-options.md#instance-metadata-options-order-of-precedence)。

**注意**  
設定帳戶層級預設值不會重設*現有的*執行個體。例如，如果您將帳戶層級預設值設定為 IMDSv2，則任何設為 IMDSv1 的現有執行個體都不會受到影響。若要變更現有執行個體的值，您必須手動變更執行個體本身的值。

您可以將執行個體中繼資料版本的帳戶預設值設定為 IMDSv2，因此所有在帳戶啟動中的*新*執行個體都需要 IMDSv2，且 IMDSv1 會停用。當您使用此帳戶預設值啟動執行個體時，下列是執行個體的預設值：
+ 主控台：**中繼資料版本**僅設定為 **V2 (需要字符)**，且**中繼資料回應跳轉限制**設定為 **2**。
+ AWS CLI：將 `HttpTokens` 設定為 `required`，並將 `HttpPutResponseHopLimit` 設定為 `2`。

**注意**  
在將帳戶預設值設定為 IMDSv2 之前，請確定您的執行個體不依賴於 IMDSv1。如需詳細資訊，請參閱[需要 IMDSv2 的建議路徑](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2)。

------
#### [ Console ]

**將 IMDSv2 設定為指定區域的帳戶預設值**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡片**的設定**下，選擇**資料保護和安全性**。

1. 在 **IMDS 預設值**旁邊，選擇**管理**。

1. 在**管理 IMDS 預設值**頁面上，執行下列操作：

   1. 在**執行個體中繼資料服務**中，選擇**啟用**。

   1. 針對 **Metadata version** (中繼資料版本)，選擇 **V2 only (token required)** (僅限 V2 (需要權杖))。

   1. 在**中繼資料回應跳轉限制**中，如果您的執行個體將託管容器，請指定 **2**。否則，請選取**無偏好設定**。如果未指定偏好設定，則在啟動時，AMI 具有設定 `ImdsSupport: v2.0` 的情況下預設值為 **2**；否則，預設值為 **1**。

   1. 選擇**更新**。

------
#### [ AWS CLI ]

**將 IMDSv2 設定為指定區域的帳戶預設值**  
使用 [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 命令，並指定要在其中修改 IMDS 帳戶層級設定的區域。如果您的執行個體將託管容器，請將 `--http-tokens` 設定為 `required` 並將 `--http-put-response-hop-limit` 設定為 `2`。否則，請指定 `-1` 以表示沒有偏好設定。如果指定 `-1` (無偏好設定)，則在啟動時，AMI 具有設定 `ImdsSupport: v2.0` 的情況下預設值為 `2`；否則，預設值為 `1`。

```
aws ec2 modify-instance-metadata-defaults \
    --region {{us-east-1}} \
    --http-tokens required \
    --http-put-response-hop-limit {{2}}
```

以下為範例輸出。

```
{
    "Return": true
}
```

**針對指定區域檢視執行個體中繼資料選項的預設帳戶設定**  
使用 [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 命令並指定區域。

```
aws ec2 get-instance-metadata-defaults --region {{us-east-1}}
```

以下為範例輸出。

```
{
    "AccountLevel": {
        "HttpTokens": "required",
        "HttpPutResponseHopLimit": 2
    },
    "ManagedBy": "account"
}
```

`ManagedBy` 欄位會指出進行相關設定的實體。在此範例中，`account` 會指出直接在帳戶中進行的設定。值為 `declarative-policy` 表示設定是透過宣告式政策來配置。如需詳細資訊，請參閱「AWS Organizations 使用者指南」**中的[宣告式政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

**將 IMDSv2 設定為所有區域的帳戶預設值**  
使用 [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 命令，以修改所有區域的 IMDS 帳戶層級設定。如果您的執行個體將託管容器，請將 `--http-tokens` 設定為 `required` 並將 `--http-put-response-hop-limit` 設定為 `2`。否則，請指定 `-1` 以表示沒有偏好設定。如果指定 `-1` (無偏好設定)，則在啟動時，AMI 具有設定 `ImdsSupport: v2.0` 的情況下預設值為 `2`；否則，預設值為 `1`。

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens required \
            --http-put-response-hop-limit {{2}} \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

以下為範例輸出。

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**針對所有區域檢視執行個體中繼資料選項的預設帳戶設定**  
使用 [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 命令。

```
echo -e "Region   \t Level          Hops    HttpTokens" ; \
echo -e "-------------- \t ------------   ----    ----------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-instance-metadata-defaults \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

以下為範例輸出。

```
Region           Level          Hops    HttpTokens
--------------   ------------   ----    ----------
ap-south-1       ACCOUNTLEVEL   2       required
eu-north-1       ACCOUNTLEVEL   2       required
eu-west-3        ACCOUNTLEVEL   2       required
...
```

------
#### [ PowerShell ]

**將 IMDSv2 設定為指定區域的帳戶預設值**  
使用 [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet，並指定要在其中修改 IMDS 帳戶層級設定的區域。如果您的執行個體將託管容器，請將 `-HttpToken` 設定為 `required` 並將 `-HttpPutResponseHopLimit` 設定為 `2`。否則，請指定 `-1` 以表示沒有偏好設定。如果指定 `-1` (無偏好設定)，則在啟動時，AMI 具有設定 `ImdsSupport: v2.0` 的情況下預設值為 `2`；否則，預設值為 `1`。

```
Edit-EC2InstanceMetadataDefault `
    -Region {{us-east-1}} `
    -HttpToken required `
    -HttpPutResponseHopLimit {{2}}
```

以下為範例輸出。

```
True
```

**針對指定區域檢視執行個體中繼資料選項的預設帳戶設定**  
使用 [Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html) cmdlet 並指定區域。

```
Get-EC2InstanceMetadataDefault -Region {{us-east-1}} | Format-List
```

以下為範例輸出。

```
HttpEndpoint            : 
HttpPutResponseHopLimit : {{2}}
HttpTokens              : required
InstanceMetadataTags    :
```

**將 IMDSv2 設定為所有區域的帳戶預設值**  
使用 [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet 修改所有區域的 IMDS 帳戶層級設定。如果您的執行個體將託管容器，請將 `-HttpToken` 設定為 `required` 並將 `-HttpPutResponseHopLimit` 設定為 `2`。否則，請指定 `-1` 以表示沒有偏好設定。如果指定 `-1` (無偏好設定)，則在啟動時，AMI 具有設定 `ImdsSupport: v2.0` 的情況下預設值為 `2`；否則，預設值為 `1`。

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region   = $_
        Modified = (Edit-EC2InstanceMetadataDefault `
                -Region $_ `
                -HttpToken required `
                -HttpPutResponseHopLimit {{2}})
    } 
} | `
Format-Table Region, Modified -AutoSize
```

預期的輸出結果

```
Region         Modified
------         --------
ap-south-1         True
eu-north-1         True
eu-west-3          True
...
```

**針對所有區域檢視執行個體中繼資料選項的預設帳戶設定**  
使用 [Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html) cmdlet。

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region = $_
        HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
        HttpTokens              = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
    }
} | `
Format-Table -AutoSize
```

範例輸出

```
Region         HttpPutResponseHopLimit HttpTokens
------         ----------------------- ----------
ap-south-1                           2 required
eu-north-1                           2 required
eu-west-3                            2 required                    
...
```

------

### 在帳戶層級強制執行 IMDSv2
<a name="enforce-imdsv2-at-the-account-level"></a>

您可以在每個帳戶層級強制使用 IMDSv2 AWS 區域。強制執行時，執行個體只能在設定為需要 IMDSv2 時啟動。無論執行個體或 AMI 的設定方式為何，此強制執行都適用。

**注意**  
在帳戶層級啟用 IMDSv2 強制執行之前，請確定您的應用程式和 AMIs 支援 IMDSv2。如需詳細資訊，請參閱[需要 IMDSv2 的建議路徑](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2)。如果已啟用 IMDSv2 強制執行`httpTokens`，且在啟動時執行個體組態、帳戶設定或 AMI 組態`required`中未設定為 ，則執行個體啟動將會失敗。如需故障診斷資訊，請參閱[啟動IMDSv1-enabled的執行個體失敗](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails)。

**注意**  
此設定不會變更現有執行個體的 IMDS 版本，而是封鎖在目前已停用 IMDSv1 的現有執行個體上啟用 IMDSv1。

------
#### [ Console ]

**為指定區域中的帳戶強制執行 IMDSv2**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 在導覽窗格中，選擇 **Dashboard (儀表板)**。

1. 在**帳戶屬性**卡片**的設定**下，選擇**資料保護和安全性**。

1. 在 **IMDS 預設值**旁邊，選擇**管理**。

1. 在**管理 IMDS 預設值**頁面上，執行下列操作：

   1. 針對 **Metadata version** (中繼資料版本)，選擇 **V2 only (token required)** (僅限 V2 (需要權杖))。

   1. 針對**強制執行 IMDSv2**，選擇**已啟用**。

   1. 選擇**更新**。

------
#### [ AWS CLI ]

**為指定區域中的帳戶強制執行 IMDSv2**  
 使用 [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 命令，並指定要在其中強制執行 IMDSv2 的區域。

```
aws ec2 modify-instance-metadata-defaults \
    --region {{us-east-1}} \
    --http-tokens required \
    --http-tokens-enforced enabled
```

以下為範例輸出。

```
{
"Return": true
}
```

**檢視特定區域中帳戶的 IMDSv2 強制執行設定**  
使用 [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 命令並指定區域。

```
aws ec2 get-instance-metadata-defaults --region {{us-east-1}}
```

以下為範例輸出。

```
{
    "AccountLevel": {
        "HttpTokens": "required",
        "HttpTokensEnforced": "enabled"
    },
    "ManagedBy": "account"
}
```

`ManagedBy` 欄位會指出進行相關設定的實體。在此範例中，`account` 會指出直接在帳戶中進行的設定。值為 `declarative-policy` 表示設定是透過宣告式政策來配置。如需詳細資訊，請參閱 *AWS Organizations 使用者指南*中的[宣告政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

**為所有區域強制執行帳戶的 IMDSv2**  
使用 [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 命令，在所有區域中強制執行 IMDSv2。

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens-enforced enabled \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

以下為範例輸出。

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**檢視所有區域中帳戶的 IMDSv2 強制執行設定**  
使用 [get-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-metadata-defaults.html) 命令。

```
echo -e "Region   \t Level           HttpTokensEnforced" ; \
echo -e "-------------- \t ------------   ----------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-instance-metadata-defaults \
            --region $region \
            --query 'AccountLevel.HttpTokensEnforced' \           
            --output text)
        echo -e "$region \t ACCOUNTLEVEL $output" 
    );
done
```

以下為範例輸出。

```
Region           Level          HttpTokensEnforced
--------------   ------------   ------------------
ap-south-1       ACCOUNTLEVEL   enabled
eu-north-1       ACCOUNTLEVEL   enabled
eu-west-3        ACCOUNTLEVEL   enabled
...
```

------
#### [ PowerShell ]

**為指定區域中的帳戶強制執行 IMDSv2**  
使用 [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet，並指定要在其中強制執行 IMDSv2 的區域。

```
Edit-EC2InstanceMetadataDefault `
    -Region {{us-east-1}} `
    -HttpToken required `
    -HttpPutResponseHopLimit 2
```

以下為範例輸出。

```
@{
    Return = $true
}
```

**檢視特定區域中帳戶的 IMDSv2 強制執行設定**  
使用 Get-EC2InstanceMetadataDefault 命令並指定區域。

```
Get-EC2InstanceMetadataDefault -Region {{us-east-1}}
```

以下為範例輸出。

```
@{
    AccountLevel = @{
        HttpTokens = "required"
        HttpTokensEnforced = "enabled"
    }
    ManagedBy = "account"
}
```

`ManagedBy` 欄位會指出進行相關設定的實體。在此範例中，`account` 會指出直接在帳戶中進行的設定。值為 `declarative-policy` 表示設定是透過宣告式政策來配置。如需詳細資訊，請參閱 *AWS Organizations 使用者指南*中的[宣告政策](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)。

**為所有區域強制執行帳戶的 IMDSv2**  
使用 [modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) 命令，在所有區域中強制執行 IMDSv2。

```
echo -e "Region          \t Modified" ; \
echo -e "--------------  \t ---------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 modify-instance-metadata-defaults \
            --region $region \
            --http-tokens-enforced enabled \
            --output text)
        echo -e "$region        \t $output"
    );
done
```

以下為範例輸出。

```
Region                   Modified
--------------           ---------
ap-south-1               True
eu-north-1               True
eu-west-3                True
...
```

**將 IMDSv2 設定為所有區域的帳戶預設值**  
使用 [Edit-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataDefault.html) cmdlet 修改所有區域的 IMDS 帳戶層級設定。如果您的執行個體將託管容器，請將 `-HttpToken` 設定為 `required` 並將 `-HttpPutResponseHopLimit` 設定為 `2`。否則，請指定 `-1` 以表示沒有偏好設定。如果指定 `-1` (無偏好設定)，則在啟動時，AMI 具有設定 `ImdsSupport: v2.0` 的情況下預設值為 `2`；否則，預設值為 `1`。

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region   = $_
        Modified = (Edit-EC2InstanceMetadataDefault `
                -Region $_ `
                -HttpToken required `
                -HttpPutResponseHopLimit {{2}})
    } 
} | `
Format-Table Region, Modified -AutoSize
```

預期的輸出結果

```
Region         Modified
------         --------
ap-south-1         True
eu-north-1         True
eu-west-3          True
...
```

**針對所有區域檢視執行個體中繼資料選項的預設帳戶設定**  
使用 [Get-EC2InstanceMetadataDefault](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceMetadataDefault.html) cmdlet。

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region = $_
        HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
        HttpTokens              = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
    }
} | `
Format-Table -AutoSize
```

範例輸出

```
Region         HttpPutResponseHopLimit HttpTokens
------         ----------------------- ----------
ap-south-1                           2 required
eu-north-1                           2 required
eu-west-3                            2 required                    
...
```

------

### 啟動時設定執行個體
<a name="configure-IMDS-new-instances-instance-settings"></a>

[啟動執行個體](ec2-launch-instance-wizard.md)時，您可以設定下列欄位，將執行個體設定為需要使用 IMDSv2：
+ Amazon EC2 主控台：將 **Metadata version** (中繼資料版本) 設為 **V2 only (token required)** (僅 V2 (需要權杖))。
+ AWS CLI：將 `HttpTokens` 設為 `required`。

當您指定需要 IMDSv2 時，也必須透過將**可存取中繼資料**設定為**已啟用** (主控台) 或將 `HttpEndpoint` 設為 `enabled` (AWS CLI) 來啟用執行個體中繼資料服務 (IMDS) 端點。

在容器環境中，如果需要 IMDSv2，建議將跳轉限制設定為 `2`。如需詳細資訊，請參閱[執行個體中繼資料存取考量](instancedata-data-retrieval.md#imds-considerations)。

------
#### [ Console ]

**要求在新執行個體上使用 IMDSv2**
+ 在 Amazon EC2 主控台中啟動新執行個體時，展開 **Advanced details** (進階詳細資訊)，並執行下列動作：
  + 針對 **Metadata accessible** (可存取中繼資料)，選擇 **Enabled** (已啟用)。
  + 針對 **Metadata version** (中繼資料版本)，選擇 **V2 only (token required)** (僅限 V2 (需要權杖))。
  + (容器環境) 在**中繼資料回應跳轉限制**中，選擇 **2**。

  如需詳細資訊，請參閱[進階詳細資訊](ec2-instance-launch-parameters.md#liw-advanced-details)。

------
#### [ AWS CLI ]

**要求在新執行個體上使用 IMDSv2**  
下列 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 範例會啟動 `c6i.large` 設定為 `--metadata-options` 的`HttpTokens=required` 執行個體。當您為 `HttpTokens` 指定值時，您也必須將 `HttpEndpoint` 設定為 `enabled`。由於中繼資料擷取請求的安全權杖標頭設定為 `required`，因此在要求執行個體中繼資料時需要執行個體使用 IMDSv2。

在容器環境中，如果需要 IMDSv2，建議使用 `HttpPutResponseHopLimit=2` 將跳轉限制設定為 `2`。

```
aws ec2 run-instances \
    --image-id {{ami-0abcdef1234567890}} \
    --instance-type {{c6i.large}} \
	...
    --metadata-options "HttpEndpoint=enabled,HttpTokens=required,HttpPutResponseHopLimit=2"
```

------
#### [ PowerShell ]

**要求在新執行個體上使用 IMDSv2**  
下列 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 範例會啟動`c6i.large`執行個體，並將 `MetadataOptions_HttpEndpoint` 設定為 `enabled`，並將 `MetadataOptions_HttpTokens` 參數設定為 `required`。當您為 `HttpTokens` 指定值時，您也必須將 `HttpEndpoint` 設定為 `enabled`。由於中繼資料擷取請求的安全權杖標頭設定為 `required`，因此在要求執行個體中繼資料時需要執行個體使用 IMDSv2。

```
New-EC2Instance `
    -ImageId {{ami-0abcdef1234567890}} `
    -InstanceType {{c6i.large}} `
    -MetadataOptions_HttpEndpoint enabled `
    -MetadataOptions_HttpTokens required
```

------
#### [ CloudFormation ]

若要使用 指定執行個體的中繼資料選項 CloudFormation，請參閱*AWS CloudFormation 《 使用者指南*》中的 [AWS::EC2::LaunchTemplate MetadataOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html) 屬性。

------

### 設定 AMI
<a name="configure-IMDS-new-instances-ami-configuration"></a>

註冊新 AMI 或修改現有 AMI 時，可以將 `imds-support` 參數設定為 `v2.0`。從此 AMI 啟動的執行個體會將**中繼資料版本**設定為**僅 V2 (需要權杖)** (主控台) 或將 `HttpTokens` 設為 `required` (AWS CLI)。透過這些設定，執行個體要求在請求執行個體中繼資料時使用 IMDSv2。

請注意，當您將 `imds-support` 設為 `v2.0` 時，從這個 AMI 啟動的執行個體也將有 **Metadata response hop limit** (中繼資料回應跳轉限制) (主控台) 或將 `http-put-response-hop-limit` (AWS CLI) 設為 **2**。

**重要**  
除非 AMI 軟體支援 IMDSv2，否則請勿使用此參數。將值設為 `v2.0` 後，將無法復原。「重設」AMI 的唯一方法是從基礎快照中建立一個新的 AMI。

**設定適用於 IMDSv2 的新 AMI**  
使用下列其中一種方法來為 IMDSv2 設定新的 AMI。

------
#### [ AWS CLI ]

以下 [register-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) 範例使用指定的 EBS 根磁碟區快照作為裝置 `/dev/xvda` 來註冊 AMI。為 `imds-support` 參數指定 `v2.0`，以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時要求使用 IMDSv2。

```
aws ec2 register-image \
    --name {{my-image}} \
    --root-device-name /dev/xvda \
    --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-{{0123456789example}}} \
    --architecture x86_64 \
    --imds-support v2.0
```

------
#### [ PowerShell ]

下列 [Register-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Register-EC2Image.html) cmdlet 範例會使用 EBS 根磁碟區的指定快照，將 AMI 註冊為裝置 `/dev/xvda`。為 `ImdsSupport` 參數指定 `v2.0`，以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時要求使用 IMDSv2。

```
Register-EC2Image `
    -Name '{{my-image}}' `
    -RootDeviceName /dev/xvda `
    -BlockDeviceMapping  ( 
    New-Object `
        -TypeName Amazon.EC2.Model.BlockDeviceMapping `
        -Property @{ 
        DeviceName = '/dev/xvda'; 
        EBS        = (New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice -Property @{ 
                SnapshotId = 'snap-{{0123456789example}}'
                VolumeType = 'gp3' 
                } )      
        }  ) `
    -Architecture X86_64 `
    -ImdsSupport v2.0
```

------

**設定適用於 IMDSv2 的現有 AMI**  
使用下列其中一種方法來為 IMDSv2 設定現有的 AMI。

------
#### [ AWS CLI ]

下列 [modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) 範例只會修改 IMDSv2 的現有 AMI。為 `imds-support` 參數指定 `v2.0`，以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時要求使用 IMDSv2。

```
aws ec2 modify-image-attribute \
    --image-id {{ami-0abcdef1234567890}} \
    --imds-support v2.0
```

------
#### [ PowerShell ]

下列 [Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) cmdlet 範例只會修改 IMDSv2 的現有 AMI。為 `imds-support` 參數指定 `v2.0`，以便從此 AMI 啟動的執行個體在請求執行個體中繼資料時要求使用 IMDSv2。

```
Edit-EC2ImageAttribute `
    -ImageId {{ami-0abcdef1234567890}} `
    -ImdsSupport 'v2.0'
```

------

### 使用 IAM 政策
<a name="configure-IMDS-new-instances-iam-policy"></a>

您可以建立執行下列其中一項動作的 IAM 政策：
+ 防止使用者啟動新執行個體，除非使用者在新執行個體上需要 IMDSv2。
+ 防止使用者呼叫 ModifyInstanceMetadataOptions API 來變更執行中執行個體的中繼資料選項。限制對 ModifyInstanceMetadataOptions httpTokens 屬性的存取，以防止執行中執行個體的意外更新。
+ 防止使用者呼叫 ModifyInstanceMetadataDefaults API 來變更 httpTokens 和 httpTokensEnforced 的帳戶預設設定。限制存取這兩個屬性可確保只有授權的角色才能修改帳戶預設值。

**透過使用 IAM 政策，在所有新執行個體上強制使用 IMDSv2**  
若要確保使用者在請求執行個體中繼資料時只能啟動需要使用 IMDSv2 的執行個體，請執行下列動作：
+ 限制對 `ModifyInstanceMetadataOptions`和 `ModifyInstanceMetadataDefaults` API 的存取，特別是 `httpTokens`和 `httpTokensEnforced` 屬性。
+ 然後，將帳戶預設為 `httpTokens = required`和 `httpTokensEnforced = enabled`。

  如需 IAM 政策範例，請參閱[使用執行個體中繼資料](ExamplePolicies_EC2.md#iam-example-instance-metadata)。

## 啟用 IMDS IPv4 和 IPv6 端點
<a name="configure-IMDS-new-instances-ipv4-ipv6-endpoints"></a>

IMDS 在執行個體上有兩個端點：IPv4 (`169.254.169.254`) 和 IPv6 (`[fd00:ec2::254]`)。當您啟用 IMDS 時，IPv4 端點會自動啟用。即使您在僅限 IPv6 的子網路中啟動執行個體，IPv6 端點仍會保持停用狀態。若要啟用 IPv6 端點，則需要明確啟用。當您啟用 IPv6 端點時，IPv4 端點會保持啟用狀態。

您可以在執行個體啟動時或啟動之後啟用 IPv6 端點。

**啟用 IPv6 端點的需求**
+ 選取的執行個體類型是 [Nitro 型執行個體](instance-types.md#instance-hypervisor-type)。
+ 選取的子網路支援 IPv6，其中子網路[僅支援雙重堆疊或 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range)。

使用下列任一種方法來啟動已啟用 IMDS IPv6 端點的執行個體。

------
#### [ Console ]

**在執行個體啟動時啟用 IMDS IPv6 端點**
+ 在 Amazon EC2 主控台中[啟動執行個體](ec2-launch-instance-wizard.md)，並在 **Advanced details** (進階詳細資訊) 下指定以下內容：
  + 在**中繼資料 IPv6 端點**中，選擇**已啟用**。

如需詳細資訊，請參閱[進階詳細資訊](ec2-instance-launch-parameters.md#liw-advanced-details)。

------
#### [ AWS CLI ]

**在執行個體啟動時啟用 IMDS IPv6 端點**  
以下 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 範例會啟動已啟用執行個體中繼資料服務 IPv6 端點的 `c6i.large` 執行個體。若要啟用 IPv6 端點，對於 `--metadata-options` 參數，請指定 `HttpProtocolIpv6=enabled`。當您為 `HttpProtocolIpv6` 指定值時，您也必須將 `HttpEndpoint` 設定為 `enabled`。

```
aws ec2 run-instances \
    --image-id {{ami-0abcdef1234567890}} \
    --instance-type {{c6i.large}} \
    ...
    --metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
```

------
#### [ PowerShell ]

**在執行個體啟動時啟用 IMDS IPv6 端點**  
下列 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 範例會啟動`c6i.large`執行個體，並為 IMDS 啟用 IPv6 端點。若要啟用 IPv6 端點，請將 `MetadataOptions_HttpProtocolIpv6` 指定為 `enabled`。當您為 `MetadataOptions_HttpProtocolIpv6` 指定值時，您也必須將 `MetadataOptions_HttpEndpoint` 設定為 `enabled`。

```
New-EC2Instance `
    -ImageId {{ami-0abcdef1234567890}} `
    -InstanceType {{c6i.large}} `
    -MetadataOptions_HttpEndpoint enabled `
    -MetadataOptions_HttpProtocolIpv6 enabled
```

------

## 關閉對執行個體中繼資料的存取
<a name="configure-IMDS-new-instances--turn-off-instance-metadata"></a>

可以在啟動執行個體時停用 IMDS 來關閉對執行個體中繼資料的存取。稍後透過重新啟用 IMDS 可以開啟存取。如需詳細資訊，請參閱[開啟對執行個體中繼資料的存取](configuring-IMDS-existing-instances.md#enable-instance-metadata-on-existing-instances)。

**重要**  
可以選擇在啟動時或啟動後停用 IMDS。如果*在啟動時*停用 IMDS，下列項目可能無法運作：  
您可能沒有執行個體的 SSH 存取權。`public-keys/0/openssh-key` 是執行個體的公有 SSH 金鑰，它將不可存取，因為通常會從 EC2 執行個體中繼資料中提供並存取該金鑰。
EC2 使用者資料將無法使用，且不會在執行個體啟動時執行。EC2 使用者資料託管於 IMDS。如果停用 IMDS，可以有效地關閉對使用者資料的存取。
若要存取此功能，可以在啟動後重新啟用 IMDS。

------
#### [ Console ]

**啟動時關閉對執行個體中繼資料的存取**
+ 在 Amazon EC2 主控台中[啟動執行個體](ec2-launch-instance-wizard.md)，並在 **Advanced details** (進階詳細資訊) 下指定以下內容：
  + 針對 **Metadata accessible** (可存取中繼資料)，選擇 **Disabled** (已停用)。

如需詳細資訊，請參閱[進階詳細資訊](ec2-instance-launch-parameters.md#liw-advanced-details)。

------
#### [ AWS CLI ]

**啟動時關閉對執行個體中繼資料的存取**  
將 `--metadata-options` 設為 `HttpEndpoint=disabled` 來啟動執行個體。

```
aws ec2 run-instances \
    --image-id {{ami-0abcdef1234567890}} \
    --instance-type {{c6i.large}} \
    ... 
    --metadata-options "HttpEndpoint=disabled"
```

------
#### [ PowerShell ]

**啟動時關閉對執行個體中繼資料的存取**  
下列 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 範例會啟動將 `MetadataOptions_HttpEndpoint` 設為 的執行個體`disabled`。

```
New-EC2Instance `
    -ImageId {{ami-0abcdef1234567890}} `
    -InstanceType {{c6i.large}} `
    -MetadataOptions_HttpEndpoint disabled
```

------
#### [ CloudFormation ]

若要使用 指定執行個體的中繼資料選項 CloudFormation，請參閱*CloudFormation 《 使用者指南*》中的 [AWS::EC2::LaunchTemplate MetadataOptions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-metadataoptions.html) 屬性。

------

## 允許存取執行個體中繼資料中的標籤
<a name="configure-IMDS-new-instances-tags-in-instance-metadata"></a>

根據預設，無法存取執行個體中繼資料中的執行個體標籤。對於每個執行個體，您必須明確允許存取。如果允許存取，則執行個體標籤*金鑰*必須符合特定字元限制，否則執行個體將無法啟動。如需詳細資訊，請參閱[在執行個體中繼資料中啟用標籤存取權](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS)。