View a markdown version of this page

Auf Instance-Metadaten für eine EC2-Instance 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 Instance-Metadaten für eine EC2-Instance zugreifen

Sie können auf die Metadaten der EC2-Instance innerhalb der Instance selbst oder über die EC2-Konsole, API, SDKs oder die AWS CLI zugreifen. 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 Benutzerdaten für Instances mit einem EBS-Stamm-Volume ändern. Die Instances muss angehalten werden. Eine Anleitung für die Konsole finden Sie unter Instance-Benutzerdaten aktualisieren. Ein Linux-Beispiel, das das verwendet AWS CLI, finden Sie unter https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html modify-instance-attribute. Ein Windows-Beispiel, das die Tools für Windows verwendet, finden Sie unter. PowerShell Benutzerdaten und die Tools für Windows PowerShell

Anmerkung

Beachten Sie, dass für HTTP-Anfragen für den Abruf von Instance-Metadaten und Benutzerdaten keine Gebühren berechnet werden.

Überlegungen zum Instance-Zugriff auf Instance-Metadaten

Beachten Sie Folgendes, um Probleme mit Instanzmetadaten zu vermeiden.

Fehler beim Starten der Instanz aufgrund der IMDSv2-Durchsetzung () HttpTokensEnforced=enabled

Bevor Sie die IMDSv2-Erzwingung aktivieren, muss Ihre gesamte Software auf der Instance IMDSv2 unterstützen. Danach können Sie die Standardeinstellung ändern, um IMDSv1 (httpTokens=required) zu deaktivieren. Danach können Sie die Durchsetzung aktivieren. Weitere Informationen finden Sie unter Übergang zur Verwendung von Instance-Metadatenservice Version 2.

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.

Wenn IMDSv2 erforderlich ist, funktioniert IMDSv1 nicht

Wenn Sie IMDSv1 verwenden und keine Antwort erhalten, ist wahrscheinlich IMDSv2 erforderlich. Um zu überprüfen, ob IMDSv2 erforderlich ist, wählen Sie die Instance aus, um deren Details anzuzeigen. Der IMDSv2-Wert gibt entweder Erforderlich (Sie müssen IMDSv2 verwenden) oder Optional (Sie können entweder IMDSv2 oder IMDSv1 verwenden) an.

(IMDSv2) /latest/api/token wird verwendet, 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 EC2 einen neuen Instance-Metadaten-Build veröffentlicht, empfehlen wir, latest im Pfad zu verwenden, nicht die Versionsnummer.

IPv6-Support

Um Instance-Metadaten über eine IPv6-Adresse abzurufen, stellen Sie sicher, dass Sie die IPv6-Adresse des IMDS [fd00:ec2::254] anstelle der IPv4-Adresse 169.254.169.254 aktivieren und verwenden. Bei der Instance muss es sich um eine Instance handeln, die in einem Nitro-based Subnetz gestartet wird, das IPv6 unterstützt. https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-ip-address-range

(Windows) Erstellen benutzerdefinierter AMIs mit Windows Sysprep

Um sicherzustellen, dass IMDS funktioniert, wenn Sie eine Instance von einem benutzerdefinierten Windows-AMI starten, muss das AMI ein standardisiertes Image sein, welches mit Windows Sysprep erstellt wurde. Andernfalls funktioniert der IMDS nicht. Weitere Informationen finden Sie unter Ein Amazon-EC2-AMI mit Windows Sysprep erstellen.

Erwägen Sie in einer Container-Umgebung eine Neukonfiguration oder Erhöhung des Hop-Limits auf 2.

Die AWS SDKs verwenden standardmäßig IMDSv2-Aufrufe. Wenn der IMDSv2-Anruf keine Antwort erhält, wiederholen einige AWS SDKs den Anruf und verwenden IMDSv1, falls er immer noch nicht erfolgreich ist. Dies kann zu einer Verzögerung führen, insbesondere in einer Container-Umgebung. Wenn bei AWS SDKs, die IMDSv2 benötigen, das Hop-Limit in einer Containerumgebung bei 1 liegt, erhält der Anruf möglicherweise überhaupt keine Antwort, da das Aufrufen des Containers als zusätzlicher Netzwerk-Hop betrachtet wird.

Um diese Probleme in einer Container-Umgebung zu minimieren, sollten Sie erwägen, die Konfiguration so zu ändern, dass Einstellungen (wie die AWS-Region) direkt an den Container weitergegeben werden, oder erwägen Sie, das Hop-Limit auf 2 zu erhöhen. Weitere Informationen über die Auswirkung des Hop-Limits finden Sie unter Erweitern Sie den EC2-Instance-Metadata-Service um Verbesserungen bei der Abwehr von offenen Firewalls, Reverse-Proxys und SSRF-Schwachstellen. Weitere Informationen zum Ändern des Hop-Limits finden Sie unter Ändern des PUT-Antwort-Hop-Limits.

Begrenzen von Paketen pro Sekunde (PPS)

Für Services, die Link-Local-Adressen verwenden, gilt eine Obergrenze von 1 024 Paketen pro Sekunde (PPS). Dieses Limit umfasst die Summe von Route-53-Resolver-DNS-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 Sie verwenden, wird die Base64-Kodierung möglicherweise für Sie durchgeführt. Beispiel:

    • Die Amazon EC2-Konsole kann die base64-Codierung für Sie durchführen oder base64-codierte Eingaben entgegennehmen.

    • AWS CLI Version 2 führt standardmäßig die Base64-Codierung 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 für 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 ein AMI auf der Grundlage einer Instance erstellen, sind die Instance-Benutzerdaten nicht im AMI enthalten.

Auf Instance-Metadaten innerhalb einer EC2-Instance zugreifen

Da Ihre Instance-Metadaten von der ausgeführten Instance verfügbar sind, müssen Sie nicht die Amazon-EC2-Konsole oder die AWS CLI verwenden. 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 auf Instance-Metadateneigenschaften innerhalb einer ausgeführten Instance zuzugreifen, rufen Sie die Daten von den folgenden IPv4- oder IPv6-URIs ab. Die IP-Adressen sind Link-lokale Adressen und nur von der Instance aus gültig. Weitere Informationen finden Sie unter Link-local Adressen.

IPv4

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

IPv6

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

Um dynamische Daten aus einer laufenden Instance abzurufen, verwenden Sie die folgenden URIs.

IPv4

http://169.254.169.254/latest/dynamic/

IPv6

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

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

Die folgenden Beispiele werden verwendet PowerShell , um die allgemeinen Instanz-Identitätskategorien abzurufen.

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 Instance-Identitätsdokumente für Amazon-EC2-Instances.

User data

Verwenden Sie eine der folgenden URIs, um Benutzerdaten aus einer Instance abzurufen. Um Benutzerdaten mithilfe der IPv6-Adresse abzurufen, müssen Sie sie aktivieren. Außerdem muss es sich bei der Instance um eine Nitro-based Instance in einem Subnetz handeln, das IPv6 unterstützt.

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 cURL zum Abrufen von kommagetrenntem Text

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: Zugriff mit, um kommagetrennten Text PowerShell abzurufen

Die folgenden Beispiele werden verwendet PowerShell , um Benutzerdaten abzurufen, 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: Zugriff mit cURL zum Abrufen eines Skripts

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 mit, PowerShell um ein Skript abzurufen

Die folgenden Beispiele werden verwendet PowerShell , um Benutzerdaten abzurufen, 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 vorhandene Instances abfragen.

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

  2. Wählen Sie im Navigationsbereich Instances aus.

  3. Wählen Sie Ihre Instance aus und überprüfen Sie die folgenden Felder:

    • IMDSv2 – Der Wert ist entweder Erforderlich oder Optional.

    • Tags in Instance-Metadaten zulassen – Der Wert ist entweder Aktiviert oder Deaktiviert.

  4. Wenn Sie die Instance ausgewählt haben, wählen Sie Aktionen, Instance-Einstellungen und Instance-Metadatenoptionen ändern.

    Im Dialogfeld wird angezeigt, ob der Instance-Metadatenservice für die ausgewählte Instance aktiviert oder deaktiviert ist.

AWS CLI
So fragen Sie die Instance-Metadatenoptionen für eine vorhandene Instance ab

Verwenden Sie den Befehl describe-instances.

aws ec2 describe-instances \ --instance-id i-1234567898abcdef0 \ --query 'Reservations[].Instances[].MetadataOptions'
PowerShell
Um die Instanzmetadatenoptionen für eine vorhandene Instanz abzufragen, verwenden Sie die Tools für PowerShell

Verwenden Sie das cmdlet Get-EC2Instance.

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

Antworten und Fehlermeldungen

Alle Instance-Metadaten werden als Text zurückgegeben (HTTP-Inhaltstyp text/plain).

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

Eine Anfrage für eine allgemeine Metadatenressource (der URI endet auf „/”) gibt eine Liste der verfügbaren Ressourcen oder einen HTTP-Fehlercode 404 - Not Found zurück, wenn keine entsprechenden Ressourcen vorhanden sind. Die Listenelemente stehen jeweils in einer eigenen Zeile, d. h. sie sind durch Zeilenvorschübe (ASCII 10) getrennt.

Wenn eine IMDSv1-Anforderung keine Antwort erhält, ist wahrscheinlich IMDSv2 erforderlich.

Für Anforderungen, die mit IMDSv2 gestellt werden, 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 der IMDS ist deaktiviert.

  • 404 - Not Found – Die Ressource ist nicht verfügbar oder es gibt keine solche Ressource.

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

Wenn das IMDS einen Fehler zurückgibt, druckt curl die Fehlermeldung in der Ausgabe und gibt einen Erfolgsstatuscode zurück. 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 die Abfragen an den IMDS pro Instance und begrenzen die Anzahl gleichzeitiger Verbindungen von einer Instance zum IMDS.

Wenn Sie das IMDS zum Abrufen von AWS Sicherheitsanmeldeinformationen verwenden, vermeiden Sie es, bei jeder Transaktion oder gleichzeitig bei einer hohen Anzahl von Threads oder Prozessen nach Anmeldeinformationen abzufragen, 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 über die IAM-Rolle und die der Rolle zugeordneten Sicherheitsanmeldeinformationen finden Sie unter Abrufen von Sicherheitsanmeldeinformationen aus Instance-Metadaten.

Wenn es beim Zugriff auf den IMDS zu einer Drosselung kommt, versuchen Sie Ihre Abfrage mit einer exponentiellen Backoff-Strategie erneut.