IMDSVersionen auf einem Snow Family-Gerät - AWS Snowball Edge Leitfaden für Entwickler

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

IMDSVersionen auf einem Snow Family-Gerät

Mit Version 2 oder IMDS Version 1 können Sie von einer laufenden Instance aus auf Instanz-Metadaten zugreifen: IMDS

  • Instance Metadata Service Version 2 (IMDSv2), eine sitzungsorientierte Methode

  • Instance Metadata Service Version 1 (IMDSv1), eine Anfrage-Antwort-Methode

Je nach Version Ihrer Snow-Software können SieIMDSv2, oder IMDSv1 beide verwenden. Dies hängt auch von der Art der AMI Ausführung in der EC2 -kompatiblen Instanz ab. EinigeAMIs, z. B. solche, auf denen Ubuntu 20.04 ausgeführt wird, benötigen. IMDSv2 Der Instanz-Metadatendienst unterscheidet zwischen IMDSv1 und IMDSv2 Anfragen anhand des Vorhandenseins von PUT Oder-Headern. GET IMDSv2verwendet diese beiden Header. IMDSv1verwendet nur den GET Header.

AWS befürwortet die Verwendung von IMDSv2 stattIMDSv1, weil IMDSv2 beinhaltet eine höhere Sicherheit. Weitere Informationen finden Sie unter Erweiterte Funktionen zum Schutz vor offenen Firewalls, Reverse-Proxys und SSRF Sicherheitslücken mit Verbesserungen am EC2 Instanz-Metadatendienst.

IMDSv2auf einem Snow Family-Gerät

Wenn Sie IMDSv2 Instanz-Metadaten anfordern, muss die Anfrage diesen Regeln entsprechen:

  1. Verwenden Sie eine PUT-Anfrage, um eine Sitzung mit dem Instance-Metadaten-Service zu starten. Die PUT Anfrage gibt ein Sitzungstoken zurück, das in nachfolgenden GET Anfragen an den Instanz-Metadatendienst enthalten sein muss. Das Sitzungstoken, das die Sitzungsdauer definiert. Die Sitzungsdauer kann mindestens eine Sekunde und maximal sechs Stunden betragen. Während dieser Dauer können Sie dasselbe Sitzungstoken für nachfolgende Anfragen verwenden. Nach Ablauf dieser Dauer müssen Sie ein neues Sitzungstoken für future Anfragen erstellen. Das Token ist erforderlich, um mithilfe von auf Metadaten zuzugreifenIMDSv2.

  2. Nehmen Sie das Token in alle GET-Anfragen an den Instance-Metadaten-Service auf.

    1. Das Token ist ein instanzspezifischer Schlüssel. Das Token ist auf anderen EC2 -kompatiblen Instances nicht gültig und wird zurückgewiesen, wenn Sie versuchen, es außerhalb der Instanz zu verwenden, auf der es generiert wurde.

    2. Die PUT Anfrage muss einen Header enthalten, der die Gültigkeitsdauer (TTL) für das Token in Sekunden angibt, bis zu einem Maximum von sechs Stunden (21.600 Sekunden). Das Token stellt eine logische Sitzung dar. Der TTL gibt die Gültigkeitsdauer des Tokens und damit die Dauer der Sitzung an.

    3. Nachdem ein Token abgelaufen ist, müssen Sie eine neue Sitzung mit einer anderen PUT-Anfrage erstellen, um auf die Instance-Metadaten zuzugreifen.

    4. Sie können auswählen, ob Sie ein Token wiederverwenden oder bei jeder Anforderung einen neues Token erstellen möchten. Für eine kleine Anzahl von Anfragen kann es einfacher sein, bei jedem Zugriff auf den Instance-Metadaten-Service ein Token zu generieren und sofort zu verwenden. Aus Effizienzgründen können Sie jedoch eine längere Dauer für das Token festlegen und es wiederverwenden, anstatt jedes Mal eine PUT-Anfrage stellen zu müssen, wenn Sie Instance-Metadaten anfordern müssen. Es gibt keine praktische Begrenzung der Anzahl der gleichzeitigen Tokens, die jeweils eine eigene Sitzung darstellen.

HTTPGETund HEAD Methoden sind in IMDSv2 Instanz-Metadatenanfragen zulässig. PUTAnfragen werden abgelehnt, wenn sie einen X-Forwarded-For Header enthalten.

Standardmäßig hat die Antwort auf PUT Anfragen ein Response-Hop-Limit (Time-to-Live) von 1 auf IP-Protokollebene. IMDSfor Snow ist nicht in der Lage, das Hop-Limit für PUT Antworten zu ändern.

Das folgende Beispiel verwendet ein Linux-Shell-Skript und ruft IMDSv2 die Metadatenelemente der Instanz auf oberster Ebene ab. Dieses Beispiel:

  1. Erstellt mithilfe der PUT Anfrage ein Sitzungstoken mit einer Dauer von sechs Stunden (21.600 Sekunden).

  2. Speichert den Sitzungs-Token-Header in einer Variablen mit dem NamenTOKEN.

  3. Fordert mithilfe des Tokens die Metadatenelemente der obersten Ebene an.

Verwenden Sie zwei Befehle, um das EC2 -kompatible Token zu generieren. Sie können die Befehle separat oder als einen Befehl ausführen.

Generieren Sie zuerst ein Token mit dem folgenden Befehl.

Anmerkung

X-aws-ec2-metadata-token-ttl-secondsist ein erforderlicher Header. Wenn dieser Header nicht enthalten ist, erhalten Sie den Fehlercode 400 — Fehlende oder ungültige Parameter.

[ec2-user ~]$ TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"

Verwenden Sie dann das Token, um mithilfe des folgenden Befehls Metadatenelemente der obersten Ebene zu generieren.

[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
Anmerkung

Wenn beim Erstellen des Tokens ein Fehler auftritt, wird in der Variablen statt eines gültigen Tokens eine Fehlermeldung gespeichert und der Befehl funktioniert nicht.

Sie können das Token speichern und die Befehle kombinieren. Das folgende Beispiel kombiniert die beiden obigen Befehle und speichert den Sitzungs-Token-Header in einer Variablen namensTOKEN.

Beispiel von kombinierten Befehlen
[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" -v http://169.254.169.254/latest/meta-data/

Nachdem Sie ein Token erstellt haben, können Sie es bis zum Ablauf wiederverwenden. Der folgende Beispielbefehl ruft die ID der Instanz ab, die zum Starten der Instanz AMI verwendet wurde, und speichert sie in der im vorherigen Beispiel $TOKEN erstellten.

Beispiel der Wiederverwendung eines Tokens
[ec2-user ~]$ curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id

IMDSv1auf einem Snow Family-Gerät

IMDSv1verwendet das Request‐Response-Modell. Um Instanz-Metadaten anzufordern, senden Sie eine GET Anfrage an den Instanz-Metadatendienst.

[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/

Ihre Instance-Metadaten sind in Ihrer laufenden Instance verfügbar, sodass Sie nicht die EC2 Amazon-Konsole oder die verwenden müssen AWS CLI , um darauf zuzugreifen. Dies kann sehr hilfreich sein, wenn Sie ein Skript schreiben möchten, das in der Instance ausgeführt werden soll. So können Sie z. B. über die Instance-Metadaten auf die lokale IP-Adresse Ihrer Instance zugreifen, um die Verbindung zu einer externen Anwendung zu verwalten. Instance-Metadaten werden in vier Kategorien unterteilt. Eine Beschreibung der einzelnen Instance-Metadatenkategorien finden Sie unter Unterstützte Instance-Metadaten und Benutzerdaten in diesem Handbuch.

Gehen Sie wie folgt vor, um alle Kategorien von Instanz-Metadaten innerhalb einer laufenden Instance anzuzeigen IPv4URI:

http://169.254.169.254/latest/meta-data/

Die IP-Adressen sind lokale Adressen (Link-local Addresses) und nur von der Instance aus gültig. Weitere Informationen finden Sie unter Link-local address in Wikipedia.

Alle Instanz-Metadaten werden als Text (HTTPInhaltstyptext/plain) zurückgegeben.

Eine Anfrage nach einer bestimmten Metadatenressource gibt den entsprechenden Wert oder einen HTTP404-Fehlercode — Not Found zurück, wenn die Ressource nicht verfügbar ist.

Eine Anfrage nach einer allgemeinen Metadatenressource (wenn das mit einem / Zeichen URI endet) gibt eine Liste verfügbarer Ressourcen zurück oder einen HTTP404-Fehlercode — Not Found, wenn es keine solche Ressource gibt. Die Listenelemente befinden sich in separaten Zeilen, die durch Zeilenvorschübe abgeschlossen werden (ASCIIZeichencode 10).

Für Anfragen, die mit gestellt wurdenIMDSv1, können die folgenden HTTP Fehlercodes zurückgegeben werden:

  • 400 ‐ Fehlende oder ungültige Parameter — Die PUT Anfrage ist nicht gültig.

  • 401 ‐ Nicht autorisiert — Die GET Anfrage verwendet ein ungültiges Token. Die empfohlene Aktion ist das Erzeugen eines neuen Token.

  • 403 ‐ Forbidden — Die Anfrage ist nicht zulässig oder der Instanz-Metadatendienst ist deaktiviert.