Snowball Edge の IMDS バージョン - AWS Snowball Edge デベロッパーガイド

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

Snowball Edge の IMDS バージョン

IMDS バージョン 2 または IMDS バージョン 1 を使用して、実行中のインスタンスからインスタンスメタデータにアクセスできます。

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

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

Snow ソフトウェアのバージョンによって、IMDSv1 または IMDSv2、あるいは両方を使用できます。これは、EC2 互換インスタンスで実行されている AMI の種類によっても異なります。Ubuntu 20.04 を実行している AMI など、一部の AMI では IMDSv2 が必要です。インスタンスメタデータサービスは、PUT または GET ヘッダーの有無によって IMDSv1 と IMDSv2 リクエストを区別します。IMDSv2 はこれら両方のヘッダーを使用します。IMDSv1 は GET ヘッダーのみを使用します。

AWS では、IMDSv2 のセキュリティが強化されているため、IMDSv1 ではなく IMDSv2 の使用を推奨しています。詳細については、EC2 Instance Metadata Service の拡張により、オープンファイアウォール、リバースプロキシ、および SSRF の脆弱性に対して多層防御を追加を参照してください。

Snowball Edge の IMDSv2

IMDSv2 を使用してインスタンスメタデータをリクエストする場合、リクエストは次のルールに従う必要があります。

  1. PUT リクエストを使って、インスタンスメタデータサービスに対してセッションを開始します。PUT リクエストは、インスタンスメタデータサービスに対する後続の GET リクエストに含める必要のあるセッショントークンを返します。セッション期間を定義するセッショントークン。セッション期間は、最短で 1 秒、最長で 6 時間に設定可能です。この期間中、以降のリクエストで同じセッショントークンを使用できます。この期間の期限が切れたら、将来のリクエストに使用する新しいセッショントークンを作成する必要があります。このトークンは、IMDSv2を使ってメタデータにアクセスするのに必要です。

  2. トークンを、インスタンスメタデータサービスに対するすべてのGETリクエストに含めます。

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

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

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

    4. 各リクエストについてトークンを再使用するか、あるいは新しいトークンを作成することを選択できます。少数のリクエストでは、インスタンスメタデータサービスにアクセスする必要があるたびに、トークンを生成してすぐに使用するほうが簡単かもしれません。ただし、効率を重視するなら、インスタンスメタデータをリクエストする必要があるたびにPUTリクエストを書くより、トークン期間を長く指定して再使用することができます。それぞれが独自のセッションを表すトークンを同時に使用できる数については、実際的に制限がありません。

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

デフォルトで、PUT リクエストに対するレスポンスのホップ制限 (有効期限) は IP プロトコルレベルで 1 です。IMDS for Snow には、PUT レスポンスのホップ制限を変更する機能はありません。

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

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

  2. セッショントークンヘッダーを TOKEN という変数に格納する

  3. トークンを使って最上位のメタデータ項目をリクエストする

EC2 互換トークンを生成するには、2 つのコマンドを使用します。コマンドは個別に実行することも、1 つのコマンドとして実行することもできます。

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

注記

X-aws-ec2-metadata-token-ttl-seconds は必須ヘッダーです。このヘッダーが含まれていない場合は、「400 - Missing or Invalid Parameters」エラーコードが表示されます。

[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/
注記

トークンの作成時にエラーが発生した場合は、有効なトークンではなくエラーメッセージが変数に格納され、コマンドは機能しません。

トークンを保存し、コマンドを組み合わせることができます。次の例では、上記の 2 つのコマンドを組み合わせて、セッショントークンヘッダーを TOKEN という変数に格納します。

例 組み合わされたコマンド
[ec2-user ~]$ TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/

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

例 トークンの再利用
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id

Snowball Edge の IMDSv1

IMDSv1 はリクエスト/レスポンスモデルを使用します。インスタンスメタデータをリクエストするには、GET リクエストをインスタンスメタデータサービスに送信します。

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/

インスタンスメタデータは実行中のインスタンスから使用できるため、Amazon EC2 コンソールまたは AWS CLI を使用してアクセスする必要はありません。これは、インスタンスから実行するスクリプトを記述しているときに便利です。例えば、インスタンスメタデータからインスタンスのローカル IP アドレスにアクセスして、外部アプリケーションへの接続を管理できます。インスタンスメタデータはいくつかのカテゴリに分けられます。各インスタンスメタデータカテゴリの説明については、本ガイドの「サポートされているインスタンスメタデータとユーザーデータ」を参照してください。

実行中のインスタンス内からインスタンスメタデータのすべてのカテゴリを表示するには、次の IPv4 URI を使用します。

http://169.254.169.254/latest/meta-data/

これらの IP アドレス は、リンクローカルアドレスであり、インスタンスからのみ使用することが可能です。詳細については、Wikipedia のリンクローカルアドレスを参照してください。

すべてのインスタンスメタデータがテキスト (HTTP コンテンツタイプ text/plain) として返されます。

特定のメタデータリソースのリクエストでは、適切な値が返されます。リソースが使用できない場合は「404 - Not Found」HTTP エラーコードが返されます。

一般的なメタデータリソースに対するリクエスト (URI が / 文字で終わる場合) は、使用可能なリソースのリストを返すか、そのようなリソースがない場合は「404 - Not Found」HTTP エラーコードを返します。リスト項目は個別の行に表示され、各行の末尾には改行記号 (ASCII 文字コード 10) が付いています。

IMDSv1 を使って行われたリクエストでは、次の HTTP エラーコードが返されます。

  • 400 ‐ Missing or Invalid ParametersPUT リクエストは無効です。

  • 401 ‐ UnauthorizedGETリクエストで無効なトークンが使用されています。推奨されるアクションは新しいトークンを生成することです。

  • 403 ‐ Forbidden – リクエストが許可されていないか、インスタンスメタデータサービスがオフになっています。