インスタンスメタデータサービスバージョン 2 の仕組み - Amazon Elastic Compute Cloud

インスタンスメタデータサービスバージョン 2 の仕組み

IMDSv2 は、セッション指向リクエストを使用します。セッション指向リクエストを使用して、セッション期間 (1 秒~6 時間) を定義するセッショントークンを作成します。指定した期間中、それ以降のリクエストに同じセッショントークンを使用できます。指定した期間が期限切れになった後、将来のリクエストに使用する新しいセッショントークンを作成する必要があります。

注記

このセクションの例では、インスタンスメタデータサービス (IMDS) の IPv4 アドレス 169.254.169.254 を使用します。IPv6 アドレスを使用して EC2 インスタンスのインスタンスメタデータを取得する場合は、IPv6 アドレスを有効にして使用してください。[fd00:ec2::254]。IMDS の IPv6 アドレスは、IMDSv2 コマンドと互換性があります。IPv6 アドレスは、AWS Nitro System 上に構築されたインスタンスでのみアクセス可能です。

次の例では、PowerShellシェルスクリプトとIMDSv2を使って、最上位インスタンスメタデータアイテムを取得しています。例:

  • PUTリクエストを使って、6 時間 (21,600 秒) のセッショントークンを作成する

  • セッショントークンヘッダーをtokenという名前の変数に保管する

  • トークンを使って最上位メタデータアイテムをリクエストする

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/

トークンを作成した後、期限切れになるまで再使用することができます。次のコマンド例では、インスタンスの起動に AMI の ID が使用されていますが、前の例で $tokenに保管されたトークンが再使用されています。

PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} ` -Method GET -uri http://169.254.169.254/latest/meta-data/ami-id

IMDSv2を使ってインスタンスメタデータをリクエストする際は、リクエストに次の項目が含まれている必要があります。

  1. PUT リクエストを使って、インスタンスメタデータサービスに対してセッションを開始します。PUT リクエストは、インスタンスメタデータサービスに対する後続の GET リクエストに含まれている必要のあるトークンを返します。このトークンは、IMDSv2を使ってメタデータにアクセスするのに必要です。

  2. トークンを IMDS に対するすべての GET リクエストに含めます。トークンの使用が required に設定されている場合、有効なトークンがないリクエスト、または有効期限切れのトークンを持つリクエストで 401 - Unauthorized HTTP エラーコードが発生します。

    • トークンはインスタンス固有のキーです。トークンは他の EC2 インスタンスで有効ではなく、生成されたインスタンスの外で使用しようとすると拒否されます。

    • PUTリクエストには、トークンの有効期限 (TTL) を最大 6 時間 (21,600 秒) まで秒単位で指定するヘッダーが含まれている必要があります。トークンは論理的セッションを表します。TTL は、トークンが有効な時間の長さ、つまりセッションの期間を指定します。

    • トークンの期限が切れた後、インスタンスメタデータにアクセスし続けるためには、別の PUTを使って新しいセッションを作成する必要があります。

    • 各リクエストについてトークンを再使用するか、あるいは新しいトークンを作成することを選択できます。少数のリクエストでは、IMDS にアクセスする必要があるたびに、トークンを生成してすぐに使用するほうが簡単である場合があります。ただし、効率を重視するなら、インスタンスメタデータをリクエストする必要があるたびにPUTリクエストを書くより、トークン期間を長く指定して再使用することができます。それぞれが独自のセッションを表すトークンを同時に使用できる数については、実際的に制限がありません。ただし、IMDSv2 では、通常の IMDS 接続とスロットリングの制限によって制約を受けます。詳細については、「クエリスロットル」を参照してください。

HTTP GETおよびHEADメソッドはIMDSv2インスタンスメタデータリクエストで許可されています。 PUT リクエストは、X-Forwarded-For ヘッダーが含まれている場合、拒否されます。

デフォルトで、PUT リクエストに対するレスポンスには IP プロトコルレベルで 1 のレスポンスホップリミット (有効期限) があります。より大きなホップリミットが必要な場合は、modify-instance-metadata-options AWS CLI コマンドを使って調整できます。例えば、インスタンスで実行されているコンテナサービスとの下位互換性のために、ホップリミットを拡大する必要がある場合があります。詳細については、「既存インスタンスのインスタンスメタデータオプションの変更」を参照してください。