Wie behebe ich Probleme, wenn ich einen HTTP (S) -Endpunkt für mein Amazon SNS-Thema abonniere?
Ich kann keine Benachrichtigung zur Abonnementbestätigung erhalten, wenn ich meinen HTTP- oder HTTPS-Endpunkt für ein Amazon Simple Notification Service (Amazon SNS) -Thema abonniere.
Behebung
Bevor Sie Ihren HTTP(S)-Endpunkt für ein SNS-Thema abonnieren, müssen Sie bestätigen, dass der HTTP(S)-Endpunkt für die Verarbeitung von Amazon SNS-Nachrichten bereit ist.
Hinweis: Nehmen Sie die folgenden Schritte auch dann vor, wenn Ihr HTTP(S)-Abonnement bestätigt ist, Sie aber trotzdem keine Benachrichtigungen erhalten.
Stellen Sie sicher, dass Ihr HTTP(S)-Endpunkt öffentlich zugänglich ist, bevor Sie ein SNS-Thema abonnieren
Amazon SNS unterstützt keine privaten HTTP(S)-Endpunkte. Amazon SNS sendet beim Abonnieren eines HTTP(S)-Endpunkts für ein SNS-Thema über das öffentliche Internet eine HTTP-POST-Anfrage an Ihren Endpunkt. Weitere Informationen und Beispiele für POST-Anfragen finden Sie unter Parsing von Nachrichtenformaten.
Um zu überprüfen, ob Ihr Endpunkt öffentlich zugänglich ist, stellen Sie eine Beispiel-POST-Anfrage von Ihrem lokalen Computer aus. Zum Beispiel:
curl -X POST your_HTTPS_endpoint -H "Content-Type:text/plain; charset=UTF-8" --data {"x":"y"} -v
Wenn Ihr Endpunkt öffentlich zugänglich ist, gibt der Befehl den folgenden HTTP-Statuscode zurück:
200 OK
Wenn Sie einen HTTP-Endpunkt abonnieren, der für ein SNS-Thema nicht öffentlich zugänglich ist, erhalten Sie die folgende Fehlermeldung:
An error occurred (InvalidParameter) when calling the Subscribe operation: Invalid parameter: Unreachable Endpoint
Wichtig: Ihr Hostname darf keinen Unterstrich enthalten. Der folgende Hostname ist beispielsweise nicht zulässig: your_hostname
Validieren Sie Ihren Endpunkt-Antwort-Header
Führen Sie je nach verwendetem Authentifizierungstyp die folgenden Schritte aus: grundlegende Authentifizierung oder Digest-Zugangsauthentifizierung. Stellen Sie sicher, dass Ihr Endpunkt „https“ ist und die HTTP/1.1 401 Unauthorized Header-Antwort unterstützt.
Grundlegende Zugriffsauthentifizierung:
Wenn Ihr Endpunkt eine nicht authentifizierte Anfrage erhält, gibt er die Header-Antwort HTTP/1.1 401 Unauthorized zusammen mit einem „WWW-Authenticate“-Header zurück. Der Header-Wert muss das Schlüsselwort „Basic“ und andere optionale Parameter enthalten, die in RFC 2617 (von der RFC Editor-Website) unterstützt werden. Zum Beispiel:
WWW-Authenticate: Basic
Digest-Zugriffsauthentifizierung:
Wenn Ihr Endpunkt eine nicht authentifizierte Anfrage erhält, sollte er die Header-Antwort HTTP/1.1 401 Unauthorized zusammen mit einem „WWW-Authenticate“-Header zurückgeben. Der Header-Wert muss Folgendes enthalten:
- das Keyword Digest
- ein zufällig generierter Einmalwert, der als „Nonce“ bezeichnet wird
- ein Authentifizierungsbereich
- andere optionale Parameter, die in RFC 2617 unterstützt werden (von der RFC Editor-Website)
Zum Beispiel:
WWW-Authenticate: Digest realm="testrealm@host.com", qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"
Richten Sie die Protokollierung des Lieferstatus ein
Führen Sie die folgenden Schritte aus:
- Richten Sie Lieferstatusprotokolle ein für Ihr SNS-Thema.
- Sehen Sie sich die Protokolldaten für die Übermittlung Ihrer SNS-Abonnementbestätigungsbenachrichtigung an, die generiert wird, wenn Sie versuchen, einen HTTP(S)-Endpunkt zu abonnieren.
Eventuelle Fehlerprotokolle werden in einer Protokollgruppe im folgenden Format generiert:
sns/your_aws_region/your_account_ID/your_topic_name/Failure
Hinweis: Um zu sehen, warum Ihre Abonnementbestätigungsbenachrichtigung nicht zugestellt wurde, überprüfen Sie providerResponse in Ihren Amazon-CloudWatch-Lieferstatusprotokollen.
Überprüfen Sie das SSL-Zertifikat für Ihren HTTPS-Endpunkt
Wenn Sie einen HTTPS-Endpunkt verwenden, führen Sie die folgenden Schritte zur Fehlerbehebung durch:
-
Bestätigen Sie, dass das vom Endpunkt zurückgegebene SSL-Zertifikat gültig und von einer Zertifizierungsstelle signiert ist, der Amazon SNS vertraut.
-
Stellen Sie sicher, dass Ihr Endpunkt die gesamte Zertifikatskette zurückgibt. Die komplette Kette umfasst alle Zwischenzertifikate.
Hinweis: Sie können Tools von Drittanbietern verwenden, um zu überprüfen, ob das von Ihrem Endpunkt zurückgegebene SSL-Zertifikat vertrauenswürdig und vollständig ist. Sie können beispielsweise den SSL-Servertest von der SSL Labs-Website verwenden.
Oder führen Sie den folgenden OpenSSL-Befehl aus, um zu überprüfen, ob das von Ihrem Endpunkt zurückgegebene SSL-Zertifikat vertrauenswürdig und vollständig ist:
openssl s_client -connect yourHostname:443 -servername yourHostname -showcerts
Wenn das vom Endpunkt zurückgegebene SSL-Zertifikat nicht vertrauenswürdig oder nicht vollständig ist, können Sie in Ihren CloudWatch-Protokollen die folgende providerResponse sehen:
{ "notification": { "messageId": "...", "topicArn": "arn:aws:sns:ap-northeast-1:***:***", "timestamp": "2021-05-12 06:41:20.778" }, "delivery": { "deliveryId": "***", "destination": "https://***", "providerResponse": "SSLPeerUnverifiedException in HttpClient", "dwellTimeMs": 66171, "attempts": 4 }, "status": "FAILURE" }
Prüfen Sie, ob eine Firewall Ihren HTTP(S)-Endpunkt blockiert
Wenn eine Firewall die Übermittlung der SNS-Abonnementbestätigungsbenachrichtigung an Ihre HTTP(S)-Endpunkte verhindert, lassen Sie die regionsspezifischen IP-Adressen der AWS-Region zu.
Prüfen Sie, ob Ihr HTTP(S)-Endpunkt über eine Abonnementfilterrichtlinie verfügt
Gehen Sie wie folgt vor, wenn Ihr Endpunkt abonniert ist, aber keine Benachrichtigungen zu Themen erhält:
- Prüfen Sie, ob für Ihren Endpunkt eine Abonnementfilterrichtlinie konfiguriert ist. Wenn Ihr HTTP(S)-Abonnement über eine Filterrichtlinie verfügt, werden Benachrichtigungen möglicherweise gefiltert.
- Um zu überprüfen, ob Ihre SNS-Nachrichten gefiltert werden, überprüfen Sie die folgenden CloudWatch-Metriken: NumberOfNotificationsFilteredOut, NumberOfNotificationsFilteredOut-InvalidAttributes und NumberOfNotificationsFilteredOut-NoMessageAttributes.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr