Auf Instanz-Metadaten für eine EC2 Instanz zugreifen - Amazon Elastic Compute Cloud

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.

Auf Instanz-Metadaten für eine EC2 Instanz zugreifen

Sie können innerhalb der EC2 Instanz selbst oder über die EC2 Konsole,API, SDKs oder die auf Instanz-Metadaten zugreifen AWS CLI. Informationen zum Abrufen der aktuellen Instance-Metadateneinstellungen für eine Instance über die Konsole oder Befehlszeile finden Sie unter Abfragen von Instance-Metadatenoptionen für vorhandene Instances.

Sie können auch Benutzerdaten für Instances mit einem EBS Root-Volume ändern. Die Instances muss angehalten werden. Eine Anleitung für die Konsole finden Sie unter Instance-Benutzerdaten aktualisieren. Ein Linux-Beispiel, das den verwendet AWS CLI, finden Sie unter modify-instance-attribute. Ein Windows-Beispiel, das die Tools für Windows verwendet PowerShell, finden Sie unterBenutzerdaten und die Tools für Windows PowerShell.

Anmerkung

HTTPAnfragen, die zum Abrufen von Instanz-Metadaten und Benutzerdaten verwendet werden, werden Ihnen nicht in Rechnung gestellt.

Überlegungen zum Instance-Zugriff auf Instance-Metadaten

Um Probleme beim Abrufen von Instance-Metadaten zu vermeiden, sollten Sie Folgendes beachten.

Befehlsformat

Das Befehlsformat ist unterschiedlich, je nachdem, ob Sie Instance Metadata Service Version 1 (IMDSv1) oder Instance Metadata Service Version 2 IMDSv2 verwenden. Standardmäßig können Sie beide Instance-Metadaten-Services verwenden. Um die Verwendung von IMDSv2 zu erzwingen, lesen Sie Instance-Metadaten-Services für den Zugriff auf Instance-Metadaten verwenden.

Es IMDSv2 ist erforderlich, IMDSv1 funktioniert nicht

Wenn Sie es verwenden IMDSv1 und keine Antwort erhalten, IMDSv2 ist dies wahrscheinlich erforderlich. Um zu überprüfen, ob dies erforderlich IMDSv2 ist, wählen Sie die Instanz aus, um ihre Details anzuzeigen. Der IMDSv2Wert gibt entweder Erforderlich (Sie müssen verwendenIMDSv2) oder Optional (Sie können entweder IMDSv2 oder verwendenIMDSv1) an.

(IMDSv2) Verwenden /latest/api/token um das Token abzurufen

Das Ausgeben von PUT-Anfragen an einen beliebigen versionsspezifischen Pfad, beispielsweise /2021-03-23/api/token, führt dazu, dass der Metadatenservice „403-Verboten“-Fehler zurückgibt. Dieses Verhalten ist beabsichtigt.

Metadaten-Version

Um zu vermeiden, dass Sie Ihren Code jedes Mal aktualisieren müssen, wenn Amazon einen neuen Instance-Metadaten-Build EC2 veröffentlicht, empfehlen wir, den Pfad und nicht die Versionsnummer zu verwendenlatest.

IPv6-Support

Um Instance-Metadaten mithilfe einer IPv6 Adresse abzurufen, stellen Sie sicher, dass Sie die IPv6 Adresse von aktivieren und IMDS [fd00:ec2::254] anstelle der IPv4 Adresse verwenden169.254.169.254. Bei der Instance muss es sich um eine Nitro-basierte Instance handeln, die in einem Subnetz gestartet wurde, das unterstützt. IPv6

(Windows) Erstellen Sie eine benutzerdefinierte Version AMIs mit Windows Sysprep

Um sicherzustellen, dass dies IMDS funktioniert, wenn Sie eine Instanz von einem benutzerdefinierten Windows aus startenAMI, AMI muss es sich um ein standardisiertes Image handeln, das mit Windows Sysprep erstellt wurde. Andernfalls funktioniert das IMDS nicht. Weitere Informationen finden Sie unter Ein Amazon-EC2-AMI mit Windows Sysprep erstellen.

In einer Container-Umgebung das Hop-Limit auf 2 festlegen

Die AWS SDKs Verwendung IMDSv2 ruft standardmäßig auf. Wenn der IMDSv2 Anruf keine Antwort erhält, SDK versucht er den Anruf erneut und verwendetIMDSv1, falls er immer noch nicht erfolgreich ist. Dies kann zu einer Verzögerung führen, insbesondere in einer Container-Umgebung. Wenn in einer Containerumgebung das Hop-Limit 1 beträgt, wird die IMDSv2-Antwort nicht zurückgegeben, da das Gehen zum Container als zusätzlicher Netzwerk-Hop gilt. Um zu vermeiden, dass der Prozess auf IMDSv1 zurückfällt und somit die daraus resultierende Verzögerung vermeiden, empfehlen wir, dass Sie die Hop-Grenze in einer Containerumgebung auf 2 setzen. Weitere Informationen finden Sie unter Konfigurieren der Optionen des Instance-Metadaten-Services.

Limit für Pakete pro Sekunde (PPS)

Es gibt ein Limit von 1024 Paketen pro Sekunde (PPS) für Dienste, die link-lokale Adressen verwenden. Dieses Limit umfasst die Summe von Route 53 DNS Resolver-Abfragen, Instance Metadata Service (IMDS) -Anfragen, Amazon Time Service Network Time Protocol (NTP) -Anfragen und Windows Licensing Service-Anfragen (für Microsoft Windows-basierte Instances).

Zusätzliche Überlegungen zum Zugriff auf Benutzerdaten
  • Benutzerdaten werden als Opaque-Daten behandelt: Was Sie eingeben, wird auch ausgegeben. Die Interpretation der Benutzerdaten und die Instance ist Aufgabe der Instance.

  • Benutzerdaten müssen mit Base64 codiert werden. Je nachdem, welches Tool oder SDK welches Sie verwenden, kann die Base64-Kodierung für Sie durchgeführt werden. Beispielsweise:

    • Die EC2 Amazon-Konsole kann die Base64-Kodierung für Sie durchführen oder Base64-kodierte Eingaben akzeptieren.

    • AWS CLI Version 2 führt standardmäßig die Base64-Kodierung von Binärparametern für Sie durch. AWS CLI Version 1 führt die Base64-Kodierung des Parameters für Sie durch. --user-data

    • Die AWS SDK for Python (Boto3) führt die Base64-Kodierung des Parameters für Sie durch. UserData

  • Benutzerdaten sind auf 16 KB an Rohdaten, bevor diese base64-codiert werden, begrenzt. Die Länge einer Zeichenfolge n nach base64-Codierung ist ceil(n/3)*4.

  • Benutzerdaten müssen base64-decodiert werden, wenn Sie sie abrufen. Wenn Sie die Daten über Instance-Metadaten oder die Konsole abrufen, werden sie automatisch für Sie dekodiert.

  • Wenn Sie eine Instance anhalten, ihre Benutzerdaten ändern und die Instance wieder starten, werden die aktualisierten Benutzerdaten nicht automatisch ausgeführt, wenn Sie die Instance starten. Bei Windows-Instances können Sie die Einstellungen so konfigurieren, dass aktualisierte Benutzerdatenskripte einmalig beim Starten der Instance oder bei jedem Neustart oder Start der Instance ausgeführt werden.

  • Benutzerdaten sind ein Instance-Attribut. Wenn Sie eine AMI aus einer Instanz erstellen, sind die Benutzerdaten der Instanz nicht in der enthalten. AMI

Greifen Sie von einer Instanz aus auf EC2 Instanz-Metadaten zu

Da Ihre Instance-Metadaten von Ihrer laufenden Instance aus verfügbar sind, müssen Sie weder die EC2 Amazon-Konsole noch die verwenden AWS CLI. 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.

Alle folgenden Daten werden als Instance-Metadaten betrachtet, der Zugriff erfolgt jedoch auf unterschiedliche Weise. Wählen Sie die Registerkarte aus, die den Typ der Instance-Metadaten darstellt, auf die Sie zugreifen möchten, um weitere Informationen zu erhalten.

Metadata

Instance-Metadaten-Eigenschaften werden in Kategorien unterteilt. Eine Beschreibung der einzelnen Instance-Metadatenkategorien finden Sie unter Instance-Metadatenkategorien.

Um von einer laufenden Instance aus auf die Eigenschaften der Instance-Metadaten zuzugreifen, rufen Sie die Daten aus dem Folgenden ab IPv4 oder IPv6URIs. Die IP-Adressen sind Link-lokale Adressen und nur von der Instance aus gültig. Weitere Informationen finden Sie unter Link-lokale Adressen.

IPv4

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

IPv6

http://[fd00:ec2::254]/latest/meta-data/
Dynamic data

Verwenden Sie eine der folgenden Methoden, um dynamische Daten aus einer laufenden Instanz abzurufenURIs.

IPv4

http://169.254.169.254/latest/dynamic/

IPv6

http://[fd00:ec2::254]/latest/dynamic/
Beispiele: Zugriff mit c URL

Die folgenden Beispiele verwenden cURL, um die High-Level-Instance-Identitätskategorien abzurufen.

IMDSv2

[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" http://169.254.169.254/latest/dynamic/instance-identity/ rsa2048 pkcs7 document signature dsa2048

IMDSv1

[ec2-user ~]$ curl http://169.254.169.254/latest/dynamic/instance-identity/ rsa2048 pkcs7 document signature dsa2048
Beispiele: Zugriff mit PowerShell

In den folgenden Beispielen werden PowerShell die Identitätskategorien für Instanzen auf hoher Ebene abgerufen.

IMDSv2

PS C:\> [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
PS C:\> Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/dynamic/instance-identity/ document rsa2048 pkcs7 signature

IMDSv1

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/dynamic/instance-identity/ document rsa2048 pkcs7 signature

Weitere Informationen zu dynamischen Daten und Beispiele dafür, wie sie abgerufen werden können, finden Sie unter Instanzidentitätsdokumente für EC2 Amazon-Instances.

User data

Verwenden Sie eine der folgenden Methoden, um Benutzerdaten aus einer Instanz abzurufenURIs. Um Benutzerdaten mithilfe der IPv6 Adresse abzurufen, müssen Sie sie aktivieren, und die Instance muss eine Nitro-basierte Instance in einem Subnetz sein, das dies unterstützt. IPv6

IPv4

http://169.254.169.254/latest/user-data

IPv6

http://[fd00:ec2::254]/latest/user-data

Eine Anfrage für Benutzerdaten geben die Daten unverändert zurück (Content-Type application/octet-stream). Wenn die Instance keine Benutzerdaten hat, gibt die Anfrage 404 - Not Found zurück.

Beispiele: Zugriff mit c, um URL kommagetrennten Text abzurufen

Die folgenden Beispiele verwenden cURL, um Benutzerdaten abzurufen, die als kommagetrennter Text angegeben wurden.

IMDSv2

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" http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

IMDSv1

curl http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
Beispiele: Access with, um PowerShell kommagetrennten Text abzurufen

In den folgenden Beispielen werden Benutzerdaten abgerufen PowerShell , die als kommagetrennter Text angegeben wurden.

IMDSv2

[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,

IMDSv1

Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} ` -Method PUT -Uri http://169.254.169.254/latest/api/token} -Method GET -uri http://169.254.169.254/latest/user-data 1234,john,reboot,true | 4512,richard, | 173,,,
Beispiele: Access mit c, URL um ein Skript abzurufen

Die folgenden Beispiele verwenden cURL, um Benutzerdaten abzurufen, die als Skript angegeben wurden.

IMDSv2

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" http://169.254.169.254/latest/user-data #!/bin/bash yum update -y service httpd start chkconfig httpd on

IMDSv1

curl http://169.254.169.254/latest/user-data #!/bin/bash yum update -y service httpd start chkconfig httpd on
Beispiele: Access with PowerShell , um ein Skript abzurufen

In den folgenden Beispielen PowerShell werden Benutzerdaten abgerufen, die als Skript angegeben wurden.

IMDSv2

[string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri http://169.254.169.254/latest/api/token
Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

IMDSv1

Invoke-RestMethod -uri http://169.254.169.254/latest/user-data <powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

Abfragen von Instance-Metadatenoptionen für vorhandene Instances

Sie können die Instance-Metadatenoptionen für Ihre vorhandenen Instances mit einer der folgenden Methoden abfragen.

Console
So fragen Sie die Instance-Metadaten-Optionen für eine bereits vorhandene Instance über die Konsole ab
  1. Öffnen Sie die EC2 Amazon-Konsole unter https://console.aws.amazon.com/ec2/.

  2. Wählen Sie im Navigationsbereich Instances aus.

  3. Wählen Sie Ihre Instance aus.

  4. Wählen Sie Aktionen, Instance-Einstellungen und Instance-Metadata-Optionen ändern.

  5. Überprüfen Sie die aktuellen Optionen für Instance-Metadaten im Dialogfeld „Optionen für Instance-Metadaten ändern“.

AWS CLI
Um die Instance-Metadatenoptionen für eine bestehende Instance abzufragen, verwenden Sie AWS CLI

Verwenden Sie den Befehl describe-instances.

aws ec2 describe-instances \ --instance-id i-1234567898abcdef0 \ --query 'Reservations[].Instances[].MetadataOptions'
PowerShell
Um die Instanz-Metadatenoptionen für eine bestehende Instanz mit den Tools für abzufragen PowerShell

Verwenden Sie das Get-EC2InstanceCmdlet.

(Get-EC2Instance ` -InstanceId i-1234567898abcdef0).Instances.MetadataOptions

Antworten und Fehlermeldungen

Alle Instanzmetadaten werden als Text (HTTPInhaltstyptext/plain) zurückgegeben.

Eine Anforderung für eine bestimmte Metadatenressource gibt den entsprechenden Wert oder einen 404 - Not Found HTTP Fehlercode zurück, wenn die Ressource nicht verfügbar ist.

Eine Anfrage nach einer allgemeinen Metadatenressource (URIendet mit einem/) gibt eine Liste verfügbarer Ressourcen oder einen 404 - Not Found HTTP Fehlercode zurück, falls es keine solche Ressource gibt. Die Listenelemente befinden sich in separaten Zeilen, die durch Zeilenvorschübe (ASCII10) abgeschlossen werden.

Bei Anfragen, die mit Instance Metadata Service Version 2 gestellt wurden, können die folgenden HTTP Fehlercodes zurückgegeben werden:

  • 400 - Missing or Invalid Parameters – Die PUT-Anfrage ist nicht gültig.

  • 401 - Unauthorized – 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 die IMDS ist deaktiviert.

  • 503 – Die Anforderung konnte nicht abgeschlossen werden. Wiederholen Sie die Anforderung.

Wenn der einen Fehler IMDS zurückgibt, wird die Fehlermeldung in der Ausgabe curl gedruckt und ein Erfolgsstatuscode zurückgegeben. Die Fehlermeldung wird in der TOKEN-Variablen gespeichert, was dazu führt, dass curl-Befehle, die das Token verwenden, fehlschlagen. Wenn Sie curl mit der -f Option aufrufen, wird im Falle eines HTTP Serverfehlers ein Fehlerstatuscode zurückgegeben. Wenn Sie die Fehlerbehandlung aktivieren, kann die Shell den Fehler auffangen und das Skript beenden.

Drosselung abfragen

Wir drosseln Anfragen IMDS an die pro Instanz und begrenzen die Anzahl gleichzeitiger Verbindungen von einer Instanz zurIMDS.

Wenn Sie den IMDS zum Abrufen von AWS Sicherheitsanmeldeinformationen verwenden, vermeiden Sie es, bei jeder Transaktion oder gleichzeitig von einer großen Anzahl von Threads oder Prozessen aus nach Anmeldeinformationen zu fragen, da dies zu einer Drosselung führen kann. Wir empfehlen stattdessen, die Anmeldeinformationen im Cache zu speichern, bis sie sich ihrer Ablaufzeit nähern. Weitere Informationen zu IAM Rollen- und Sicherheitsanmeldedaten im Zusammenhang mit der Rolle finden Sie unter. Abrufen von Sicherheitsanmeldeinformationen aus Instance-Metadaten

Wenn Sie beim Zugriff auf gedrosselt werdenIMDS, wiederholen Sie Ihre Abfrage mit einer exponentiellen Backoff-Strategie.