すべての仮想マシン(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/instance/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/instance/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 このヘッダーにより、そのリクエストがメタデータ値を取得する目的で送信されたものであり、安全でないソースから意図せず送信されたものではないことが示されるため、リクエストしたデータがメタデータ サーバーから返されるようになります。このヘッダーが含まれていないリクエストはメタデータ サーバーで拒否されます。 |
次のステップ
- カスタム メタデータの設定方法を学習する。
- VM メタデータをクエリする方法を学習する。
- メタデータ サーバーからライブ マイグレーションの通知を取得する方法を学習する。
- ゲスト属性を設定してクエリする方法を学習する。