Jede virtuelle Maschine (VM) speichert ihre Metadaten in Verzeichnissen auf einem Metadatenserver. Ihre VM hat automatisch ohne zusätzliche Autorisierung Zugriff auf diese Metadatenserver-API. Sie können die in den folgenden Abschnitten dieses Dokuments erläuterten Methoden verwenden, um VM-Metadatenwerte aufzurufen und abzufragen:
- Metadaten programmatisch von innerhalb einer VM abfragen
- Benutzerdefinierte Metadaten für Ihre VMs aufrufen
Wenn beim Zugriff auf den Metadatenserver Fehler auftreten, lesen Sie den Hilfeartikel Fehlerbehebung bei Zugriffsproblemen mit Metadatenserver.
Hinweise
- Verwenden Sie für Windows Server-VMs PowerShell 3.0 oder höher.
Wir empfehlen, die kopierten Codeblöcke mit
ctrl+v
einzufügen. - Sehen Sie sich die Grundlagen dazu an, wie Sie VM-Metadaten für Compute Engine definieren, kategorisieren und anordnen können. Weitere Informationen finden Sie unter Informationen zu VM-Metadaten.
-
Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben.
Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft.
Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) für die VM oder das Projekt - Wenn Ihre VMs Dienstkonten verwenden: Service Account User (
roles/iam.serviceAccountUser
) für das Dienstkonto oder Projekt -
So rufen Sie benutzerdefinierte Projektmetadaten auf:
compute.projects.get
-
Um benutzerdefinierte zonale Metadaten aufzurufen:
compute.instanceSettings.get
-
So rufen Sie benutzerdefinierte Metadaten für eine VM-Instanz auf:
compute.instances.get
-
Wenn Ihre VMs Dienstkonten verwenden:
iam.serviceAccounts.actAs
- Einzelnen Metadateneintrag abfragen
- Liste der Metadatenverzeichnisse abfragen
- Metadatenänderungen mit dem
wait-for-change
-feature abfragen - Sie können den Metadatenserver für alle VMs über den HTTP-Endpunkt (
http://metadata.google.internal/computeMetadata/v1
) abfragen. Bei geschützten VMs können Sie den Metadatenserver mit einer der folgenden Methoden abfragen:
- Der HTTP-Endpunkt:
http://metadata.google.internal/computeMetadata/v1
- Der https-Endpunkt: (
https://metadata.google.internal/computeMetadata/v1
). Dieser https-Endpunkt ist in der Vorabversion verfügbar. Das Format für die Abfrage des HTTPS-Endpunkts finden Sie unter Metadaten mit dem HTTPS-Metadatenserver-Endpunkt abfragen.
- Der HTTP-Endpunkt:
- HTTP-Endpunkt:
http://metadata.google.internal/computeMetadata/v1
http://169.254.169.254/computeMetadata/v1
http://metadata.goog/computeMetadata/v1
- https-Endpunkt (Vorabversion):
Dies ist die einzige URL, die während der Vorschauphase unterstützt wird.https://metadata.google.internal/computeMetadata/v1
- Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Verwenden Sie in Ihrer Linux-VM das
curl
-Tool, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um einen Metadateneintrag für eine VM-Instanz oder ein Projekt abzufragen:curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" -H "Metadata-Flavor: Google"
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
Führen Sie beispielsweise die folgende Abfrage aus, um das Boot-Image für die VM abzufragen:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/image" -H "Metadata-Flavor: Google"
Die Ausgabe sieht etwa so aus:
projects/rhel-cloud/global/images/rhel-8-v20210122
-
Wenn Sie den Metadatenschlüssel
- Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Verwenden Sie in Ihrer Windows-VM den Befehl
Invoke-RestMethod
, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um einen Metadateneintrag für eine VM-Instanz oder ein Projekt abzufragen:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY") $value
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
Führen Sie beispielsweise die folgende Abfrage aus, um das Boot-Image für die VM abzufragen:
PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/image") $value
Die Ausgabe sieht etwa so aus:
projects/windows-cloud/global/images/windows-server-2019-dc-v20210112
-
Wenn Sie den Metadatenschlüssel
Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Führen Sie den folgenden Befehl aus, um das Metadatenverzeichnis einer VM-Instanz oder eines Projekts über Ihre Linux-VM abzufragen:
curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/" -H "Metadata-Flavor: Google"
Ersetzen Sie
PATH_TO_METADATA_DIRECTORY
durch den Pfad zum Metadatenverzeichnis der VM-Instanz oder des Projekts, für das Sie die Einträge rekursiv abfragen möchten. Beispiel:-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
attributes
aufrufen möchten, müssen Sie den Pfadproject/attributes/
angeben. -
Wenn Sie den Metadatenverzeichniseintrag der VM-Instanz
disks
aufrufen möchten, müssen Sie den Pfadinstance/disks/
angeben.
Betrachten Sie beispielsweise den Eintrag
disks/
, bei dem es sich um ein Verzeichnis von Laufwerken handelt, die mit der VM verbunden sind. Führen Sie die folgenden Schritte aus, um den Eintragdisks/
abzufragen:Führen Sie den
curl
-Toolbefehl im Laufwerksverzeichnis aus.user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/" -H "Metadata-Flavor: Google"
Die Ausgabe sieht in etwa so aus:
0/ 1/ 2/
Wenn Sie weitere Informationen zum Verzeichnis
0/
des Laufwerks benötigen, können Sie die spezifische URL für dieses Verzeichnis abfragen:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/" -H "Metadata-Flavor: Google"
Die Ausgabe sieht etwa so aus:
device-name index mode type
Führen Sie Folgendes aus, um dann den Laufwerktyp (
type
) für die Laufwerke0/
abzufragen:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type" -H "Metadata-Flavor: Google"
Die Ausgabe sieht etwa so aus:
PERSISTENT
-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Führen Sie den folgenden Befehl aus, um das Metadatenverzeichnis einer VM-Instanz oder eines Projekts über Ihre Windows-VM abzufragen:
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/") $value
Ersetzen Sie
PATH_TO_METADATA_DIRECTORY
durch den Pfad zum Metadatenverzeichnis der VM-Instanz oder des Projekts, für das Sie die Einträge rekursiv abfragen möchten. Beispiel:-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
attributes
aufrufen möchten, müssen Sie den Pfadproject/attributes/
angeben. -
Wenn Sie den Metadatenverzeichniseintrag der VM-Instanz
disks
aufrufen möchten, müssen Sie den Pfadinstance/disks/
angeben.
Betrachten Sie beispielsweise den Eintrag
disks/
, bei dem es sich um ein Verzeichnis von Laufwerken handelt, die mit der VM verbunden sind. Führen Sie die folgenden Schritte aus, um den Eintragdisks/
abzufragen:Führen Sie den
Invoke-RestMethod
-Befehl im Laufwerksverzeichnis aus.PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/") $value
Die Ausgabe sieht etwa so aus:
0/ 1/ 2/
Wenn Sie weitere Informationen zum Verzeichnis
0/
des Laufwerks benötigen, können Sie die spezifische URL für dieses Verzeichnis abfragen:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/") $value
Die Ausgabe sieht etwa so aus:
device-name index mode type
Führen Sie Folgendes aus, um dann den Laufwerktyp (
type
) für die Laufwerke0/
abzufragen:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/0/type") $value
Die Ausgabe sieht etwa so aus:
PERSISTENT
-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Verwenden Sie in Ihrer Linux-VM das
curl
-Tool, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um die Einträge für das Metadatenverzeichnis einer VM-Instanz oder eines Projekts rekursiv abzufragen:curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/?recursive=true" -H "Metadata-Flavor: Google"
Ersetzen Sie
PATH_TO_METADATA_DIRECTORY
durch den Pfad zum Metadatenverzeichnis der VM-Instanz oder des Projekts, für das Sie die Einträge rekursiv abfragen möchten. Beispiel:-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
attributes
aufrufen möchten, müssen Sie den Pfadproject/attributes/
angeben. -
Wenn Sie den Metadatenverzeichniseintrag der VM-Instanz
disks
aufrufen möchten, müssen Sie den Pfadinstance/disks/
angeben.
Mit dem folgenden Befehl werden beispielsweise die Instanzmetadateneinträge für das Verzeichnis
disks/
rekursiv abgefragt.user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true" -H "Metadata-Flavor: Google"
Die Ausgabe sieht in etwa so aus:
[{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
Standardmäßig werden rekursive Inhalte im JSON-Format angezeigt. Wenn Sie diese Inhalte im Textformat zurückgeben möchten, hängen Sie den Abfrageparameter
alt=text
an:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text" -H "Metadata-Flavor: Google"
Die Ausgabe sieht etwa so aus:
0/device-name boot 0/index 0 0/mode READ_WRITE 0/type PERSISTENT 1/device-name persistent-disk-1 1/index 1 1/mode READ_WRITE 1/type PERSISTENT 2/device-name persistent-disk-1 2/index 2 2/mode READ_ONLY 2/type PERSISTENT
-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Verwenden Sie in Ihrer Windows-VM den Befehl
Invoke-RestMethod
, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um die Einträge für das Metadatenverzeichnis einer VM-Instanz oder eines Projekts rekursiv abzufragen:$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_DIRECTORY/?recursive=true") $valueErsetzen Sie
PATH_TO_METADATA_DIRECTORY
durch den Pfad zum Metadatenverzeichnis der VM-Instanz oder des Projekts, für das Sie die Einträge rekursiv abfragen möchten. Beispiel:-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
attributes
aufrufen möchten, müssen Sie den Pfadproject/attributes/
angeben. -
Wenn Sie den Metadatenverzeichniseintrag der VM-Instanz
disks
aufrufen möchten, müssen Sie den Pfadinstance/disks/
angeben.
Mit dem folgenden Befehl werden beispielsweise die Instanzmetadateneinträge für das Verzeichnis
disks/
rekursiv abgefragt.PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true") $value
Die Ausgabe sieht in etwa so aus:
[{"deviceName":"boot","index":0,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-1","index":1,"mode":"READ_WRITE","type":"PERSISTENT"}, {"deviceName":"persistent-disk-2","index":2,"mode":"READ_ONLY","type":"PERSISTENT"}]
Standardmäßig werden rekursive Inhalte im JSON-Format angezeigt. Wenn Sie diese Inhalte im Textformat zurückgeben möchten, hängen Sie den Abfrageparameter
alt=text
an:PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/instance/disks/?recursive=true&alt=text") $value
Die Ausgabe sieht etwa so aus:
0/device-name boot 0/index 0 0/mode READ_WRITE 0/type PERSISTENT 1/device-name persistent-disk-1 1/index 1 1/mode READ_WRITE 1/type PERSISTENT 2/device-name persistent-disk-1 2/index 2 2/mode READ_ONLY 2/type PERSISTENT
-
Wenn Sie den Verzeichniseintrag für die Projektmetadaten
- Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Verwenden Sie in Ihrer Linux-VM das
curl
-Tool, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um das Datenformat der Abfrageantwort für den Metadateneintrag einer VM-Instanz oder eines Projekts zu ändern:curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?alt=DATA_FORMAT" -H "Metadata-Flavor: Google"
Ersetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
DATA_FORMAT
: das Format, in dem die Abfrageantwortdaten abgerufen werden sollen, z. B.text
oderjson
.
-
- Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Verwenden Sie in Ihrer Windows-VM den Befehl
Invoke-RestMethod
, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um das Datenformat der Abfrageantwort für den Metadateneintrag einer VM-Instanz oder eines Projekts zu ändern:$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?alt=DATA_FORMAT") $valueErsetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
DATA_FORMAT
: das Format, in dem die Abfrageantwortdaten abgerufen werden sollen, z. B.text
oderjson
.
-
Sie können eine
wait-for-change
-Anfrage nur für einen Metadatenendpunkt oder rekursiv für den Inhalt eines Verzeichnisses ausführen. Sie können keinewait-for-change
-Anfrage für einen Verzeichniseintrag ausführen. Wenn Sie dies versuchen, kann der Metadatenserver Ihre Anfrage nicht ausführen und gibt den Fehler 400 (ungültige Anfrage) zurück.Sie können keine
wait-for-change
-Anfrage für ein Dienstkonto-Token ausführen. Wenn Sie versuchen, einewait-for-change
-Anfrage an die URL des Dienstkonto-Tokens zu senden, schlägt die Anfrage sofort fehl und gibt den Fehler 400 (ungültige Anfrage) zurück.- Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Verwenden Sie in Ihrer Linux-VM das
curl
-Tool, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um einewait-for-change
-Anfrage für den Metadateneintrag einer VM-Instanz oder eines Projekts durchzuführen:curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true" -H "Metadata-Flavor: Google"
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
Wenn der angegebene Metadatenschlüssel verändert wurde, gibt die Anfrage den neuen Wert zurück.
-
Wenn Sie den Metadatenschlüssel
- Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Verwenden Sie in Ihrer Windows-VM den Befehl
Invoke-RestMethod
, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um einewait-for-change
-Anfrage für den Metadateneintrag einer VM-Instanz oder eines Projekts durchzuführen:$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true") $value
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
Wenn der angegebene Metadatenschlüssel verändert wurde, gibt die Anfrage den neuen Wert zurück.
-
Wenn Sie den Metadatenschlüssel
- Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Stellen Sie eine Anfrage an diesen Schlüssel und drucken Sie die Header. Verwenden Sie dazu das
curl
-Tool mit dem Flag-v
. Führen Sie den folgenden Befehl aus, um das aktuelle ETag für den Metadateneintrag einer VM-Instanz oder eines Projekts abzurufen:curl -v "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" -H "Metadata-Flavor: Google"
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
Mit dem folgenden Befehl wird beispielsweise der aktuelle ETag-Wert für den Metadatenschlüssel
tags
der Instanz abgerufen.user@myinst:~$ curl -v "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
Die Ausgabe sieht in etwa so aus:
* About to connect() to metadata port 80 (#0) * Trying 169.254.169.254... connected * Connected to metadata (169.254.169.254) port 80 (#0) > GET /computeMetadata/v1/instance/tags HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: metadata > Accept: */* > < HTTP/1.1 200 OK < Content-Type: application/text < ETag: 411261ca6c9e654e < Date: Wed, 13 Feb 2013 22:43:45 GMT < Server: Metadata Server for VM < Content-Length: 26 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < http-server db-client
-
Wenn Sie den Metadatenschlüssel
Sie können diesen ETag-Wert dann zusammen mit dem
curl
-Toolbefehl in derwait-for-change
-Anfrage verwenden. Führen Sie den folgenden Befehl aus, um den ETag-Wert für diewait-for-change
-Anfrage von Instanz- oder Projektmetadaten zu verwenden:curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&last_etag=ETAG" -H "Metadata-Flavor: Google"
Ersetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
ETAG
: der ETag-Wert für den Metadatenschlüssel.
In diesem Beispiel verwendet der folgende Befehl den ETag-Wert für den Schlüssel
tags
und fragt den Metadateneintrag der Instanz ab.user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e" -H "Metadata-Flavor: Google"
Der Metadatenserver überprüft diesen ETag-Wert und gibt die neuen Inhalte Ihres Metadatenschlüssels zurück, sollte er sich ändern.
-
- Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Stellen Sie eine Anfrage an diesen Schlüssel und drucken Sie die Header. Verwenden Sie unter Windows den
Invoke-WebRequest
-Befehl. Führen Sie den folgenden Befehl aus, um das aktuelle ETag für den Metadateneintrag einer VM-Instanz oder eines Projekts abzurufen:$value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY)
$value.Headers.ETag
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
Mit dem folgenden Befehl wird beispielsweise der aktuelle ETag-Wert für den Metadatenschlüssel
tags
der Instanz abgerufen.PS C:> $value = (Invoke-WebRequest -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri http://metadata.google.internal/computeMetadata/v1/instance/tags)
$value.Headers.ETag
Die Ausgabe sieht in etwa so aus:
* About to connect() to metadata port 80 (#0) * Trying 169.254.169.254... connected * Connected to metadata (169.254.169.254) port 80 (#0) > GET /computeMetadata/v1/instance/tags HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 > Host: metadata > Accept: / > < HTTP/1.1 200 OK < Content-Type: application/text < ETag: 411261ca6c9e654e < Date: Wed, 13 Feb 2013 22:43:45 GMT < Server: Metadata Server for VM < Content-Length: 26 < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < http-server db-client
-
Wenn Sie den Metadatenschlüssel
Sie können den ETag-Wert dann in Ihrer
wait-for-change
-Anfrage verwenden. Führen Sie den folgenden Befehl aus, um den ETag-Wert für diewait-for-change
-Anfrage von Instanz- oder Projektmetadaten zu verwenden:$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&last_etag=ETAG") $valueErsetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
ETAG
: der ETag-Wert für den Metadatenschlüssel.
In diesem Beispiel verwendet der folgende Befehl den ETag-Wert für den Schlüssel
tags
und fragt den Metadateneintrag der Instanz ab.PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&last_etag=411261ca6c9e654e") $valueDer Metadatenserver überprüft diesen ETag-Wert und gibt die neuen Inhalte Ihres Metadatenschlüssels zurück, sollte er sich ändern.
-
- Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Verwenden Sie in Ihrer Linux-VM das
curl
-Tool, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um einewait-for-change
-Anfrage mit einem Zeitüberschreitungswert für den Metadateneintrag einer VM-Instanz oder eines Projekts durchzuführen:curl "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&timeout_sec=TIMEOUT" -H "Metadata-Flavor: Google"
Ersetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
TIMEOUT
: der Zeitüberschreitungswert.
-
- Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Verwenden Sie in Ihrer Windows-VM den Befehl
Invoke-RestMethod
, um eine Abfrage zu stellen. Führen Sie den folgenden Befehl aus, um einewait-for-change
-Anfrage mit einem Zeitüberschreitungswert für den Metadateneintrag einer VM-Instanz oder eines Projekts durchzuführen:$value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY?wait_for_change=true&timeout_sec=TIMEOUT") $valueErsetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
TIMEOUT
: der Zeitüberschreitungswert.
-
Sie müssen Zugriff auf die Vorabversion des HTTPS-Metadatenserver-Endpunkts anfordern.
Nachdem Ihr Projekt der Zulassungsliste hinzugefügt wurde, können Sie die VM erstellen. Die VM muss die folgenden Anforderungen erfüllen:
- Die Gastumgebung muss auf der VM ausgeführt werden.
- Die VM muss eine Shielded VM sein. Das liegt daran, dass der HTTPS-Metadatenserver für die Überprüfung von Zertifikaten die Verwendung von UEFI (Unified Extensible Firmware Interface) und vTPM (Virtual Trusted Platform Module) erfordert.
Stellen Sie eine Verbindung zu Ihrer Linux-VM her.
Verwenden Sie in Ihrer Linux-VM das
curl
-Tool, um eine Abfrage zu stellen und das Zertifikat für die Clientidentität anzugeben. Optional können Sie auch das Stammzertifikat angeben.curl "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY" \ -E CLIENT_CERTIFICATE \ [--cacert ROOT_CERTIFICATE] \ -H "Metadata-Flavor: Google"
Ersetzen Sie Folgendes:
-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
CLIENT_CERTIFICATE
: der Pfad zum Zertifikat für die Clientidentität:/run/google-mds-mtls/client.key
.- Optional:
ROOT_CERTIFICATE
: der Pfad zum Stammzertifikat:/run/google-mds-mtls/root.crt
.
Führen Sie beispielsweise die folgende Abfrage aus, um das Boot-Image für eine VM abzufragen:
user@myinst:~$ curl "https://metadata.google.internal/computeMetadata/v1/instance/image" \ -E /run/google-mds-mtls/client.key \ -H "Metadata-Flavor: Google"
Die Ausgabe sieht in etwa so aus:
projects/rhel-cloud/global/images/rhel-8-v20210122
Wenn eine Fehlermeldung angezeigt wird, lesen Sie die Dokumentation zur Fehlerbehebung.
-
Stellen Sie eine Verbindung zu Ihrer Windows-VM her.
Rufen Sie das Zertifikat für die Clientidentität mit einem der folgenden Befehle ab:
$cert = Get-PfxCertificate -FilePath "C:\ProgramData\Google\Compute Engine\mds-mtls-client.key.pfx"
$cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Issuer -like "google.internal" }
Verwenden Sie in Ihrer Windows-VM den Befehl
Invoke-RestMethod
und geben Sie das Client-Identitätszertifikat an, um eine Abfrage zu stellen.PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} -Certificate CLIENT_CERTIFICATE ` -Uri "https://metadata.google.internal/computeMetadata/v1/PATH_TO_METADATA_ENTRY") $value
Ersetzen Sie Folgendes:
CLIENT_CERTIFICATE
: der Pfad zum Zertifikat für die Clientidentität auf der VM. Das ist die Variable$cert
, die im vorherigen Schritt festgelegt wurde.-
Ersetzen Sie
PATH_TO_METADATA_ENTRY
durch den Pfad zur VM-Instanz oder zum Projektmetadatenschlüssel, für den Sie den Wert abfragen möchten. Wenn sich der Schlüssel in einem Unterverzeichnis des Instanz- oder Projektverzeichnisses befindet, muss auch das Unterverzeichnis angegeben werden. Beispiel:-
Wenn Sie den Metadatenschlüssel
project-id
aufrufen möchten, der in den Projektmetadaten gespeichert ist, geben Sieproject/project-id
an. -
Wenn Sie den Metadatenschlüssel
image
aufrufen möchten, der in den Metadaten der VM-Instanz gespeichert ist, geben Sieinstance/image
an. -
Wenn Sie die
enable-oslogin
aufrufen möchten, die im Unterverzeichnis „attributes“ der Projekt- oder VM-Instanzmetadaten gespeichert werden kann, geben Sie je nach Anwendungsfallproject/attributes/enable-oslogin
oderinstance/attributes/enable-oslogin
an.
-
Wenn Sie den Metadatenschlüssel
Führen Sie beispielsweise die folgende Abfrage aus, um das Boot-Image für eine Windows Server 2019-VM abzufragen:
PS C:\> $value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} -Certificate $cert ` -Uri "https://metadata.google.internal/computeMetadata/v1/instance/image") $value
Die Ausgabe sieht in etwa so aus:
projects/windows-cloud/global/images/windows-server-2019-dc-v20210112
Anfragen mit dem Header
X-Forwarded-For
werden automatisch vom Metadatenserver abgewiesen. Dieser Header zeigt normalerweise an, dass die Anfrage weitergeleitet wurde und eventuell nicht von einem autorisierten Nutzer stammt. Aus Sicherheitsgründen werden Anfragen dieser Art abgelehnt.Wenn Sie den Befehl
curl
verwenden, um Metadaten vom Server abzurufen, beachten Sie, dass einige codierte Zeichen im Anfragepfad nicht unterstützt werden. Codierte Zeichen werden nur im Abfragepfad unterstützt.Die folgende Anforderung funktioniert beispielsweise eventuell nicht:
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"
Damit diese Anfrage funktioniert, ersetzen Sie das nicht unterstützte codierte Zeichen im Anfragepfad (
%40
) durch den entsprechenden zulässigen Wert (@
).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"
In der folgenden Tabelle sind die codierten Zeichen aufgeführt, die in Anfragepfaden nicht unterstützt werden.
Codiertes Zeichen Zulässiger Wert %21 !
%24 $
%27 '
%28 (
%29 )
%2A *
%2C ,
%40 @
Rufen Sie in der Google Cloud Console die Seite Metadaten auf.
Auf der Seite Metadaten sehen Sie eine Liste aller benutzerdefinierten Projektmetadateneinträge für Ihr Projekt.
PROJECT_ID
: Ihre Projekt-ID.ZONE
: die Zone, für die Sie die zonalen Projektmetadaten aufrufen möchten.PROJECT_ID
: Ihre Projekt-ID.ZONE
: die Zone, für die Sie die zonalen Projektmetadaten aufrufen möchten.- Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie auf den Namen der VM, für die Sie Metadaten aufrufen möchten.
SSH-Schlüssel für diese VM. Sehen Sie sich im Abschnitt Sicherheit und Zugriff das Feld SSH-Schlüssel an.
Der Wert von
None
gibt an, dass keine SSH-Schlüssel in Instanzmetadaten gespeichert sind.Jeder andere Wert gibt an, dass SSH-Schlüssel in Instanzmetadaten gespeichert sind.
SSH-Schlüssel für ein Projekt. Sehen Sie sich im Abschnitt Sicherheit und Zugriff das Feld Projektweite SSH-Schlüssel blockieren an.
Der Wert
On
gibt an, dass der Wert des Metadatenschlüsselsblock-project-ssh-keys
in den InstanzmetadatenTRUE
ist.Der Wert von
Off
gibt an, dass der Metadatenschlüsselblock-project-ssh-keys
den WertFALSE
hat oder der Schlüssel nicht festgelegt ist.
Alle anderen benutzerdefinierten Metadaten. Rufen Sie den Abschnitt Benutzerdefinierte Metadaten auf. Sie sehen alle benutzerdefinierten Metadatenschlüssel und -werte außer SSH-Schlüsselmetadaten.
PROJECT_ID
: Ihre Projekt-IDZONE
: die Zone, in der sich die VM befindetVM_NAME
: der Name der VM- Mehr über VM-Metadaten erfahren
- Benutzerdefinierte Metadaten festlegen
- Gastattribute festlegen und abfragen
Python
Wenn Sie die Python Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.
Weitere Informationen unter Set up authentication for a local development environment.
REST
Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.
Erforderliche Rollen
Die folgenden Rollen und Berechtigungen sind erforderlich, um benutzerdefinierte Metadaten über die Google Cloud Console, die Google Cloud CLI oder REST außerhalb der VM aufzurufen. Wenn Sie die Metadaten programmatisch innerhalb der VM abfragen, benötigen Sie nur die Rollen und Berechtigungen für die Verbindung zur VM.
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aufrufen benutzerdefinierter Metadaten von außerhalb der VM benötigen:
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Aufrufen benutzerdefinierter Metadaten von außerhalb der VM erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind erforderlich, um benutzerdefinierte Metadaten von außerhalb der VM aufzurufen:
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Metadaten programmatisch abfragen
Sie können auf alle Metadaten zugreifen, indem Sie die Metadatenwerteinträge programmatisch innerhalb einer Linux- oder Windows-VM abfragen. Innerhalb Ihrer VM können Sie Ihre Metadatenwerte auf eine der folgenden Arten programmatisch abfragen, indem Sie Tools wie
curl
unter Linux oderInvoke-RestMethod
unter Windows verwenden:Metadatenserver-Endpunkte
Für die programmatische Abfrage von Metadaten innerhalb einer VM stehen die folgenden Metadatenserver-Endpunkte zur Verfügung:
In den meisten Beispielen in diesem Dokument wird der HTTP-Endpunkt verwendet. Sie können jedoch unabhängig davon, ob Sie den https- oder den http-Endpunkt verwenden, auf dieselben Metadateneinträge zugreifen.
Bestandteile einer Metadatenanfrage
In der folgenden Tabelle sind die wichtigsten Teile einer Metadatenabfrage zusammengefasst.
Komponenten Beschreibung Stamm-URLs Alle Metadatenwerte werden als Subpfade unterhalb der folgenden Stamm-URLs definiert:
Anfrage-Header Dieser Header weist darauf hin, dass eine Anfrage zum Aufruf von Metadatenwerten gesendet wurde und diese nicht unbeabsichtigt aus einer unsicheren Quelle kommen. Auf diese Weise kann der Metadatenserver Ihnen die entsprechenden Daten zurückgeben. Ohne diesen Header lehnt der Metadatenserver Ihre Anfrage ab.
Metadata-Flavor: Google
Einzelnen Metadateneintrag abfragen
Verwenden Sie die folgenden Befehle, um einen einzelnen Metadateneintrag abzufragen.
Linux
Windows
Metadatenverzeichniseinträge abfragen
Verwenden Sie die folgenden Befehle, um Metadaten-Verzeichniseinträge abzufragen. Verzeichniseinträge sind Metadateneinträge, die andere Metadatenschlüssel enthalten. Alle Metadateneinträge, die mit einem Schrägstrich enden, sind Verzeichniseinträge.
Linux
Windows
Der Eintrag
disks/
ist ein Verzeichnis von Laufwerken, das an die VM angehängt ist. Führen Sie die folgenden Schritte aus, um den Laufwerkeintrag abzufragen:Verzeichniseinträge rekursiv abfragen
Wenn Sie alle Inhalte in einem Verzeichnis zurückgeben möchten, verwenden Sie den Abfrageparameter
recursive=true
mit Ihrer Anfrage:Linux
Windows
Ausgabe der Abfrage formatieren
Standardmäßig besitzt jeder Endpunkt ein vordefiniertes Format für die Antwort. Einige Endpunkte können JSON-Daten zurückgeben, während andere die Daten als String darstellen. Sie können das Standardformat für Daten mit den Abfrageparametern
alt=json
oderalt=text
ändern, die Daten als JSON-String oder als Klartextdarstellung zurückgeben.Linux
Beispiel
Der Schlüssel
tags
gibt beispielsweise Daten automatisch im JSON-Format zurück. Sie können stattdessen Daten im Textformat zurückgeben, indem Sie den Abfrageparameteralt=text
angeben.Standardsuchanfrage
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags" -H "Metadata-Flavor: Google"
Die Ausgabe sieht etwa so aus:
["http-server", "db-client", "app-server", "mysql-server"]
Abfrage mit Formatierung
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text" -H "Metadata-Flavor: Google"
Die Ausgabe sieht etwa so aus:
http-server db-client app-server mysql-server
Windows
Beispiel
Der Schlüssel
tags
gibt beispielsweise Daten automatisch im JSON-Format zurück. Sie können stattdessen Daten im Textformat zurückgeben, indem Sie den Abfrageparameteralt=text
angeben.Standardsuchanfrage
PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags") $valueDie Ausgabe sieht etwa so aus:
["http-server", "db-client", "app-server", "mysql-server"]
Abfrage mit Formatierung
PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?alt=text") $valueDie Ausgabe sieht etwa so aus:
http-server db-client app-server mysql-server
Metadatenänderungen mit dem
wait-for-change
-Feature abfragenDa sich Metadatenwerte ändern können, während Ihre VM ausgeführt wird, kann der Metadatenserver mithilfe des Features
wait-for-change
über Metadatenänderungen informiert werden. Bei dieser Option gibt die Anfrage nur dann eine Ausgabe zurück, wenn sich die angegebenen Metadaten geändert haben.Sie können dieses Feature für benutzerdefinierte oder serverdefinierte Metadaten verwenden. Sobald sich also etwas an Ihrer VM oder Ihrem Projekt ändert, oder jemand einen benutzerdefinierten Metadateneintrag aktualisiert, können Sie programmatisch auf die Änderung reagieren.
Sie können beispielsweise eine Anfrage für den Schlüssel
tags
ausführen, sodass die Anfrage nur zurückgegeben wird, wenn sich der Inhalt der Metadaten der Tags geändert hat. Wird die Anfrage zurückgegeben, beinhaltet sie den neuen Wert des Metadatenschlüssels.Mit dem Feature
wait-for-change
können Sie auch einen Abgleich mit Ihrer Anfrage durchführen und Zeitlimits festlegen.Beachten Sie bei der Arbeit mit dem Feature
wait-for-change
Folgendes:Zum Ausführen einer
wait-for-change
-Anfrage fragen Sie einen Metadatenschlüssel ab und hängen den Abfrageparameter?wait_for_change=true
an:Linux
Beispiele
In diesem Beispiel wurde eine Anfrage an
setInstanceTags method
gerichtet und gibt neue Werte zurück:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true" -H "Metadata-Flavor: Google"
Die Ausgabe sieht in etwa so aus:
http-server db-client
Sie können auch eine
wait-for-change
-Anfrage rekursiv für den Inhalt eines Verzeichnisses durchführen:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&wait_for_change=true" -H "Metadata-Flavor: Google"
Der Metadatenserver gibt die neuen Inhalte an, sollte es Veränderungen gegeben haben:
{"foo":"bar","baz":"bat"}
Windows
Beispiele
Wenn der angegebene Metadatenschlüssel verändert wurde, gibt die Anfrage den neuen Wert zurück. In diesem Beispiel wurde eine Anfrage an
setInstanceTags method
gerichtet und gibt neue Werte zurück:PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true") $valueDie Ausgabe sieht in etwa so aus:
http-server db-client
Sie können auch eine
wait-for-change
-Anfrage rekursiv für die Inhalte eines Verzeichnisses durchführen:PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/attributes?recursive=true&wait_for_change=true") $valueDer Metadatenserver gibt die neuen Inhalte an, sollte es Veränderungen gegeben haben:
{"foo":"bar","baz":"bat"}
ETags verwenden
Wenn Sie eine
wait-for-change
-Abfrage senden, gibt der Metadatenserver eine Antwort zurück, wenn sich im Inhalt dieser Metadaten etwas geändert hat. Jedoch gibt es immer einen Wettlauf zwischen der Aktualisierung von Metadaten und einerwait-for-change
-Anfrage. Deswegen lohnt es sich, eine verlässliche Methode zu haben, um herauszufinden, ob Sie den neuesten Metadatenwert erhalten.Dafür haben wir Ihnen den
last_etag
-Anfrageparameter zur Verfügung gestellt, der Ihren ETag-Wert mit dem vergleicht, der auf dem Metadatenserver gespeichert ist. Wenn die ETag-Werte übereinstimmen, wird die Anfragewait-for-change
akzeptiert. Stimmen die ETag-Werte nicht überein, dann bedeutet das, dass sich seit dem letzten Aufruf des ETag-Werts etwas verändert hat. Der Metadatenserver sendet diesen neuen Wert sofort zurück.Linux-VMs
Führen Sie die folgenden Schritte aus, um den aktuellen ETag-Wert für einen Metadatenschlüssel abzurufen:
Windows-VMs
Führen Sie die folgenden Schritte aus, um den aktuellen ETag-Wert für einen Metadatenschlüssel abzurufen:
Python
Das folgende Beispiel für Python zeigt, wie Sie den Metadatenserver programmatisch auf Änderungen überwachen können.
In diesem Beispiel wird das Anfangs-ETag auf
0
gesetzt. Der Metadatenserver gibt keine Antwort mit0
als ETag-Wert zurück. Wenn0
in einer Anfrage als letztes ETag erscheint, antwortet der Metadatenserver mit dem aktuellen Wert und dem ETag. Dadurch wird ein Teil des Codes gespart, der zum Abrufen des Anfangswerts und des ETags erforderlich ist.Zeitlimits festlegen
Wenn Sie möchten, dass Ihre
wait-for-change
-Anfrage nach einer bestimmten Anzahl von Sekunden abläuft, können Sie den Parametertimeout_sec
festlegen. Der Parametertimeout_sec
beschränkt die Wartezeit Ihrer Anfrage auf die von Ihnen angegebene Anzahl an Sekunden. Erreicht die Anfrage diesen Wert, ruft sie den aktuellen Inhalt des Metadatenschlüssels auf.Wenn Sie den
timeout_sec
-Parameter einrichten, wird die Anfrage jeweils unabhängig davon, ob sich die Metadatenwerte verändert haben, nach Ablauf der Zeit zurückgegeben. Nur ganze Zahlen dürfen als Zeitlimit festgelegt werden.Linux
Mit dem folgenden Befehl wird beispielsweise eine
wait-for-change
-Anfrage ausgeführt, die nach 360 Sekunden mit einer Zeitüberschreitung abläuft:user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360" -H "Metadata-Flavor: Google"
Windows
Mit dem folgenden Befehl wird beispielsweise eine
wait-for-change
-Anfrage ausgeführt, die nach 360 Sekunden mit einer Zeitüberschreitung abläuft:PS C:> $value = (Invoke-RestMethod
-Headers @{'Metadata-Flavor' = 'Google'}
-Uri "http://metadata.google.internal/computeMetadata/v1/instance/tags?wait_for_change=true&timeout_sec=360") $valueMetadaten mit dem HTTPS-Metadatenserver-Endpunkt abfragen
Der HTTPS-Metadatenserver-Endpunkt (
https://metadata.google.internal/computeMetadata/v1
) bietet zusätzliche Sicherheit für die Übertragung von Informationen zwischen dem Metadatenserver und der VM.Für die Verwendung des HTTPS-Metadatenserver-Endpunkts gelten die folgenden Anforderungen:
Eine Übersicht dazu, wie Abfragen an den HTTPS-Metadatenserver-Endpunkt verarbeitet werden, finden Sie unter HTTPS-Metadatenserver-Endpunkt. Sie können dieselben Abfragen an den Metadatenserver senden, unabhängig davon, ob Sie den https- oder den http-Endpunkt verwenden. Wenn Sie den HTTPS-Endpunkt aufrufen möchten, müssen Sie jedoch den Pfad zu den Client-Identitätszertifikaten und in einigen Fällen auch das Stammzertifikat angeben.
Die folgenden Befehle zeigen, wie Sie den Metadatenserver über den HTTPS-Endpunkt abfragen.
Linux
Windows
Beschränkungen
Statuscodes
Wenn Sie eine Anfrage an den Metadatenserver senden, gibt der Metadatenserver Standard-HTTP-Statuscodes zurück, um Erfolg oder Misserfolg anzuzeigen. Manchmal kann es aufgrund von Netzwerkbedingungen oder Hostereignissen passieren, dass der Metadatenserver Ihre Anfrage ablehnt und einen Fehlercode zurückgibt. Geschieht dies, sollten Sie Ihre Anwendung so ändern, dass sie fehlertolerant ist und diese Art von Fehlern erkennen und mit ihnen umgehen kann.
Eine detaillierte Liste der Statuscodes, die zurückgegeben werden können, finden Sie unter Fehlerbehebung bei Servercodes.
Benutzerdefinierte Metadaten für Ihre VMs aufrufen
Sie können die benutzerdefinierten Metadatenwerte für Ihre Compute Engine-VMs auf eine der folgenden Arten aufrufen:
Projektmetadaten anzeigen
Verwenden Sie eine der folgenden Methoden, um benutzerdefinierte Metadaten aufzurufen, die für alle VMs in Ihrem Projekt gelten.
Console
gcloud
Verwenden Sie den Befehl
gcloud compute project-info describe
, um Projektmetadaten abzufragen:gcloud compute project-info describe --flatten="commonInstanceMetadata[]"
Die Ausgabe sieht in etwa so aus:
--- fingerprint: HcSFdS_1_1I= items: - key: ssh-keys value: USERNAME:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWZ... kind: compute#metadata
REST
Erstellen Sie zum Abfragen von Projektmetadaten eine
GET
-Anfrage an dieproject.get
-Methode.Ersetzen Sie
PROJECT_ID
durch Ihre Projekt-ID.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
Die Ausgabe sieht in etwa so aus:
"kind": "compute#project", "id": "XXXXXXX", "creationTimestamp": "2018-12-10T08:34:33.616-08:00", "name": "YOUR_PROJECT", "commonInstanceMetadata": { "kind": "compute#metadata", "fingerprint": "XXXXXCdg=", "items": [ { "key": "enable-guest-attributes", "value": "TRUE" }, { "key": "enable-os-inventory", "value": "true" }, { "key": "enable-osconfig", "value": "TRUE" }, { "key": "enable-oslogin", "value": "TRUE" }, { "key": "sshKeys", "value": "XXXXX" } ] }, ...
Zonale Metadaten aufrufen
Verwenden Sie eine der folgenden Methoden, um benutzerdefinierte Metadaten aufzurufen, die für alle VM-Instanzen in einer bestimmten Zone in einem Projekt gelten.
gcloud
Verwenden Sie den Befehl
gcloud compute project-zonal-metadata describe
, um die benutzerdefinierten zonalen Metadaten abzufragen.gcloud compute project-zonal-metadata describe \ --zone=ZONE \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
Die Ausgabe sieht in etwa so aus:
{ "fingerprint": "VlRIl8dx9vk=", "metadata": { items: { "key-1": "value-1", "key-2": "value-2" } } }
REST
Senden Sie eine
GET
-Anfrage an die MethodeinstanceSettings().get
, um die benutzerdefinierten zonalen Metadaten abzufragen.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceSettings
Ersetzen Sie Folgendes:
Die Ausgabe sieht in etwa so aus:
{ "fingerprint": "VlRIl8dx9vk=", "metadata": { items: { "key-1": "value-1", "key-2": "value-2" } } }
Instanzmetadaten aufrufen
Verwenden Sie eine der folgenden Methoden, um Metadaten aufzurufen, die für eine einzelne VM in Ihrem Projekt gelten.
Console
gcloud
Verwenden Sie den Befehl
gcloud compute instances describe
, um Instanzmetadaten abzufragen:gcloud compute instances describe VM_NAME --flatten="metadata[]"
Ersetzen Sie
VM_NAME
durch den Namen der VM, für die Sie Metadaten suchen möchten.Die Ausgabe sieht in etwa so aus:
--- fingerprint: MTgTJ5m-Cjs= items: - key: enable-oslogin value: 'true' kind: compute#metadata
REST
Um Metadaten für eine bestimmte VM abzufragen, senden Sie eine
GET
-Anfrage an dieinstances.get
-Methode.GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
Die Ausgabe sieht in etwa so aus:
...... "metadata": { "kind": "compute#metadata", "fingerprint": "XXXXXXVo=", "items": [ { "key": "enable-oslogin", "value": "true" } ] },....
Ersetzen Sie Folgendes:
Nächste Schritte
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2024-12-22 (UTC).
-