Wie kann ich Instance-Metadatenprobleme auf meiner EC2-Linux-Instance beheben?

Lesedauer: 4 Minute
0

Ich kann keine Instance-Metadaten von meiner Amazon Elastic Compute Cloud (Amazon EC2) Linux-Instance abrufen.

Kurzbeschreibung

Instance-Metadaten sind Informationen über die EC2-Instance, wie Instance-ID, öffentliche und private IP-Adressen, Sicherheitsgruppen, AWS Identity and Access Management (IAM)-Rollen usw. Die Instance-Metadaten werden der Instance über HTTP-Anfragen an 169.254.169.254 zur Verfügung gestellt.

Beim Abrufen von Instance-Metadaten aus dem Instance Metadata Service (IMDS) können die folgenden Probleme auftreten:

  • HTTP-Anforderungsfehler
  • Proxy-Konfiguration
  • Lokale Firewallregeln
  • Drosselung anfordern

Behebung

HTTP-Anforderungsfehler

Wenn Sie eine HTTP-Anfrage zum Abrufen von Instance-Metadaten stellen, werden möglicherweise die folgenden HTTP-Fehlercodes zurückgegeben:

HTTP 404 - Not Found

Der HTTP 404-Fehler bezieht sich auf IMDS v1. Dieser Fehler tritt auf, wenn die angeforderte Ressource nicht verfügbar ist. Vergewissern Sie sich, dass Sie die richtige URL verwenden.

400 - Bad Request

Der 400 - Bad Request-Fehler bezieht sich auf IMDS v2. Dieser Fehler tritt auf, wenn die PUT-Anfrage nicht gültig ist.

401 - Unauthorized

Der 401 - Unauthorized-Fehler tritt auf, wenn die GET-Anfrage ein ungültiges Token verwendet. Wenn dies der Fall ist, generieren Sie ein neues Token.

403 - Forbidden

Der 403 - Forbidden-Fehler tritt auf, wenn die Anfrage nicht zulässig ist oder IMDS ausgeschaltet ist. Führen Sie den folgenden Befehl aus, um den IMDS-Status zu überprüfen. Ersetzen Sie im folgenden Beispielbefehl your_instance_ID durch den richtigen Wert für Ihren Anwendungsfall.

$ aws ec2 describe-instances -instance-ids  -query 'Reservations[].Instances[].MetadataOptions'

Im Folgenden finden Sie eine Beispielausgabe des vorherigen Befehls:

[
  {
    "State": "applied",
    "HttpTokens": "optional",
    "HttpPutResponseHopLimit": 1,
    "HttpEndpoint": "disabled",
    "HttpProtocolIpv6": "disabled",
    "InstanceMetadataTags": "disabled"
  }
]

Wenn die Befehlsoption anzeigt, dass der HttpEndpoint ausgeschaltet ist, führen Sie den folgenden Befehl aus:

aws ec2 modify-instance-metadata-options \
    --instance-id  \
    --http-endpoint enabled

Proxy-Konfiguration

Wenn Sie einen Proxy verwenden, um auf das Internet zuzugreifen, müssen Sie die IMDS-IP-Adresse (169.254.169.254) ausschließen. Wenn die IMDS-IP-Adresse nicht ausgeschlossen ist, können Sie möglicherweise keine Instance-Metadaten abrufen.

Um die IMDS-IP-Adresse von der Proxy-Verwendung auszuschließen, legen Sie eine NO_PROXY-Umgebungsvariable mit der folgenden Adresse fest:

export NO_PROXY=169.254.169.254

Lokale Firewallregeln

Firewalls in der Instance können verhindern, dass einige oder alle Prozesse auf das IMDS zugreifen.

Stellen Sie sicher, dass Firewalls im Betriebssystem der Instance den ausgehenden Datenverkehr zur IP-Adresse der Instance-Metadaten nicht blockieren. Zu den Firewalls gehören iptables, UFW (uncomplicated firewall) und so weiter.

Verwenden Sie den folgenden Befehl, um die Firewallregeln für iptables zu überprüfen

sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
REJECT     tcp  --  anywhere             169.254.169.254      owner UID match 1000-10000 reject-with icmp-port-unreachable

Wenn das Ergebnis der iptables-Liste eine Ablehnung des Abrufs von Metadaten anzeigt, erhalten Sie möglicherweise die folgende Fehlermeldung:

$ curl http://169.254.169.254/latest/meta-data/
curl: (7) Failed to connect to 169.254.169.254 port 80 after 0 ms: Connection refused

Um diesen Fehler zu beheben, führen Sie den folgenden Befehl aus, um die Regel zu löschen:

$ sudo iptables -D OUTPUT -proto tcp -destination 169.254.169.254 -match owner -uid-owner 1000-10000 -jump REJECT

Drosselung anfordern

Der Datenverkehr zum IMDS wird basierend auf der Anzahl der Pakete pro Sekunde gedrosselt. Und es gibt ein Limit von 1024 PPS für jedes Elastic Network Interface, das an die Instance angeschlossen ist. Wenn Ihre PPS-Rate für den IMDS-Dienst 1024 PPS übersteigt, wird die Anfrage gedrosselt.

Wenn eine Drosselung auftritt, wiederholen Sie Ihre Anfrage mit einer exponentiellen Backoff-Strategie.

Um zu sehen, wie oft EC2-Instances die Drosselungsgrenzen erreichen, überprüfen Sie die Metrik linklocal_allowance_exceeded im Elastic Network Interface-Treiber. Diese Metrik gibt an, dass die Anzahl der Pakete, die aufgrund des Datenverkehrs zu lokalen Proxydiensten geformt wurden, das Maximum für die Netzwerkschnittstelle überschreitet.

Führen Sie den folgenden Befehl aus, um die Metrik linklocal_allowance_exceeded anzuzeigen:

$ ethtool -S <Network-Interface>
eg: $ ethtool -S eth0

Verwandte Informationen

Verwendung eines Proxys auf Amazon EC2-Instances

Beispiele für das Abrufen von Instance-Metadaten

IMDS-Zugriff einschränken

Drosselung von Abfragen

Metriken für den ENA-Treiber

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 8 Monaten

Relevanter Inhalt