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

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

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

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 が IMDSv2 を必要とする場合は、起動時の値がデフォルトで [2] になります。それ以外の場合は、デフォルトで [1] になります。

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

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

modify-instance-metadata-defaults コマンドを使用して、IMDS アカウントレベルの設定を変更するリージョンを指定します。インスタンスがコンテナをホストする場合は、--http-tokensrequired に、--http-put-response-hop-limit2 に設定します。それ以外の場合は、-1 を指定して、設定がないことを示します。-1 (設定なし) が指定されているとき、AMI が IMDSv2 を必要とする場合は、起動時の値がデフォルトで 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 } }
すべてのリージョンのアカウントのデフォルトとして IMDSv2 を設定するには

すべてのリージョンの IMDS アカウントレベル設定を変更するには、modify-instance-metadata-defaults コマンドを使用します。インスタンスがコンテナをホストする場合は、--http-tokensrequired に、--http-put-response-hop-limit2 に設定します。それ以外の場合は、-1 を指定して、設定がないことを示します。-1 (設定なし) が指定されているとき、AMI が IMDSv2 を必要とする場合は、起動時の値がデフォルトで 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 が IMDSv2 を必要とする場合は、起動時の値がデフォルトで 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 が IMDSv2 を必要とする場合は、起動時の値がデフォルトで 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
AWS CloudFormation

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

AMI を設定する

新しい AMI を登録したり、既存の AMI を変更したりするときに、imds-support パラメータを v2.0 に設定できます。この AMI から起動されたインスタンスでは、[Metadata version] (メタデータバージョン) に V2 only (token required)] (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-0123456789example \ --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 ポリシーを使用する

IMDSv2 の使用が必須ではない新しいインスタンスをユーザーが起動できないように、IAM ポリシーを作成することもできます。

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

ユーザーがインスタンスメタデータをリクエストする際に IMDSv2 の使用を義務付けるインスタンスみを起動できるようにするには、IMDSv2 を必要とする条件が満たされないとインスタンスを起動できないように指定することができます。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
AWS CloudFormation

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