インスタンスメタデータサービスのオプションを設定する
インスタンスメタデータサービス (IMDS) は、すべての EC2 インスタンスでローカルに実行されます。インスタンスメタデータオプションは、EC2 インスタンス上の IMDS のアクセシビリティと動作を制御する一連の設定を参照します。
各インスタンスで、以下のインスタンスメタデータオプションを設定できます。
- [インスタンスメタデータサービス (IMDS)]:
enabled
|disabled
-
インスタンスで IMDS を有効または無効にすることができます。無効にすると、ユーザーまたはコードはインスタンスのインスタンスメタデータにアクセスできなくなります。
IMDS のインスタンスには、IPv4 (
169.254.169.254
) と IPv6 ([fd00:ec2::254]
) という 2 つのエンドポイントがあります。IMDS を有効にすると、IPv4 エンドポイントが自動的に有効になります。IPv6 エンドポイントを有効にする場合は、明示的に有効にする必要があります。 - [IMDS IPv6 エンドポイント]:
enabled
|disabled
-
インスタンスで IPv6 IMDS エンドポイントを明示的に有効にできます。IPv6 エンドポイントが有効になっている場合、IPv4 エンドポイントは有効なままになります。IPv6 エンドポイントは、Nitro ベースのインスタンスと IPv6 対応サブネット (デュアルスタックまたは IPv6 のみ) でのみサポートされています。
- [メタデータのバージョン]:
IMDSv1 or IMDSv2 (token optional)
|IMDSv2 only (token required)
-
インスタンスメタデータをリクエストするとき、IMDSv2 呼び出しはトークンを要求します。IMDSv1 呼び出はトークンを要求しません。IMDSv1 または IMDSv2 呼び出しを許可する (トークンがオプションの場合) か、IMDSv2 呼び出しのみを許可する (トークンが必須の場合) ように、インスタンスを設定できます。
- [メタデータレスポンスのホップ制限]:
1
~64
-
ホップ制限は、PUT レスポンスが実行できるネットワークホップの数です。ホップ制限は、最小
1
、最大64
に設定できます。コンテナ環境では、ホップ制限を2
に設定することをお勧めします。詳細については、「インスタンスメタデータアクセス考慮事項」を参照してください。 - [インスタンスメタデータ内のタグにアクセスする]:
enabled
|disabled
-
インスタンスのメタデータからインスタンスのタグへのアクセスを有効または無効にすることができます。詳細については、「インスタンスメタデータを使用して EC2 インスタンスのタグを表示する」を参照してください。
インスタンスメタデータオプションを設定する場所
インスタンスメタデータオプションは、次のようにさまざまなレベルで設定できます。
-
アカウント – 各 AWS リージョンのアカウントレベルで、インスタンスメタデータオプションのデフォルト値を設定できます。インスタンスが起動すると、インスタンスメタデータオプションは自動的にアカウントレベルの値に設定されます。これらの値は、起動時に変更できます。アカウントレベルのデフォルト値は、既存のインスタンスには影響しません。
-
AMI – AMI を登録または変更するときに、
imds-support
パラメータをv2.0
に設定できます。この AMI でインスタンスを起動すると、インスタンスメタデータバージョンは自動的に「IMDSv2」に設定され、ホップ制限は「2」に設定されます。 -
インスタンス – 起動時にインスタンスのすべてのインスタンスメタデータオプションを変更し、デフォルト設定を上書きできます。実行中または停止中のインスタンスで起動した後に、インスタンスメタデータオプションを変更することもできます。変更は IAM または SCP ポリシーによって制限される可能性があることに注意してください。
詳細については、新規インスタンスのインスタンスメタデータオプションの設定および既存インスタンスのインスタンスメタデータオプションの変更を参照してください。
インスタンスメタデータオプションの優先順位
各インスタンスメタデータオプションの値は、インスタンスの起動時に優先順位に従って決定されます。最上位の優先順位を持つ階層は次のとおりです。
-
優先順位 1: 起動時のインスタンス設定 – 値は、起動テンプレートまたはインスタンス設定のいずれかで指定できます。ここで指定された値は、アカウントレベルまたは AMI で指定された値を上書きします。
-
優先順位 2: アカウント設定 – インスタンスの起動時に値が指定されていない場合は、アカウントレベルの設定 (AWS リージョンごとに設定) によって値が決まります。アカウントレベルの設定では、各メタデータオプションの値が含まれているか、まったく指定がないことが示されるかのどちらかです。
-
優先順位 3: AMI 設定 – インスタンスの起動時に、またはアカウントレベルで値が指定されていない場合は、AMI 設定によって値が決まります。これは、
HttpTokens
とHttpPutResponseHopLimit
にのみ該当します。
各メタデータオプションは個別に評価されます。インスタンスは、直接インスタンス設定、アカウントレベルのデフォルト、および AMI からの設定を組み合わせて設定できます。
IAM または SCP ポリシーによって変更が制限されていない限り、実行中または停止中のインスタンスで起動した後に、任意のメタデータオプションの値を変更できます。
メタデータオプションの値を決定する – 例 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
に設定されている) が優先されます。
インスタンスのメタデータバージョンを設定する
インスタンスが起動すると、インスタンスのメタデータバージョンの値は IMDSv1 or IMDSv2
(token optional)
または IMDSv2 only (token required)
になります。
インスタンスの起動時に、メタデータバージョンの値を手動で指定するか、デフォルト値を使用できます。値を手動で指定すると、すべてのデフォルト値が上書きされます。値を手動で指定しないことを選択した場合は、次の表に示すように、デフォルト設定の組み合わせによって値が決定されます。
この表は、起動時のインスタンスのメタデータバージョン (列 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 条件キーを使用してインスタンスメタデータオプションを制限する
IAM ポリシーまたは SCP で IAM 条件キーを次のように使用できます。
-
IMDSv2 の使用を要求するようにインスタンスが設定されている場合にのみ、インスタンスの起動を許可する
-
ホップの許可数を制限する
-
インスタンスメタデータへのアクセスを無効にする
注記
注意深く実行し、変更を行う前に慎重なテストを実施する必要があります。以下の情報を記録します。
-
IMDSv2の使用を強制する場合、インスタンスメタデータアクセスのためにIMDSv1を使用するアプリケーションまたはエージェントは休憩します。
-
インスタンスメタデータへのアクセスをすべてオフにする場合、インスタンスメタデータアクセスに依存して機能するアプリケーションまたはエージェントは休憩します。
-
IMDSv2 でトークンを取得する際には、
/latest/api/token
を使用する必要があります。 -
(Windows のみ) PowerShell のバージョンが 4.0 より前の場合は、IMDSv2 の使用を要求するために Windows Management Framework 4.0 に更新
する必要があります。