VM メタデータについて


すべての仮想マシン(VM)インスタンスは、メタデータ サーバーにメタデータを保存します。VM からメタデータ サーバーの API にアクセスするのに追加の承認は必要ありません。自動的にアクセスできるようになります。メタデータは key:value ペアとして保存されます。

Compute Engine で実行される VM で使用できるデフォルトのメタデータキーのセットがあります。デフォルトのメタデータキーの一覧については、デフォルトのメタデータ値をご覧ください。個々の VM またはプロジェクトで独自のカスタム メタデータキーを使用することもできます。詳細については、カスタム メタデータの設定をご覧ください。

デフォルトまたはカスタムのメタデータ エントリを設定したら、その VM またはプロジェクトのメタデータ情報を確認できます。メタデータを表示するには、VM メタデータのクエリをご覧ください。

VM メタデータの使用

以下のセクションでは、メタデータ エントリを使用して VM を管理するいくつかのシナリオについて説明します。

起動とシャットダウンのスクリプト

メタデータ サーバーは、起動スクリプトおよびシャットダウン スクリプトと組み合わせて使用すると特に便利です。メタデータ サーバーを使用して、追加の承認を行わずに、VM に関する固有の情報をプログラムで取得できるからです。

たとえば、起動スクリプトで VM の外部 IP のメタデータの key:value ペアを取得して、その IP を使用してデータベースを設定できます。デフォルトのメタデータキーはすべての VM で同じなので、スクリプトはそのまま再利用できます。VM ごとに更新する必要はありません。これにより、アプリケーションのコードの安定性が向上します。

ホスト メンテナンス

メタデータ サーバーは、scheduling/ メタデータ ディレクトリ エントリと maintenance-event 属性を使用して、VM のスケジューリング オプションに関する情報を提供します。これらのメタデータ値を使用して、メンテナンス イベントが近くなったときに通知することで、イベントに備えることができます。詳細については、ライブ マイグレーション通知の取得をご覧ください。

ゲスト属性

ゲスト属性は、VM での実行中にアプリケーションから書き込み可能な特定の型のカスタム メタデータです。ゲスト属性は、頻繁に変更されない少量のデータが必要なユースケースにのみ使用します。ゲスト属性の詳細については、ゲスト属性の設定とクエリをご覧ください。

メタデータのセキュリティに関する考慮事項

メタデータ サーバーにリクエストを送信して情報を取得する際、そのリクエストやそれに対するメタデータ レスポンスが、VM を実行する物理ホストの外に出ることはありません。

ただし、メタデータ URL をクエリできるプロセスであれば、メタデータ サーバーのすべての値にアクセスできます。これには、サーバーに書き込むカスタム メタデータ値も含まれます。機密性の高い値をメタデータ サーバーに書き込むときや、サードパーティのプロセスを実行するときは、注意が必要です。

制限事項

  • X-Forwarded-For ヘッダーを含むリクエストは、メタデータ サーバーで自動的に拒否されます。このヘッダーは、一般に、リクエストにプロキシが使用されていることを示します。この場合、承認されたユーザーからのリクエストではない可能性があります。そのようなリクエストは、セキュリティ上の理由からすべて拒否されます。

  • curl コマンドを使用してサーバーからメタデータを取得する場合、一部のエンコードされた文字はリクエストパスでサポートされません。エンコードされた文字は、クエリパスでのみサポートされています。

    たとえば、次のリクエストは機能しない場合があります。

    curl "http://metadata.google.internal/computeMetadata/v1/VM/service-accounts/123456789-compute%40developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"

    このリクエストを機能させるには、リクエストパスのサポートされていないエンコードされた文字(%40)を同等の許容値(@)に置き換える必要があります。

    curl "http://metadata.google.internal/computeMetadata/v1/VM/service-accounts/1234567898-compute@developer.gserviceaccount.com/?query_path=https%3A%2F%2Flocalhost%3A8200%2Fexample%2Fquery&another_param=true" -H "Metadata-Flavor: Google"

    以下の表に、リクエストパスでサポートされていないエンコード文字をまとめています。

    エンコードされた文字 許容値
    %21
    
    !
    %24
    
    $
    %27
    
    '
    %28
    
    (
    %29
    
    )
    %2A
    
    *
    %2C
    
    ,
    %40
    
    @

メタデータ リクエストの部分

次の表に、メタデータ クエリ リクエストの主要部分を示します。

コンポーネント 説明
ルート URL

すべてのメタデータ値は、次のルート URL のサブパスとして定義されます。


http://metadata.google.internal/computeMetadata/v1
リクエスト ヘッダー

すべてのリクエストに次のヘッダーを含める必要があります。


Metadata-Flavor: Google

このヘッダーにより、そのリクエストがメタデータ値を取得する目的で送信されたものであり、安全でないソースから意図せず送信されたものではないことが示されるため、リクエストしたデータがメタデータ サーバーから返されるようになります。このヘッダーが含まれていないリクエストはメタデータ サーバーで拒否されます。

次のステップ