新規インスタンスのインスタンスメタデータオプションの設定 - Amazon Elastic Compute Cloud

新規インスタンスのインスタンスメタデータオプションの設定

新規インスタンスに、以下のインスタンスメタデータオプションを設定できます。

注記

これらのオプションの設定はアカウントレベルで直接、または宣言ポリシーを使用して設定されます。これらはインスタンスメタデータオプションを設定する各 AWS リージョン で設定する必要があります。宣言型ポリシーを使用すると、複数のリージョンと複数のアカウントで同時に設定を適用できます。宣言ポリシーが使用されている場合、アカウント内で直接設定を変更することはできません。このトピックでは、アカウント内で設定を直接設定する方法について説明します。宣言ポリシーの使用の詳細についてはAWS Organizations「 ユーザーガイド」「宣言ポリシー」を参照してください。

IMDSv2 の使用を要求する

次の方法を使用して、新しいインスタンスで IMDSv2 の使用を必須にすることができます。

IMDSv2 をアカウントのデフォルトとして設定する

インスタンスメタデータサービス (IMDS) のデフォルトバージョンは各 AWS リージョンのアカウントレベルで設定できます。つまり、新規インスタンスを起動すると、そのインスタンスメタデータバージョンは自動的にアカウントレベルのデフォルトに設定されます。ただし、起動時または起動後に値を手動で上書きできます。アカウントレベルの設定と手動オーバーライドがインスタンスに与える影響の詳細については「インスタンスメタデータオプションの優先順位」を参照してください。

注記

アカウントレベルのデフォルトを設定しても、既存のインスタンスはリセットされません。例えば、アカウントレベルのデフォルトを IMDSv2 に設定しても、IMDSv1 に設定されている既存のインスタンスは影響を受けません。既存のインスタンスの値を変更する場合はインスタンス自体の値を手動で変更する必要があります。

インスタンスメタデータバージョンのアカウントのデフォルトを IMDSv2 に設定すると、アカウント内のすべての新しいインスタンスを IMDSv2 で起動できます。そうすると、IMDSv1 は無効になります。このアカウントデフォルトではインスタンスを起動すると、インスタンスのデフォルト値は次のようになります。

  • コンソール: [メタデータのバージョン][V2 のみ (トークンは必須)] に設定され、[メタデータレスポンスのホップ制限][2] に設定されます。

  • AWS CLI: HttpTokensrequired に設定され、HttpPutResponseHopLimit2 に設定されます。

注記

アカウントのデフォルトを IMDSv2 に設定する前に、インスタンスが IMDSv1 に依存していないことを確認してください。詳細については、「IMDSv2 を必要とする推奨パス」を参照してください。

Console
指定したリージョンのアカウントのデフォルトとして IMDSv2 を設定するには
  1. Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

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

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

  4. [アカウントの属性][データ保護とセキュリティ] を選択してください。

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

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

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

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

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

    4. [更新] を選択します。

AWS CLI
指定したリージョンのアカウントのデフォルトとして IMDSv2 を設定するには

modify-instance-metadata-defaults コマンドを使用して、IMDS アカウントレベルの設定を変更するリージョンを指定します。インスタンスがコンテナをホストする場合は--http-tokensrequired に、--http-put-response-hop-limit2 に設定します。それ以外の場合は-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 コマンドを使用して、リージョンを指定します。

aws ec2 get-instance-metadata-defaults --region us-east-1

以下は出力の例です。

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

ManagedBy フィールドは設定を設定したエンティティを示します。この例では accountは設定がアカウントで直接設定されたことを示します。declarative-policyという値は宣言的ポリシーによって設定が構成されたことを意味します。詳細については、「AWS OrganizationsIAM ユーザーガイド」の「 管理されたポリシー」を参照してください。

すべてのリージョンのアカウントのデフォルトとして IMDSv2 を設定するには

すべてのリージョンの IMDS アカウントレベル設定を変更するにはmodify-instance-metadata-defaults コマンドを使用します。インスタンスがコンテナをホストする場合は--http-tokensrequired に、--http-put-response-hop-limit2 に設定します。それ以外の場合は-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 コマンドを使用します。

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 コマンドレットを使用して、IMDS アカウントレベルの設定を変更するリージョンを指定します。インスタンスがコンテナをホストする場合は-HttpTokenrequired に、-HttpPutResponseHopLimit2 に設定します。それ以外の場合は-1 を指定して、設定がないことを示します。-1 (設定なし) が指定されているとき、AMI に ImdsSupport: v2.0 の設定がある場合は起動時の値がデフォルトで 2 になります。それ以外の場合はデフォルトで 1 になります。

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

以下は出力の例です。

True
指定したリージョンのインスタンスメタデータオプションのデフォルトのアカウント設定を表示するには

Get-EC2InstanceMetadataDefault コマンドレットを使用して、リージョンを指定します。

Get-EC2InstanceMetadataDefault -Region us-east-1 | Format-List

以下は出力の例です。

HttpEndpoint : HttpPutResponseHopLimit : 2 HttpTokens : required InstanceMetadataTags :
すべてのリージョンのアカウントのデフォルトとして IMDSv2 を設定するには

Edit-EC2InstanceMetadataDefault コマンドレットを使用して、すべてのリージョンの IMDS アカウントレベルの設定を変更します。インスタンスがコンテナをホストする場合は-HttpTokenrequired に、-HttpPutResponseHopLimit2 に設定します。それ以外の場合は-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 コマンドレットを使用します。

(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 を強制適用する

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

注記

アカウントレベルで IMDSv2 の強制適用を有効にする前に、アプリケーションと AMI が IMDSv2 をサポートしていることを確認してください。詳細については、「IMDSv2 を必要とする推奨パス」を参照してください。IMDSv2 の強制適用が有効になっており、httpTokens が起動時のインスタンス設定、アカウント設定、または AMI 構成のいずれかで required に設定されていない場合、インスタンスの起動は失敗します。トラブルシューティング情報については、「IMDSv1 が有効化されたインスタンスの起動が失敗する」を参照してください。

注記

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

Console
指定されたリージョン内のアカウントに IMDSv2 を強制適用する
  1. Amazon EC2 コンソールの https://console.aws.amazon.com/ec2/ を開いてください。

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

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

  4. [アカウントの属性][データ保護とセキュリティ] を選択してください。

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

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

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

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

    3. [更新] を選択します。

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

modify-instance-metadata-defaults コマンドを使用して、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 コマンドを使用して、リージョンを指定します。

aws ec2 get-instance-metadata-defaults --region us-east-1

以下は出力の例です。

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

ManagedBy フィールドは設定を設定したエンティティを示します。この例では accountは設定がアカウントで直接設定されたことを示します。declarative-policyという値は宣言的ポリシーによって設定が構成されたことを意味します。詳細については、「AWS Organizations ユーザーガイド」の「宣言型ポリシー」を参照してください。

すべてのリージョンのアカウントに IMDSv2 を強制適用する

modify-instance-metadata-defaults コマンドを使用して、すべてのリージョンで 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 コマンドを使用します。

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 コマンドレットを使用して、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 ユーザーガイド」の「宣言型ポリシー」を参照してください。

すべてのリージョンのアカウントに IMDSv2 を強制適用する

modify-instance-metadata-defaults コマンドを使用して、すべてのリージョンで 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 コマンドレットを使用して、すべてのリージョンの IMDS アカウントレベル設定を変更します。インスタンスがコンテナをホストする場合は-HttpTokenrequired に、-HttpPutResponseHopLimit2 に設定します。それ以外の場合は-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 コマンドレットを使用します。

(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 が使用されるようにそのインスタンスを構成できます。

  • Amazon EC2 コンソール: [Metadata version] (メタデータバージョン) で、[V2 only (token required)] (V2 のみ (トークンが必須)) を設定します。

  • AWS CLI: HttpTokensrequired を設定します。

IMDSv2 が必須であることを指定する場合、[メタデータにアクセス可能][有効] (コンソールの場合) を設定するか、HttpEndpointenabled (AWS CLI の場合) を設定して、インスタンスメタデータサービス (IMDS) のエンドポイントも有効にする必要があります。

コンテナ環境ではIMDSv2 が要求されている場合、ホップ制限を 2 に設定することをお勧めします。詳細については、「インスタンスメタデータアクセス考慮事項」を参照してください。

Console
新しいインスタンスで IMDSv2 の使用を要求するには
  • Amazon EC2 コンソールで新しいインスタンスを起動するとき、[Advanced details] (高度な詳細) を展開し、次の操作を行います。

    • [Metadata accessible] (メタデータにアクセス可能) には[Enabled] (有効) を選択してください。

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

    • (コンテナ環境) [メタデータレスポンスのホップ制限] で、2 を選択してください。

    詳細については、「高度な詳細」を参照してください。

AWS CLI
新しいインスタンスで IMDSv2 の使用を要求するには

次の run-instances の例ではc6i.large--metadata-options に設定して HttpTokens=required インスタンスを起動します。HttpTokens の値を指定する場合はHttpEndpointenabled に設定する必要があります。メタデータの取得リクエストではセキュリティで保護されたトークンヘッダーは 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 コマンドレット例は、MetadataOptions_HttpEndpointenabled に、MetadataOptions_HttpTokens パラメータが required に設定された c6i.large インスタンスを起動します。HttpTokens の値を指定する場合はHttpEndpointenabled に設定する必要があります。メタデータの取得リクエストではセキュリティで保護されたトークンヘッダーは required に設定されるので、インスタンスメタデータのリクエストに際してはそのインスタンスは必ず IMDSv2 を使用することになります。

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

CloudFormation を使用してインスタンスのメタデータオプションを指定するには「AWS CloudFormation ユーザーガイド」の「AWS::EC2::LaunchTemplate MetadataOptions」プロパティを参照してください。

AMI を設定する

新しい AMI を登録したり、既存の AMI を変更したりするときに、imds-support パラメータを v2.0 に設定できます。この AMI から起動されたインスタンスでは、[メタデータのバージョン][V2 のみ (トークンは必須)] (コンソールの場合) に設定されるか、HttpTokensrequired (AWS CLI の場合) に設定されます。この設定が行われている場合、インスタンスメタデータがリクエストされる際には IMDSv2 を使用することが、インスタンスでの必須になります。

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

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

IAM ポリシーを使用する

次のいずれかを実行する IAM ポリシーを作成できます。

  • 新しいインスタンスで IMDSv2 を必須と設定する場合を除き、ユーザーが新しいインスタンスを起動することを防ぐ。

  • ユーザーが ModifyInstanceMetadataOptions API をユ呼び出して実行中のインスタンスのメタデータオプションを変更することを防ぐ。ModifyInstanceMetadataOptions httpTokens プロパティへのアクセスを制限して、実行中のインスタンスの意図しない更新が行われないようにする。

  • ユーザーが ModifyInstanceMetadataDefaults API を呼び出して httpTokens と httpTokensEnforced 両方のアカウントデフォルト設定を変更することを防ぐ。これらの 2 つのプロパティへのアクセスを制限することで、承認済みのロール以外はアカウントのデフォルトを変更できないようにします。

IAM ポリシーにより、すべての新しいインスタンスでの IMDSv2 の使用を必須にするには

ユーザーが起動できるインスタンスを、メタデータのリクエスト時に IMDSv2 の使用を必須としているインスタンスに限定するには、次の手順を実行します。

  • ModifyInstanceMetadataOptionsModifyInstanceMetadataDefaults API の両方、より具体的には httpTokenshttpTokensEnforced プロパティへのアクセスを制限します。

  • 次に、アカウントのデフォルトを httpTokens = requiredhttpTokensEnforced = enabled に設定します。

    IAM ポリシーの例についてはインスタンスメタデータの使用を参照してください。

IMDS IPv4 および IPv6 エンドポイントを有効にする

IMDS のインスタンスにはIPv4 (169.254.169.254) と IPv6 ([fd00:ec2::254]) という 2 つのエンドポイントがあります。IMDS を有効にすると、IPv4 エンドポイントが自動的に有効になります。IPv6 専用サブネットに対してインスタンスを起動しても、その IPv6 エンドポイントは無効のままになります。IPv6 エンドポイントを有効にするには明示的に有効にする必要があります。IPv6 エンドポイントを有効にしても、IPv4 エンドポイントは有効なままになります。

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

IPv6 エンドポイントを有効にするための要件

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

Console
インスタンス起動時に IMDS IPv6 エンドポイントを有効にするには
  • [Advanced details] (高度な詳細) で以下のように指定して、Amazon EC2 コンソールでインスタンスを起動します。

    • メタデータ IPv6 エンドポイント で、[有効] を選択します。

詳細については、「高度な詳細」を参照してください。

AWS CLI
インスタンス起動時に IMDS IPv6 エンドポイントを有効にするには

以下の run-instances の例ではIMDS 用に IPv6 エンドポイントが有効化された、c6i.large インスタンスを起動しています。IPv6 エンドポイントを有効にするには--metadata-options パラメータに HttpProtocolIpv6=enabled を指定します。HttpProtocolIpv6 の値を指定する場合はHttpEndpointenabled に設定する必要があります。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c6i.large \ ... --metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
PowerShell
インスタンス起動時に IMDS IPv6 エンドポイントを有効にするには

次の New-EC2Instance コマンドレット例は、IMDS 用に IPv6 エンドポイントが有効化された c6i.large インスタンスを起動します。IPv6 エンドポイントを有効にするにはMetadataOptions_HttpProtocolIpv6enabled に指定します。MetadataOptions_HttpProtocolIpv6 の値を指定する場合はMetadataOptions_HttpEndpointenabled に設定する必要があります。

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

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

インスタンスを起動するときに IMDS を無効にすることで、インスタンスのメタデータへのアクセスを無効にできます。IMDS を再度有効にすると、その後でアクセスを有効にできます。詳細については、「インスタンスメタデータへのアクセスを有効にする」を参照してください。

重要

IMDS は起動時または起動後に無効化できます。起動時に IMDS を無効にすると、以下が機能しなくなる可能性があります。

  • インスタンスへの SSH アクセスがない可能性があります。キーは通常 EC2 インスタンスのメタデータから提供され、アクセスされるため、インスタンスのパブリック SSH キーである public-keys/0/openssh-key にはアクセスできません。

  • EC2 ユーザーデータは利用できず、インスタンスの起動時には実行されません。EC2 ユーザーデータは IMDS でホストされます。IMDS を無効にすると、ユーザーデータへのアクセスは事実上無効になります。

この機能にアクセスするには起動後に IMDS を再度有効にします。

Console
起動時にインスタンスメタデータへのアクセスを無効にするには
  • [Advanced details] (高度な詳細) で以下のように指定して、Amazon EC2 コンソールでインスタンスを起動します。

    • [Metadata accessible] (メタデータにアクセス可能) には[Disabled] (無効) を選択してください。

詳細については、「高度な詳細」を参照してください。

AWS CLI
起動時にインスタンスメタデータへのアクセスを無効にするには

--metadata-optionsHttpEndpoint=disabled を設定し、インスタンスを起動します。

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c6i.large \ ... --metadata-options "HttpEndpoint=disabled"
PowerShell
起動時にインスタンスメタデータへのアクセスを無効にするには

次の New-EC2Instance コマンドレット例は、MetadataOptions_HttpEndpointdisabled に設定されたインスタンスを起動します。

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

CloudFormation を使用してインスタンスのメタデータオプションを指定するには「CloudFormation ユーザーガイド」の「AWS::EC2::LaunchTemplate MetadataOptions」プロパティを参照してください。

インスタンスメタデータのタグへのアクセスを許可する

デフォルトではインスタンスメタデータ内のインスタンスタグへはアクセスできません。インスタンスごとに、アクセスを明示的に許可する必要があります。アクセスが許可されている場合、インスタンスタグキーは特定の文字制限に準拠している必要があります。それ以外の場合はインスタンスの起動に失敗します。詳細については、「インスタンスメタデータ内のタグへのアクセスを有効にする」を参照してください。