Instanzmetadaten aus der Instanz abrufen
Auf Compute Cloud@Customer stellt Instance Metadata Service (IMDS) Benutzern, die bei dieser Instanz angemeldet sind, Informationen über eine ausgeführte Instanz bereit. IMDS stellt auch Informationen für cloud-init bereit, eine Methode, die Sie für verschiedene Systeminitialisierungsaufgaben verwenden können.
Um auf IMDS-Metadaten zuzugreifen, verwenden Sie ein Instanzimage, das von Oracle bereitgestellt wird.
Die IMDS-Metadaten umfassen Instanzinformationen wie die folgenden:
-
Der SSH-Public Key, mit dem sich Benutzer bei der Instanz anmelden können
-
Instanz angehängte VNICs, VNIC-IDs
-
Instanz-CIDR-Blocks
Im Allgemeinen enthalten die IMDS-Instanzmetadaten die folgenden Informationen:
-
Dieselben Informationen, die auf der Detailseite einer Instanz in der Compute Cloud@Customer-Konsole und in der Ausgabe der CLI der Instanz
get
angezeigt werden. -
Benutzerdefinierte Informationen, die Sie einer Instanz mit den Optionen
--metadata
,--extended-metadata
,--ssh-authorized-keys-file
und--user-data-file
des Instanzbefehlslaunch
hinzufügen. Diese Metadaten können nach dem Instanzstart nicht aktualisiert werden. Bei einem bei der Instanz angemeldeten Benutzer sind die Instanzmetadaten schreibgeschützt.
Upgrade auf IMDS Version 2-Endpunkte
Instance Metadata Service ist in zwei Versionen verfügbar: Version 1 und Version 2.
Um die Sicherheit von Metadatenanforderungen zu erhöhen, aktualisieren Sie alle Anwendungen so, dass sie die Endpunkte von IMDS-Version 2 verwenden, sofern dies vom Image unterstützt wird. Deaktivieren Sie dann die Verwendung von IMDS-Version 1-Endpunkten.
IMDS-Endpunkte der Version 2 (IMDSv2) werden auf den Oracle Linux-Images unterstützt, die in der Gastbetriebssystemmatrix aufgeführt sind. Andere Plattformimages und die meisten anderen Images unterstützen IMDSv2 nicht.
Führen Sie für jede Instanz die folgenden Schritte aus, um ein Upgrade auf IMDSv2 durchzuführen:
-
Identifizieren Sie Anwendungen, die IMDSv1-Anforderungen stellen.
Beispiel:
cloud-init
sendet Anforderungen an/v#
-Instanzendpunkte. -
Migrieren Sie die identifizierten Anwendungen, um IMDSv2-Endpunkte zu unterstützen.
Wenn Sie
/v2
-Endpunkte verwenden, müssen Sie den Header "Autorisierung: Bearer Oracle" aufnehmen. Weitere Informationen finden Sie in den Beispielen unter IMDS-Instanzmetadaten abrufen. -
Deaktivieren Sie IMDSv1-Endpunkte.
Führen Sie einen der folgenden Schritte aus, wie unter Instanzen erstellen beschrieben.
-
Prüfen Sie auf der Detailseite einer Instanz unter "Instanzdetails" den Wert der Legacy Instance Metadata Service-Endpunkte. Wenn der Wert von Legacy Instance Metadata Service-Endpunkten aktiviert ist, wählen Sie im Menü "Steuerelemente" die Option "Bearbeiten", und aktivieren Sie das Kontrollkästchen für Legacy Instance Metadata Service-Endpunkte deaktiviert.
-
Prüfen Sie in der Ausgabe von
instance list
oderinstance get
unterinstance-options
den Wert vonare-legacy-imds-endpoints-disabled
. Wenn der Wert vonare-legacy-imds-endpoints-disabled
null
oderfalse
lautet, geben Sie mit dem Befehlinstance update
die folgende Option an:--instance-options '{"areLegacyImdsEndpointsDisabled": true}'
Zukünftige Anforderungen an Legacy-Endpunkte (
v1
) werden mit einem Fehler "404 - Nicht gefunden" abgelehnt. -
IMDS-Instanzmetadaten werden abgerufen
So rufen Sie die IMDS-Instanzmetadaten ab:
-
Melden Sie sich bei der Instanz an.
-
Verwenden Sie einen cURL-Befehl, um die Metadateninformationen vom HTTP-Endpunkt abzurufen.
Informationen werden über einen HTTP-Endpunkt bereitgestellt, der auf 169.254.169.254 horcht. Wenn eine Instanz über mehrere VNICs verfügt, müssen Sie die Anforderung mit der primären VNIC senden.
Verwenden Sie den Befehl
instance
, um die Instanzmetadaten abzurufen. Verwenden Sie den Befehlvnics
, um die VNIC-Daten abzurufen.Wenn Sie
/v2
-Endpunkte verwenden, wie in den folgenden Beispielen dargestellt, müssen Sie den Header "Autorisierung: Bearer Oracle" aufnehmen.Beispiel: Instanzmetadaten
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/instance/ { "availabilityDomain": "AD-1", "faultDomain": "FAULT-DOMAIN-1", "compartmentId": "ocid1.compartment.unique_ID", "displayName": "dev1", "hostname": "hostname", "id": "ocid1.instance.unique_ID", "image": "ocid1.image.unique_ID", "metadata": { "ssh_authorized_keys": "public_SSH_key" }, "region": "PCA", "canonicalRegionName": "PCA", "ociAdName": "PCA", "regionInfo": null, "shape": "VM.PCAStandard.E5.Flex", "state": "RUNNING", "timeCreated": 1634943279000, "agentConfig": null }
Um einen einzelnen Wert abzurufen, geben Sie den Schlüsselnamen an, wie im folgenden Beispiel dargestellt.
Beispiel: VNIC-Metadaten
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/vnics/ [ { "vnicId": "ocid1.vnic.unique_ID", "privateIp": "privateIp", "vlanTag": 0, "macAddr": "00:13:97:9f:16:32", "virtualRouterIp": "virtualRouterIp", "subnetCidrBlock": "subnetCidrBlock" } ]
Sie können alle Daten für eine von mehreren VNICs anzeigen, indem Sie den Arrayindex für diese VNIC-Daten angeben, oder Sie können einen einzelnen Wert für die angegebene VNIC abrufen:
$ curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/vnics/0/privateIp privateIp