Lightsail でのインスタンスメタデータサービス (IMDS) へのアクセスと設定 - Amazon Lightsail

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Lightsail でのインスタンスメタデータサービス (IMDS) へのアクセスと設定

次のいずれかのメソッドを使用して、実行中のインスタンスからインスタンスメタデータにアクセスできます。

  • インスタンスメタデータサービスバージョン 1 (IMDSv1) – リクエスト/レスポンスメソッド

  • インスタンスメタデータサービスバージョン 2 (IMDSv2) – セッション指向メソッド

    重要

    Lightsail のすべてのインスタンスブループリントが IMDSv2 をサポートしているわけではありません。MetadataNoToken インスタンスメトリクスは、IMDSv1 を使用しているインスタンスメタデータサービスへの呼び出しの数を追跡します。詳細については、「インスタンスのメトリクスを表示する」を参照してください。

デフォルトでは、IMDSv1またはIMDSv2のいずれか、あるいは両方を使用できます。インスタンスメタデータサービスは、IMDSv2 に固有の PUT ヘッダーまたは GET ヘッダーがリクエストに存在するかどうかに基づいて、IMDSv1 リクエストと IMDSv2 リクエ ストを区別します。詳細については、「EC2 Instance Metadata Service の拡張により、オープンファイアウォール、リバースプロキシ、および SSRF の脆弱性に対して多層防御を追加する」を参照してください。

ローカルコードまたはユーザーに IMDSv2を使用させるように、各インスタンスのインスタンスメタデータサービスを構成することができます。IMDSv2を使用しなければならないように指定すると、IMDSv1はもう機能しなくなります。詳細については、「Linux インスタンス用 Amazon Elastic Compute Cloud ユーザーガイド」の「インスタンスのメタデータオプションを設定する」を参照してください。

インスタンスのメタデータを取得するには、「Linux インスタンス用 Amazon Elastic Compute Cloud ユーザーガイド」の「インスタンスのメタデータを取得する」を参照してください。

注記

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

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

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

重要

Amazon Linux 2023 から起動された Lightsail インスタンスでは、IMDSv2 がデフォルトで設定されます。

次の例では、Linux と PowerShell シェルスクリプト、IMDSv2 を使用して、最上位のインスタンスメタデータ項目を取得します。これらの例では、以下のことを行います。

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

  • セッショントークンヘッダーを TOKEN (Linux の場合) または token (Windows の場合) という名前の変数に保管する

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

次のコマンドを使用してインストールして起動します。

  • Linux の場合:

    • 最初に、次のコマンドを使用してトークンを生成します。

      [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
    • その後、次のコマンドを使用して、トークンを使用して上位レベルのメタデータアイテムを生成します。

      [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
  • Windows の場合:

    • 最初に、次のコマンドを使用してトークンを生成します。

      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/

トークンを作成した後、期限切れになるまで再使用することができます。次の例では、各コマンドはインスタンスの起動に使用されるブループリント (Amazon マシンイメージ (AMI)) の ID を取得します。前の例のトークンは再利用されます。$TOKEN (Linux) または $token (Windows) に保管されます。

  • Linux の場合:

    [ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id
  • Windows の場合:

    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 を使用してインスタンスメタデータをリクエストする際は、リクエストに次の項目が含まれている必要があります。

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

  • トークン – トークンを、インスタンスメタデータサービスに対するすべての GET リクエストに含めます。トークンの使用が required に設定されている場合、有効なトークンがないリクエスト、または有効期限切れのトークンを持つリクエストで 401 - Unauthorized HTTP エラーコードが発生します。トークンの使用要件の変更については、「 コマンドリファレンスupdate-instance-metadata-options」の「」を参照してください。 AWS CLI

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

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

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

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

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

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

インスタンスメタデータサービスバージョン 2 の使用への移行

インスタンスメタデータサービスバージョン 2 (IMDSv2) の使用は任意です。インスタンスメタデータサービスバージョン 1 (IMDSv1) は、終了の期限なく引き続きサポートされます。IMDSv2 の使用に移行する場合、次のツールと移行パスを使用することが推奨されます。

IMDSv2 への移行に役立つツール

お使いのソフトウェアで IMDSv1 が使用されている場合、次のツールを使用して IMDSv2 を使用するようソフトウェアを再構成することができます。

  • AWS ソフトウェア: AWS SDKs の最新バージョンと AWS CLI サポート IMDSv2。IMDSv2 を使用するには、インスタンスに最新バージョンの AWS SDKsと があることを確認します AWS CLI。の更新の詳細については AWS CLI、「 ユーザーガイド」の「 のインストール、更新、アンインストール AWS CLI」を参照してください。 AWS Command Line Interface すべての Amazon Linux 2 ソフトウェアパッケージが IMDSv2 をサポートしています。

  • インスタンスのメトリクス: IMDSv2 はトークンベースのセッションを使用しますが、IMDSv1 は使用しません。MetadataNoToken インスタンスのメトリクスは、IMDSv1 を使用しているインスタンスメタデータサービスへの呼び出しの数を追跡します。このメトリクスをゼロまでトラッキングすることにより、すべてのソフトウェアが IMDSv2 を使用するようアップグレードされたかどうか、およびいつアップデートが行われたかを測定できます。詳細については、Amazon Lightsail」を参照してください。

  • Lightsail API オペレーションと AWS CLI コマンドの更新: 既存のインスタンスでは、 update-instance-metadata-options AWS CLI コマンド (または UpdateInstanceMetadataOptions API オペレーション) を使用して IMDSv2 の使用を要求できます。コマンドの例を次に示します。をインスタンスの名前InstanceNameに置き換え、 RegionName AWS リージョン をインスタンスが存在することを確認してください。

    aws lightsail update-instance-metadata-options --region RegionName --instance-name InstanceName --http-tokens required

IMDSv2 アクセスを必要とする推奨パス

前述のツールを使用し、IMDSv2 への移行にこのパスに従うことを推奨します。

ステップ 1: 開始時

インスタンスでロール認証情報を使用する AWS SDKs AWS CLI、ソフトウェアを IMDSv2-compatibleバージョンに更新します。の更新の詳細については AWS CLI、「 AWS Command Line Interface ユーザーガイド」の「 の最新バージョンへのアップグレード AWS CLI」を参照してください。

次に、IMDSv2 リクエストを使用して、インスタンスメタデータに直接アクセスする (つまり、 AWS SDK を使用しない) ソフトウェアを変更します。 IMDSv2

ステップ 2: 移行中

MetadataNoToken のインスタンスメトリクスを使用して、移行の進行状況を追跡します。このメトリクスは、インスタンスで IMDSv1 を使用しているインスタンスメタデータサービスへの呼び出しの数を示します。詳細については、「インスタンスのメトリクスを表示する」を参照してください。

ステップ 3: すべてのインスタンスですべての準備が完了した時点

インスタンスのメトリクス MetadataNoToken が IMDSv1 の使用ゼロを記録した時点で、すべてのインスタンスにおいてすべての準備が完了します。この段階では、 update-instance-metadata-options コマンドを使用して IMDSv2 の使用を要求できます。実行中のインスタンスでこれらの変更を行うことができます。インスタンスを再起動する必要はありません。

既存のインスタンスのインスタンスメタデータオプションの更新は、Lightsail API または を介してのみ使用できます AWS CLI。現在、Lightsail コンソールでは使用できません。詳細については、「」を参照してくださいupdate-instance-metadata-options

IMDS 関連の追加のドキュメント

次の IMDS ドキュメントは、「Linux インスタンス用 Amazon Elastic Compute Cloud ユーザーガイド」と「Windows インスタンス用 Amazon Elastic Compute クラウドユーザーガイド」で利用できます。

注記

Amazon EC2 では、インスタンスのブループリントは Amazon マシンイメージ (AMIs) と呼ばれます。