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

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

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

IMDSv2 の使用を要求する

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

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

デフォルトのインスタンスメタデータバージョンは、各 AWS リージョンのアカウントレベルで設定できます。インスタンスが起動すると、インスタンスメタデータバージョンは自動的にアカウントレベルの値に設定されます。

アカウントレベルのデフォルトを変更したことがない場合は、設定がないことが示されます。

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

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

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

注記

[メタデータのバージョン] のアカウントデフォルトを [V2 のみ (トークンは必須)] に設定する前に、どのインスタンスも IMDSv1 呼び出しを行っていないことを確認してください。MetadataNoToken CloudWatch メトリクスは IMDSv1 呼び出しを追跡します。MetadataNoToken で記録される 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 が使用されるようにそのインスタンスを構成できます。

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

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

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

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

    • [Metadata accessible] (メタデータにアクセス可能) には、[Enabled] (有効) を選択します。

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

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

Old console
新しいインスタンスで IMDSv2 の使用を要求するには
  • Amazon EC2 コンソールで新しいインスタンスを起動するとき、[Configure Instance Details (インスタンスの詳細の設定) ] ページで次のオプションを選択します。

    • [Advanced Details (高度な詳細)] の [ Metadata accessible (メタデータにアクセス可能)] で、[Enabled (有効)] を選択します。

    • [Metadata version (メタデータバージョン)] で、[V2 (token required) (V2 (トークンが必要))] を選択します。

詳細については、「ステップ 3: インスタンスの詳細を設定する」を参照してください。

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

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

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --instance-type c6i.large \ ... --metadata-options "HttpEndpoint=enabled,HttpTokens=required"
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 を新たに設定するには

新しい AMI IMDSv2 を設定するには、次のいずれかの方法を使用します。

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 から起動されるインスタンスでの必須になります。

Import-Module AWS.Tools.EC2 # Required for Amazon.EC2.Model object creation. 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 ポリシーの例については、「インスタンスメタデータの使用」を参照してください。

IPv4 および IPv6 エンドポイントの設定

デフォルトでは、IPv6 エンドポイントは無効です。これは、IPv6 専用サブネットでインスタンスを起動する場合にも当てはまります。インスタンスの起動時に IPv6 エンドポイントを有効にできます。

IMDS の IPv6 エンドポイントは、AWS Nitro System 上に構築されたインスタンスでのみアクセス可能です。

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

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

    • [メタデータの転送] では [有効] を選択します。

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

AWS CLI

以下の 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

次の 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 を再度有効にします。

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

    • [Metadata accessible] (メタデータにアクセス可能) には、[Disabled] (無効) を選択します。

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

Old console
起動時にインスタンスメタデータへのアクセスを無効にするには
  • [Configure Instance Details] (インスタンスの詳細の設定) ページで次のオプションを選択して、Amazon EC2 コンソールでインスタンスを起動します。

    • [Advanced Details (高度な詳細)] の [ Metadata accessible (メタデータにアクセス可能)] で、[Disabled (無効)] を選択します。

詳細については、「ステップ 3: インスタンスの詳細を設定する」を参照してください。

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」プロパティを参照してください。