

# 既存インスタンスのインスタンスメタデータオプションの変更
<a name="configuring-IMDS-existing-instances"></a>

既存のインスタンスのインスタンスメタデータオプションを変更することが可能です。

また、既存のインスタンスでインスタンスメタデータオプションを変更することをユーザーに禁止する IAM ポリシーを作成することもできます。インスタンスメタデータオプションを変更できるユーザーをコントロールするには指定したロールを持つユーザー以外のすべてのユーザーに [ModifyInstanceMetadataOptions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataOptions.html) API の使用を禁止するポリシーを指定できます。IAM ポリシーの例については[インスタンスメタデータの使用](ExamplePolicies_EC2.md#iam-example-instance-metadata)を参照してください。

**注記**  
宣言ポリシーを使用してインスタンスメタデータオプションを設定した場合、アカウント内で直接変更することはできません。詳細については「*AWS OrganizationsIAM ユーザーガイド*」の「[ マネージドポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」を参照してください。

## IMDSv2 の使用を要求する
<a name="modify-require-IMDSv2"></a>

既存のインスタンスに対して、インスタンスメタデータのリクエスト時に IMDSv2 が使用されるようにするため、既存のインスタンスメタデータオプションを変更します。IMDSv2 が必須である場合、IMDSv1 は使用できません。

**注記**  
IMDSv2 の使用を要求する前に、インスタンスが IMDSv1 呼び出しを行っていないことを確認してください。`MetadataNoToken` CloudWatch メトリクスは IMDSv1 呼び出しを追跡します。あるインスタンスの `MetadataNoToken` で IMDSv1 の使用量がゼロと記録されている場合はそのインスタンスは IMDSv2 を要求できます。

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

**既存インスタンスでの IMDSv2 の使用を義務付けるには**

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

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択してください。

1. インスタンスを選択してください。

1. **[アクション]**、**[インスタンスの設定]**、**[インスタンスメタデータのオプションを変更]** の順に選択してください。

1. **[インスタンスメタデータオプションの変更]** ダイアログボックスで、次の操作を行います。

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

   1. **[IMDSv2]** の場合は**[必須]** を選択してください。

   1. [**Save**] を選択してください。

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

**既存インスタンスでの IMDSv2 の使用を義務付けるには**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI コマンドを使って、`http-tokens` パラメータを `required` に設定できます。`http-tokens` の値を指定する場合は`http-endpoint` も `enabled` に設定する必要があります。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-tokens required \
    --http-endpoint enabled
```

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

**既存インスタンスでの IMDSv2 の使用を義務付けるには**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) コマンドレットを使用して、`HttpTokens` パラメータを `required` に設定します。`HttpTokens` の値を指定する場合は`HttpEndpoint` も `enabled` に設定する必要があります。

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpTokens required `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## IMDSv1 の使用を再開します
<a name="modify-restore-IMDSv1"></a>

インスタンスで IMDSv2 が必須となっている場合、IMDSv1 リクエストの使用は失敗します。IMDSv2 がオプションである場合、IMDSv2 と IMDSv1 の両方が機能します。このため、IMDSv1 を復元するには、次のいずれかの方法を使用して IMDSv2 をオプション (`httpTokens = optional`) として設定します。

`httpTokensEnforced` IMDS プロパティも、既存のインスタンスで IMDSv1 を有効化する試みを阻止します。リージョン内のアカウントに対して有効化されているときに `httpTokens` を `optional` に設定しようとすると、`UnsupportedOperation` 例外が発生します。詳細については、「[トラブルシューティング](#troubleshoot-modifying-an-imdsv1-enabled-instance-fails)」を参照してください。

**重要**  
IMDSv2 の強制適用が原因でインスタンスの起動が失敗する場合は、起動を正常に行うための 2 つのオプションがあります。  
**インスタンスを IMDSv2 のみとして起動する** – インスタンスで実行されているソフトウェアが IMDSv2 のみを使用している (IMDSv1 に対する依存なし) 場合、インスタンスを IMDSv2 のみとして起動できます。これを実行するには、リージョン内のアカウントの起動パラメータまたはメタデータデフォルトのいずれかで `httpTokens = required` を設定することによって IMDSv2 のみに設定します。
**強制適用を無効にする** – ソフトウェアが依然として IMDSv1 に依存している場合は、リージョン内のアカウントで `httpTokensEnforced` を `disabled` に設定します。詳細については「[アカウントレベルで IMDSv2 を強制適用する](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level)」を参照してください。

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

**インスタンスで IMDSv1 の使用を復元するには**

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

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択してください。

1. インスタンスを選択してください。

1. **[アクション]**、**[インスタンスの設定]**、**[インスタンスメタデータのオプションを変更]** の順に選択してください。

1. **[インスタンスメタデータオプションの変更]** ダイアログボックスで、次の操作を行います。

   1. **[インスタンスメタデータサービス]** で、**[有効にする]** が選択されていることを確認します。

   1. **[IMDSv2]** の場合は**[オプション]** を選択してください。

   1. [**Save**] を選択してください。

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

**インスタンスで IMDSv1 の使用を復元するには**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI コマンドを、`http-tokens` を `optional` に設定して実行すると、インスタンスメタデータのリクエスト時に IMDSv1 の使用を復元できます。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-tokens optional \
    --http-endpoint enabled
```

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

**インスタンスで IMDSv1 の使用を復元するには**  
`HttpTokens` を `optional` に設定した [Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) コマンドレットを使用して、インスタンスメタデータのリクエスト時に IMDSv1 の使用を復元できます。

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpTokens optional `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## PUT レスポンスホップリミットを変更する
<a name="modify-PUT-response-hop-limit"></a>

既存インスタンスについて、`PUT`リスポンスホップリミットの設定を変更することができます。

現在、PUT 応答ホップ制限の変更をサポートしているのはAWS CLI と AWS SDK のみです。

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

**PUT レスポンスホップリミットを変更するには**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI コマンドを使って、`http-put-response-hop-limit` パラメータを必要なホップ数に設定できます。以下の例ではホップリミットが`3`に設定されています。`http-put-response-hop-limit` の値を指定する場合は`http-endpoint` を `enabled` に設定することも必要です。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-put-response-hop-limit 3 \
    --http-endpoint enabled
```

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

**PUT レスポンスホップリミットを変更するには**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) コマンドレットを使用して、`HttpPutResponseHopLimit` パラメータを必要なホップ数に設定します。以下の例ではホップリミットが`3`に設定されています。`HttpPutResponseHopLimit` の値を指定する場合は`HttpEndpoint` を `enabled` に設定することも必要です。

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpPutResponseHopLimit 3 `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## IMDS IPv4 および IPv6 エンドポイントを有効にする
<a name="enable-ipv6-endpoint-for-existing-instances"></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 をサポートします。

現在、AWS CLI と AWS SDK のみがインスタンス起動後の IMDS IPv6 エンドポイントの有効化をサポートします。

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

**インスタンスで IMDS IPv6 エンドポイントを有効にするには**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI コマンドを使って、`http-protocol-ipv6` パラメータを `enabled` に設定できます。`http-protocol-ipv6` の値を指定する場合は`http-endpoint` を `enabled` に設定することも必要です。

```
aws ec2 modify-instance-metadata-options \
	--instance-id i-1234567890abcdef0 \
	--http-protocol-ipv6 enabled \
	--http-endpoint enabled
```

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

**インスタンスで IMDS IPv6 エンドポイントを有効にするには**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) コマンドレットを使用して、`HttpProtocolIpv6` パラメータを `enabled` に設定します。`HttpProtocolIpv6` の値を指定する場合は`HttpEndpoint` を `enabled` に設定することも必要です。

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpProtocolIpv6 enabled `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## インスタンスメタデータへのアクセスを有効にする
<a name="enable-instance-metadata-on-existing-instances"></a>

使用中の IMDS のバージョンに関係なく、IMDS の HTTP エンドポイントを無効にすることによりインスタンスメタデータへのアクセスをオフにすることができます。HTTP エンドポイントを無効化することにより、この変更はいつでも元に戻すことができます。

次のいずれかの方法を使用して、インスタンスのインスタンスメタデータへのアクセスを有効にします。

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

**インスタンスメタデータへのアクセスを有効にするには**

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

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択してください。

1. インスタンスを選択してください。

1. **[アクション]**、**[インスタンスの設定]**、**[インスタンスメタデータのオプションを変更]** の順に選択してください。

1. **[インスタンスメタデータオプションの変更]** ダイアログボックスで、次の操作を行います。

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

   1. [**Save**] を選択してください。

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

**インスタンスメタデータへのアクセスを有効にするには**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI コマンドを使って、`http-endpoint` パラメータを `enabled` に設定できます。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-endpoint enabled
```

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

**インスタンスメタデータへのアクセスを有効にするには**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) コマンドレットを使用して、`HttpEndpoint` パラメータを `enabled` に設定します。

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpEndpoint enabled).InstanceMetadataOptions
```

------

## インスタンスメタデータへのアクセスを無効にする
<a name="disable-instance-metadata-on-existing-instances"></a>

使用中のインスタンスメタデータサービスのバージョンに関係なく、IMDS の HTTP エンドポイントを無効にすることにより IMDS へのアクセスをオフにすることができます。HTTP エンドポイントを有効化することにより、この変更はいつでも元に戻すことができます。

インスタンスのインスタンスメタデータへのアクセスを無効にするには次のいずれかの方法を使用します。

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

**インスタンスメタデータへのアクセスを無効にするには**

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

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択してください。

1. インスタンスを選択してください。

1. **[アクション]**、**[インスタンスの設定]**、**[インスタンスメタデータのオプションを変更]** の順に選択してください。

1. **[インスタンスメタデータオプションの変更]** ダイアログボックスで、次の操作を行います。

   1. **[インスタンスメタデータサービス]** では**[有効にする]** をオフにします。

   1. [**Save**] を選択してください。

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

**インスタンスメタデータへのアクセスを無効にするには**  
[modify-instance-metadata-options](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-metadata-options.html) CLI コマンドを使って、`http-endpoint` パラメータを `disabled` に設定できます。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --http-endpoint disabled
```

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

**インスタンスメタデータへのアクセスを無効にするには**  
[Edit-EC2InstanceMetadataOption](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) コマンドレットを使用して、`HttpEndpoint` パラメータを `disabled` に設定します。

```
(Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -HttpEndpoint disabled).InstanceMetadataOptions
```

------

## インスタンスメタデータのタグへのアクセスを許可する
<a name="modify-access-to-tags-in-instance-metadata-on-existing-instances"></a>

実行中または停止中のインスタンス上のインスタンスメタデータ内のタグへのアクセスを許可できます。インスタンスごとに、アクセスを明示的に許可する必要があります。アクセスが許可されている場合、インスタンスタグ*キー*は特定の文字制限に準拠している必要があります。それ以外の場合はエラーが発生します。詳細については「[インスタンスメタデータ内のタグへのアクセスを有効にする](work-with-tags-in-IMDS.md#allow-access-to-tags-in-IMDS)」を参照してください。

## トラブルシューティング
<a name="troubleshoot-modifying-an-imdsv1-enabled-instance-fails"></a>

### IMDSv1 が有効化されたインスタンスの変更が失敗する
<a name="modifying-an-imdsv1-enabled-instance-fails"></a>

#### 説明
<a name="modifying-an-imdsv1-enabled-instance-fails-description"></a>

以下のエラーメッセージが表示されます。

`You can't launch instances with IMDSv1 because httpTokensEnforced is enabled for this account. Either launch the instance with httpTokens=required or contact your account owner to disable httpTokensEnforced using the ModifyInstanceMetadataDefaults API or the account settings in the EC2 console.`

#### 原因
<a name="modifying-an-imdsv1-enabled-instance-fails-cause"></a>

このエラーは、EC2 アカウント設定または AWS Organization 宣言型ポリシーが IMDSv2 の使用を強制する (`httpTokensEnforced = enabled`) アカウントで既存のインスタンスを IMDSv1 有効 (`httpTokens = optional`) に変更しようとするときにスローされます。

#### ソリューション
<a name="modifying-an-imdsv1-enabled-instance-fails-solution"></a>

既存のインスタンスで IMDSv1 サポートが必要な場合は、リージョン内のアカウントで IMDSv2 の強制適用を無効にする必要があります。IMDSv2 の強制適用を無効にするには、`HttpTokensEnforced` を `disabled`.に設定します。詳細については、「Amazon EC2 API リファレンス」の「[ModifyInstanceMetadataDefaults](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceMetadataDefaults.html)」を参照してください。この設定をコンソールを使用して行う場合は、「[アカウントレベルで IMDSv2 を強制適用する](configuring-IMDS-new-instances.md#enforce-imdsv2-at-the-account-level)」を参照してください。

IMDSv2 のみ (`httpTokens=required`) を使用することをお勧めします。詳細については「[インスタンスメタデータサービスバージョン 2 の使用への移行](instance-metadata-transition-to-version-2.md)」を参照してください。

 