インスタンスメタデータサービスを使用してインスタンスメタデータにアクセスする - Amazon Elastic Compute Cloud

インスタンスメタデータサービスを使用してインスタンスメタデータにアクセスする

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

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

    例については、「IMDSv2 の例」を参照してください。

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

    例については、「IMDSv1 の例」を参照してください。

デフォルトでは、IMDSv1またはIMDSv2のいずれか、あるいは両方を使用できます。

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

PUT または GET ヘッダーは IMDSv2 に固有のものです。これらのヘッダーがリクエストに含まれている場合、そのリクエストは IMDSv2 を対象としています。ヘッダーが存在しない場合、そのリクエストは IMDSv1 を対象としているものとみなされます。

IMDSv2 の拡張のレビューの詳細については、「EC2 Instance Metadata Service の拡張により、オープンファイアウォール、リバースプロキシ、および SSRF の脆弱性に対して多層防御を追加」を参照してください。

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

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

注記

このセクションの例では、インスタンスメタデータサービス (IMDS) の IPv4 アドレス 169.254.169.254 を使用します。IPv6 アドレスを使用して EC2 インスタンスのインスタンスメタデータを取得する場合は、IPv6 アドレスを有効にして使用してください。[fd00:ec2::254]。IMDS の IPv6 アドレスは、IMDSv2 コマンドと互換性があります。IPv6 アドレスには、Nitro ベースのインスタンスIPv6 対応サブネット (デュアルスタックまたは IPv6 のみ) でのみアクセスできます。

次の例では、シェルスクリプトと IMDSv2 を使用して、最上位インスタンスメタデータ項目を取得します。各例の操作は次のとおりです。

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

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

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

2 つの個別のコマンドを実行することも、それらを組み合わせることもできます。

個別のコマンド

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

[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" 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" http://169.254.169.254/latest/meta-data/

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

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id
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 コマンドを使って調整できます。例えば、インスタンスで実行されているコンテナサービスとの下位互換性のために、ホップリミットを拡大する必要がある場合があります。詳細については、「既存インスタンスのインスタンスメタデータオプションの変更」を参照してください。

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

IMDSv2 の使用に移行する場合、次のツールと移行パスを使用することが推奨されます。

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

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

AWS ソフトウェア

最新バージョンの AWS CLI および AWS SDK では、IMDSv2 をサポートしています。IMDSv2 を使用するには、EC2 インスタンスで、最新バージョンの CLI および SDK を使用している必要があります。CLI の更新の詳細については、 AWS Command Line Interface ユーザーガイドの、「AWS CLI のインストール、更新、およびアンインストール」を参照してください。

すべての Amazon Linux 2 と Amazon Linux 2023 ソフトウェアパッケージが IMDSv2 をサポートしています。Amazon Linux 2023 では、IMDSv1 はデフォルトで無効になっています。

IMDSv2 をサポートする最低限の AWS SDK バージョンについては、「サポートされる AWS SDK を使用する」を参照してください。

IMDS パケットアナライザー

IMDS パケットアナライザーは、インスタンスのブートフェーズからの IMDSv1 呼び出しを特定して記録するオープンソースツールです。このツールは、EC2 インスタンスで IMDSv1 呼び出しを行うソフトウェアを特定するのに役立ち、インスタンスで IMDSv2 のみを使用できるようにするために何を更新する必要があるかを正確に特定できます。IMDS パケットアナライザーは、コマンドラインから実行することも、サービスとしてインストールすることもできます。詳細については、GitHub の「IMDS パケットアナライザー」を参照してください

CloudWatch

IMDSv2 では、IMDSv1 がサポートしていない、トークンベースのセッションが利用できます。MetadataNoToken CloudWatch メトリクスは、IMDSv1 を使用しているインスタンスメタデータサービス (IMDS) への呼び出しの数を追跡します。このメトリクスをゼロまでトラッキングすることにより、すべてのソフトウェアが IMDSv2 を使用するようアップグレードされたかどうか、およびいつアップデートが行われたかを測定できます。

IMDSv1 を無効にした後、MetadataNoTokenRejected CloudWatch メトリクスを使用して、IMDSv1 呼び出しが試行および拒否された回数を追跡できます。このメトリクスを追跡することで、IMDSv2 を使用するようにソフトウェアを更新する必要があるかどうかを確認できます。

詳細については、「インスタンスメトリクス」を参照してください。

EC2 API および CLI への更新

新しいインスタンスについては、RunInstances API を使用して、IMDSv2 の使用を義務付ける新しいインスタンスを起動できます。詳細については、「新規インスタンスのインスタンスメタデータオプションの設定」を参照してください。

既存のインスタンスの場合、ModifyInstanceMetadataOptions API を使用して IMDSv2 の使用を要求できます。詳細については、「既存インスタンスのインスタンスメタデータオプションの変更」を参照してください。

Auto Scaling グループによって起動されたすべての新しいインスタンスで IMDSv2 の使用を必須にするために、Auto Scaling グループは起動テンプレートまたは起動設定を使用できます。起動テンプレートの作成時や起動設定の作成時に、IMDSv2 の使用が必須となるように MetadataOptions パラメータを設定する必要があります。Auto Scaling グループは、新しい起動テンプレートまたは起動設定を使用して新しいインスタンスは新しいインスタンスを起動しますが、既存のインスタンスは影響を受けません。Auto Scaling グループ内の既存のインスタンスの場合、ModifyInstanceMetadataOptions API を使用して、既存のインスタンスで IMDSv2 の使用を要求するか、インスタンスを終了すると、Auto Scaling グループは、新しい起動テンプレートまたは起動設定で定義されているインスタンスメタデータオプション設定で新しい置き換えインスタンスを起動します。

デフォルトで IMDSv2 を設定する AMI を使用する

ImdsSupport パラメータに v2.0 を設定した AMI により、インスタンスを (HttpTokens パラメータに required を設定して) 起動する場合は、デフォルトで IMDSv2 を使用するように自動的に設定できます。register-image CLI コマンドを使用して AMI を登録するときに ImdsSupport パラメータを v2.0 に設定することも、modify-image-attribute CLI コマンドを使用して既存の AMI を変更することもできます。詳細については、「AMI を設定する」を参照してください。

IAM ポリシーおよび SCP

以下に示すように、ユーザーの管理には、IAM ポリシーを使用することも、AWS Organizations サービスコントロールポリシー (SCP) を使用することもできます。

  • インスタンスが IMDSv2 を使用するように設定されていない限り、RunInstances API を使用してそのインスタンスを起動することはできません。

  • IMDSv1 を再度有効にするために、ModifyInstanceMetadataOptions API を使用して実行中のインスタンスを変更することはできません。

IAM ポリシーまたは SCP には、次の IAM 条件キーを含める必要があります。

  • ec2:MetadataHttpEndpoint

  • ec2:MetadataHttpPutResponseHopLimit

  • ec2:MetadataHttpTokens

条件キーが含まれているポリシーで指定した状態と、API および CLI 呼び出し時のパラメータが一致しない場合、これらの API または CLI の呼び出しは失敗し UnauthorizedOperation レスポンスが返されます。

さらに、追加の保護レイヤーを選択して、IMDSv1からIMDSv2の変更を強制することもできます。EC2 ロールの認証情報経由でコールされた各 API に関するアクセス管理レイヤーでは、IAM ポリシーまたは AWS Organizations サービスコントロールポリシー (SCP) で新しい条件キーを使用できます。具体的には、IAM ポリシーで値 2.0 を設定した条件キー ec2:RoleDelivery を使用していると、IMDSv1 から取得した EC2 ロールの認証情報を使用した API コールに対して、UnauthorizedOperation レスポンスが返されます。同じことは、SCP によって義務付けられる条件を使ってより広く達成できます。これにより、指定した条件と一致しない API コールに対しては UnauthorizedOperation エラーが返されるため、実際に IMDSv1 から取得した認証情報を使用して API を呼び出すことはできなくなります。

IAM ポリシーの例は、インスタンスメタデータの使用を参照してください。SCP の詳細については、「AWS Organizations ユーザーガイド」の「サービスコントロールポリシー (SCPs)」を参照してください。

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

ステップ 1: 開始時

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

次に、IMDSv2 リクエストを使ってインスタンスメタデータに直接アクセスする (つまり、SDK を使用しない) ソフトウェアを変更します。IMDS パケットアナライザーを使用して、IMDSv2 リクエストを使用するために変更する必要があるソフトウェアを特定できます。

ステップ 2: 移行の進行状況を追跡する

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

ステップ 3: IMDSv1 をまったく使用していない場合

CloudWatch メトリクス MetadataNoToken で記録される IMDSv1 の使用率がゼロであれば、そのインスタンスは IMDSv2 の使用に完全に移行するための準備が整っています。この段階で、次の操作を実行できます。

  • アカウントのデフォルト

    IMDSv2 をアカウントのデフォルトとして必須に設定できます。インスタンスが起動すると、インスタンス設定は自動的にアカウントのデフォルトに設定されます。

    アカウントのデフォルトを設定するには、次の手順を実行します。

    • Amazon EC2 コンソール: EC2 ダッシュボードの [アカウントの属性][データ保護とセキュリティ] で、[IMDS のデフォルト] に対して、[インスタンスメタデータサービス][有効] に設定し、[メタデータのバージョン][V2 のみ (トークンは必須)] に設定します。詳細については、「IMDSv2 をアカウントのデフォルトとして設定する」を参照してください。

    • AWS CLI: modify-instance-metadata-defaults CLI コマンドを使用して、--http-tokens required--http-put-response-hop-limit 2 を指定します。

  • 新規のインスタンス

    新しいインスタンスを起動する際には、以下のいずれかを実行できます。

    • Amazon EC2 コンソール: インスタンス起動ウィザードで、[Metadata accessible] (メタデータにアクセス可能) を [Enabled] (有効) に、[Metadata version] (メタデータバージョン) を [V2 only (token required)] (V2 のみ (トークンが必須)) に設定します。詳細については、「起動時にインスタンスを設定する」を参照してください。

    • AWS CLI: run-instances CLI コマンドを使用して、IMDSv2 が必須となるように指定します。

  • 既存のインスタンス

    既存のインスタンスには、次の操作を実行できます。

    • Amazon EC2 コンソール: [インスタンス] ページでインスタンスを選択し、[アクション][インスタンス設定][インスタンスメタデータオプションの変更] を選択し、[IMDSv2] の場合は [必須] を選択します。詳細については、「IMDSv2 の使用を要求する」を参照してください。

    • AWS CLI: IMDSv2 のみを使用するように指定するには、modify-instance-metadata-options CLI コマンドを使用します。

    実行中のインスタンスで、インスタンスメタデータオプションを変更でき、インスタンスメタデータオプションを変更した後にインスタンスを再起動する必要はありません。

手順 4: すべてのインスタンスが IMDSv2 に移行されたかどうか確認する

IMDSv2 の使用を要求するようにまだ設定されていないインスタンスがないか、つまり、IMDSv2 がまだ optional として設定されているかどうかを確認できます。まだインスタンスが optional として設定されている場合は、前の手順 3 を繰り返し、インスタンスのメタデータオプションを変更して IMDSv2 required を作成できます。

インスタンスをフィルターするには

  • Amazon EC2 コンソール: [インスタンス] ページで、[IMDSv2 = optional] フィルターを使用してインスタンスをフィルタリングします。のフィルタリングについての詳細は、「コンソールを使用したリソースのフィルタリング」を参照してください。また、各インスタンスで IMDSv2 が必須かオプションかを確認することもできます。[基本設定] ウィンドウで [IMDSv2] を切り替えて、[IMDSv2] 列を [インスタンス] テーブルに追加します。

  • AWS CLI: describe-instances CLI コマンドを使用して、次のように metadata-options.http-tokens = optional よってフィルタリングします。

    aws ec2 describe-instances --filters "Name=metadata-options.http-tokens,Values=optional" --query "Reservations[*].Instances[*].[InstanceId]" --output text

手順 5: すべてのインスタンスが IMDSv2 に移行された時点

IAM 条件キーの ec2:MetadataHttpTokensec2:MetadataHttpPutResponseHopLimit、および ec2:MetadataHttpEndpoint により、RunInstancesModifyInstanceMetadataOptions API、および対応する CLI の使用をコントロールできます。ポリシーを作成し、条件キーを使用してポリシーに指定した状態と API コールのパラメータが一致しない場合、API コールまたは CLI コールは失敗して UnauthorizedOperation レスポンスが返されます。IAM ポリシーの例は、インスタンスメタデータの使用を参照してください。

さらに、IMDSv1 を無効にした後、MetadataNoTokenRejected CloudWatch メトリクスを使用して、IMDSv1 呼び出しが試行および拒否された回数を追跡できます。IMDSv1 を無効にした後、正常に動作していないソフトウェアがあり、MetadataNoTokenRejected メトリクスに IMDSv1 呼び出しが記録されている場合は、IMDSv2 を使用するようにこのソフトウェアを更新する必要がある可能性があります。

サポートされる AWS SDK を使用する

IMDSv2 を使用するには、EC2 インスタンスが IMDSv2 の使用をサポートする AWS SDK バージョンを使用する必要があります。最新バージョンの AWS SDK はすべて IMDSv2 の使用をサポートしています。

重要

最新の機能、セキュリティアップデート、および基本的な依存関係を維持するために、SDK のリリースを常に更新することをお勧めします。サポート対象外の SDK バージョンを継続して使用することはお勧めできません。お客様の判断で行ってください。詳細については、「AWS SDK とツールのリファレンスガイド」の「AWS SDK とツールのメンテナンスポリシー」を参照してください。

IMDSv2 の使用をサポートする最小バージョンは次のとおりです。

IMDSv2 の例

Amazon EC2 インスタンスで次の例を実行して、IMDSv2 のインスタンスメタデータを取得します。

Windows インスタンスでは、Windows PowerShell を使用するか、cURL または wget をインストールすることができます。Windows インスタンスにサードパーティーツールをインストールする場合は、呼び出しおよび出力がここに記載されているものとは異なる場合があるため、必ず付属のドキュメントをよく読んでください。

使用できるインスタンスメタデータのバージョンを取得する

次の例では、使用できるインスタンスメタデータのバージョンを取得しています。各バージョンは、新しいインスタンスのメタデータカテゴリがリリースされたときのインスタンスメタデータビルドを参照します。インスタンスメタデータビルドのバージョンは、Amazon EC2 API のバージョンとは相関しません。以前のバージョンに存在する構造および情報に依存するスクリプトがある場合は、以前のバージョンを使用することができます。

cURL
[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" http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest
PowerShell
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/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest

上位レベルのメタデータ項目を取得する

次の例では、上位レベルのメタデータ項目を取得しています。レスポンスの項目の詳細については、「インスタンスメタデータのカテゴリ」を参照してください。

アクセスを許可した場合にのみ、タグがこの出力に含まれることに注意してください。詳細については、「インスタンスメタデータのタグへのアクセスを許可する」を参照してください。

cURL
[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" http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/
PowerShell
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 ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/

メタデータ項目の値を取得する

これらの例では、前出の例で取得された一部の最上位メタデータ項目の値を取得しています。これらのリクエストは、前の例のコマンドを使用して作成された保管されているトークンを使用します。このトークンは有効期限が切れていない必要があります。

cURL
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
PowerShell
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

使用可能なパブリックキーのリストを取得する

次の例では、使用できるパブリックキーの一覧を取得しています。

cURL
[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" http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
PowerShell
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/public-keys/ 0=my-public-key

パブリックキー 0 が使用できるフォーマットを示す

次の例は、パブリックキー0のフォーマットを示しています。

cURL
[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" http://169.254.169.254/latest/meta-data/public-keys/0/ openssh-key
PowerShell
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/public-keys/0/openssh-key openssh-key

パブリックキー 0 を取得する (OpenSSH キーフォーマット)

次の例では、パブリックキー0を取得しています (OpenSSH キーフォーマット)。

cURL
[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" http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
PowerShell
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/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

インスタンスのサブネット ID を取得する

次の例では、インスタンスのサブネット ID を取得しています。

cURL
[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" http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7
PowerShell
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/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

インスタンスのインスタンスタグを取得する

インスタンスメタデータ内のインスタンスタグへのアクセスが有効になっている場合は、インスタンスメタデータからインスタンスのタグを取得できます。詳細については、「インスタンスメタデータからタグを取得する」を参照してください。

IMDSv1 の例

Amazon EC2 インスタンスで次の例を実行して、IMDSv1 のインスタンスメタデータを取得します。

Windows インスタンスでは、Windows PowerShell を使用するか、cURL または wget をインストールすることができます。Windows インスタンスにサードパーティーツールをインストールする場合は、呼び出しおよび出力がここに記載されているものとは異なる場合があるため、必ず付属のドキュメントをよく読んでください。

使用できるインスタンスメタデータのバージョンを取得する

次の例では、使用できるインスタンスメタデータのバージョンを取得しています。各バージョンは、新しいインスタンスのメタデータカテゴリがリリースされたときのインスタンスメタデータビルドを参照します。インスタンスメタデータビルドのバージョンは、Amazon EC2 API のバージョンとは相関しません。以前のバージョンに存在する構造および情報に依存するスクリプトがある場合は、以前のバージョンを使用することができます。

cURL
[ec2-user ~]$ curl http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/ 1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 2007-12-15 2008-02-01 2008-09-01 2009-04-04 2011-01-01 2011-05-01 2012-01-12 2014-02-25 2014-11-05 2015-10-20 2016-04-19 ... latest

上位レベルのメタデータ項目を取得する

次の例では、上位レベルのメタデータ項目を取得しています。レスポンスの項目の詳細については、「インスタンスメタデータのカテゴリ」を参照してください。

アクセスを許可した場合にのみ、タグがこの出力に含まれることに注意してください。詳細については、「インスタンスメタデータのタグへのアクセスを許可する」を参照してください。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname iam/ instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ tags/

メタデータ項目の値を取得する

これらの例では、前の例で取得した一部の最上位メタデータ項目の値を取得しています。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/ami-id ami-0abcdef1234567890
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/reservation-id r-0efghijk987654321
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/local-hostname ip-10-251-50-12.ec2.internal
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-hostname ec2-203-0-113-25.compute-1.amazonaws.com

使用可能なパブリックキーのリストを取得する

次の例では、使用できるパブリックキーの一覧を取得しています。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/ 0=my-public-key

パブリックキー 0 が使用できるフォーマットを示す

次の例は、パブリックキー0のフォーマットを示しています。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/ openssh-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key openssh-key

パブリックキー 0 を取得する (OpenSSH キーフォーマット)

次の例では、パブリックキー0を取得しています (OpenSSH キーフォーマット)。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key ssh-rsa MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ 21uUSfwfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZg3qX4waLG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAaRHhdlQWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9q6q+auNKyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE my-public-key

インスタンスのサブネット ID を取得する

次の例では、インスタンスのサブネット ID を取得しています。

cURL
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7
PowerShell
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id subnet-be9b61d7

インスタンスのインスタンスタグを取得する

インスタンスメタデータ内のインスタンスタグへのアクセスが有効になっている場合は、インスタンスメタデータからインスタンスのタグを取得できます。詳細については、「インスタンスメタデータからタグを取得する」を参照してください。