

# 新規インスタンスのインスタンスメタデータオプションの設定
<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. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. AWS リージョン を変更するにはページの右上隅にあるリージョンセレクターを使用します。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[IMDS のデフォルト]** の横にある **[管理]** を選択してください。

1. **[IMDS のデフォルトを管理]** ページで、次の操作を実行します。

   1. **[インスタンスメタデータサービス]** で、**[有効にする]** を選択してください。

   1. **[Metadata version]** (メタデータバージョン) には**[V2 only (token required)**] (V2 のみ (トークンが必要)) を選択してください。

   1. インスタンスがコンテナをホストする場合は**[メタデータレスポンスのホップ制限]** で **2** を指定します。それ以外の場合は**[設定なし]** を選択してください。設定なしが指定されているとき、AMI に `ImdsSupport: v2.0` の設定がある場合は起動時の値がデフォルトで **2** になります。それ以外の場合はデフォルトで **1** になります。

   1. **[Update]** (更新) を選択してください。

------
#### [ 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 OrganizationsIAM ユーザーガイド*」の「[ マネージドポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」を参照してください。

**すべてのリージョンのアカウントのデフォルトとして IMDSv2 を設定するには**  
すべてのリージョンの IMDS アカウントレベル設定を変更するには[modify-instance-metadata-defaults](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-defaults.html) コマンドを使用します。インスタンスがコンテナをホストする場合は`--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) コマンドレットを使用して、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) コマンドレットを使用して、リージョンを指定します。

```
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) コマンドレットを使用して、すべてのリージョンの 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) コマンドレットを使用します。

```
(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>

各 AWS リージョンに対し、アカウントレベルで IMDSv2 の使用を強制できます。使用が強制されると、インスタンスを起動できるのは IMDSv2 が必須として設定されている場合のみになります。この強制は、インスタンスまたは AMI の設定方法を問わずに適用されます。

**注記**  
アカウントレベルで IMDSv2 の強制適用を有効にする前に、アプリケーションと AMI が IMDSv2 をサポートしていることを確認してください。詳細については「[IMDSv2 を必要とする推奨パス](instance-metadata-transition-to-version-2.md#recommended-path-for-requiring-imdsv2)」を参照してください。IMDSv2 の強制適用が有効になっており、`httpTokens` が起動時のインスタンス設定、アカウント設定、または AMI 構成のいずれかで `required` に設定されていない場合、インスタンスの起動は失敗します。トラブルシューティング情報については、「[IMDSv1 が有効化されたインスタンスの起動が失敗する](troubleshooting-launch.md#launching-an-imdsv1-enabled-instance-fails)」を参照してください。

**注記**  
この設定は既存のインスタンスの IMDS バージョンを変更しませんが、IMDSv1 が現在無効になっている既存のインスタンスでの IMDSv1 の有効化を阻止します。

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

**指定されたリージョン内のアカウントに IMDSv2 を強制適用する**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[IMDS のデフォルト]** の横にある **[管理]** を選択してください。

1. **[IMDS のデフォルトを管理]** ページで、次の操作を実行します。

   1. **[Metadata version]** (メタデータバージョン) には**[V2 only (token required)**] (V2 のみ (トークンが必要)) を選択してください。

   1. **[IMDSv2 を強制適用]** で **[有効]** を選択します。

   1. **[Update]** (更新) を選択してください。

------
#### [ 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) コマンドレットを使用して、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) コマンドレットを使用して、すべてのリージョンの 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) コマンドレットを使用します。

```
(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) コマンドレット例は、`MetadataOptions_HttpEndpoint` が `enabled` に、`MetadataOptions_HttpTokens` パラメータが `required` に設定された `c6i.large` インスタンスを起動します。`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 を使用することが、インスタンスでの必須になります。

この AMI から起動されるインスタンスでは`imds-support` に `v2.0` を設定している場合、**[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 を使用することが、この AMI から起動されるインスタンスでの必須になります。

```
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) コマンドレット例は、EBS ルートボリュームの指定されたスナップショットをデバイス `/dev/xvda` として使用して、AMI を登録します。`ImdsSupport` パラメータ用に `v2.0` を指定し、この AMI から起動するインスタンスに対して、インスタンスメタデータのリクエスト時に IMDSv2 を使用することが、この AMI から起動されるインスタンスでの必須になります。

```
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 を使用することが、この AMI から起動されるインスタンスでの必須になります。

```
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) コマンドレット例は、IMDSv2 用の既存の AMI のみを変更します。`imds-support` パラメータ用に `v2.0` を指定し、この AMI から起動するインスタンスに対して、インスタンスメタデータのリクエスト時に IMDSv2 を使用することが、この AMI から起動されるインスタンスでの必須になります。

```
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 両方のアカウントデフォルト設定を変更することを防ぐ。これらの 2 つのプロパティへのアクセスを制限することで、承認済みのロール以外はアカウントのデフォルトを変更できないようにします。

**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]`) という 2 つのエンドポイントがあります。IMDS を有効にすると、IPv4 エンドポイントが自動的に有効になります。IPv6 専用サブネットに対してインスタンスを起動しても、その IPv6 エンドポイントは無効のままになります。IPv6 エンドポイントを有効にするには明示的に有効にする必要があります。IPv6 エンドポイントを有効にしても、IPv4 エンドポイントは有効なままになります。

IPv6 エンドポイントはインスタンス起動時またはその後に有効にできます。

**IPv6 エンドポイントを有効にするための要件**
+ 選択されているインスタンスタイプは [Nitro ベースのインスタンス](instance-types.md#instance-hypervisor-type)です。
+ 選択したサブネットはそのサブネットが[デュアルスタックまたは IPv6 専用](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range)である場合、IPv6 をサポートします。

IMDS IPv6 エンドポイント対応のインスタンスを起動するには以下のいずれかの方法を使用します。

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

**インスタンス起動時に IMDS IPv6 エンドポイントを有効にするには**
+ **[Advanced details]** (高度な詳細) で以下のように指定して、Amazon EC2 コンソールで[インスタンスを起動](ec2-launch-instance-wizard.md)します。
  + **メタデータ 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) の例ではIMDS 用に 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) コマンドレット例は、IMDS 用に IPv6 エンドポイントが有効化された `c6i.large` インスタンスを起動します。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 アクセスがない可能性があります。キーは通常 EC2 インスタンスのメタデータから提供され、アクセスされるため、インスタンスのパブリック SSH キーである `public-keys/0/openssh-key` にはアクセスできません。
EC2 ユーザーデータは利用できず、インスタンスの起動時には実行されません。EC2 ユーザーデータは IMDS でホストされます。IMDS を無効にすると、ユーザーデータへのアクセスは事実上無効になります。
この機能にアクセスするには起動後に IMDS を再度有効にします。

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

**起動時にインスタンスメタデータへのアクセスを無効にするには**
+ **[Advanced details]** (高度な詳細) で以下のように指定して、Amazon EC2 コンソールで[インスタンスを起動](ec2-launch-instance-wizard.md)します。
  + **[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) コマンドレット例は、`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)」を参照してください。