Direkt zum Inhalt

Wie behebe ich Probleme mit der beim HTTP- oder HTTPS-Endpunkt-Abonnementbenachrichtigung zu meinem Amazon-SNS-Thema?

Lesedauer: 4 Minute
0

Ich habe keine Benachrichtigung zur Abonnementbestätigung erhalten, als ich meinen HTTP- oder HTTPS-Endpunkt für ein Amazon Simple Notification Service (Amazon SNS)-Thema abonniert habe. Oder das HTTP/HTTPS-Abonnement befindet sich im bestätigten Zustand, aber ich habe immer noch keine Abonnementbenachrichtigung erhalten.

Lösung

Bevor du deinen HTTP/HTTPS-Endpunkt für ein SNS-Thema abonnierst, musst du dich vergewissern, dass der HTTP/HTTPS-Endpunkt für die Verarbeitung von Amazon-SNS-Nachrichten bereit ist.

Sicherstellen, dass der HTTP/HTTPS-Endpunkt öffentlich zugänglich ist

Amazon SNS unterstützt keine privaten HTTP/HTTPS-Endpunkte. Amazon SNS sendet beim Abonnieren eines HTTP/HTTPS-Endpunkts für ein SNS-Thema über das öffentliche Internet eine HTTP-POST-Anfrage an den Endpunkt. Weitere Informationen findest du unter Analyse von Amazon-SNS-Nachrichtenformaten.

Um zu überprüfen, ob dein Endpunkt öffentlich zugänglich ist, stelle eine POST-Anfrage von deinem lokalen Computer aus, ähnlich der folgenden:

curl -X POST your_HTTPS_endpoint -H "Content-Type:text/plain; charset=UTF-8" --data {"x":"y"} -v

Beispielausgabe:

200 OK

In der vorherigen Ausgabe ist der Endpunkt mit dem Statuscode HTTP 200 OK öffentlich verfügbar.

Wenn du einen HTTP/HTTPS-Endpunkt abonniert hast, der für ein SNS-Thema nicht öffentlich zugänglich ist, erhältst du die folgende Fehlermeldung:

„An error occurred (InvalidParameter) when calling the Subscribe operation: Invalid parameter: Unreachable Endpoint“

Wichtig: Dein Hostname darf keinen Unterstrich enthalten.

Den Endpunkt-Antwort-Header validieren

Gehe wie folgt vor, je nachdem, ob du die Standard- oder die Digest-Zugriffsauthentifizierung verwendest. Stelle sicher, dass der Endpunkt HTTPS ist und die Header-Antwort „HTTP/1.1 401 Unauthorized“ unterstützt.

Grundlegende Zugriffsauthentifizierung

Wenn der 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 enthalten, ähnlich dem folgenden:

WWW-Authenticate: Basic

Weitere Informationen findest du unter RFC 2617 auf der RFC-Editor-Website.

Digest-Zugriffsauthentifizierung

Wenn der Endpunkt eine nicht authentifizierte Anfrage erhält, gibt er eine Header-Antwort „HTTP/1.1 401 Unauthorized“ zusammen mit einem WWW-Authenticate-Header zurück. Der Header-Wert muss Folgendes enthalten:

  • das Schlüsselwort „Digest“
  • einen zufällig generierten Einmal-Nonce-Wert
  • einen Authentifizierungsbereich
  • andere optionale Parameter, die in RFC 2617 auf der RFC Editor-Website unterstützt werden

Beispiel für einen Header-Wert:

WWW-Authenticate: Digest realm="testrealm@host.com",
                        qop="auth,auth-int",
                        nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
                        opaque="5ccc069c403ebaf9f0171e9517f40e41"

Protokollierung des Zustellungsstatus einrichten

Gehe wie folgt vor:

  1. Richte Zustellungsstatusprotokolle für dein SNS-Thema ein.
  2. Zeige die Protokolldaten für die Übermittlung deiner SNS-Abonnementbestätigungsbenachrichtigung an, die generiert wird, wenn du einen HTTP/HTTPS-Endpunkt abonnierst.

Beispiel für eine Fehlerprotokollausgabe:

sns/your_aws_region/your_account_ID/your_topic_name/Failure

Hinweis: Um zu sehen, warum deine Abonnementbestätigungsbenachrichtigung nicht zugestellt wurde, überprüfe das providerResponse-Attribut in den Amazon-CloudWatch-Zustellungsstatusprotokollen. Weitere Informationen findest du unter Gründe für Fehlschläge bei der SMS-Zustellung.

Überprüfen des SSL-Zertifikats für den HTTPS-Endpunkt

Wenn du einen HTTPS-Endpunkt verwendest, gehe bei der Problembehandlung wie folgt vor:

  1. Vergewissere dich, dass das vom Endpunkt zurückgegebene SSL-Zertifikat gültig und von einer Zertifizierungsstelle signiert ist, der Amazon SNS vertraut.

  2. Stelle sicher, dass der Endpunkt die gesamte Zertifikatskette zurückgibt. Die komplette Kette umfasst alle Zwischenzertifikate.
    Hinweis: Du kannst Tools von Drittanbietern verwenden, um zu überprüfen, ob das von deinem Endpunkt zurückgegebene SSL-Zertifikat vertrauenswürdig und vollständig ist. Du kannst beispielsweise den SSL Server Test (SSL-Servertest) auf der SSL-Labs-Website verwenden.

  3. Führe den folgenden OpenSSL-Befehl aus, um zu überprüfen, ob das von deinem Endpunkt zurückgegebene SSL-Zertifikat vertrauenswürdig und vollständig ist:

    openssl s_client -connect yourHostname:443 -servername yourHostname -showcerts

    Beispiel für eine fehlgeschlagene providerResponse für ein SSL-Zertifikat n CloudWatch-Protokollen:

    {
        "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, ob eine Firewall den HTTP/HTTPS-Endpunkt blockiert

Wenn eine Firewall die Zustellung der SNS-Abonnementbestätigungsbenachrichtigung an die HTTP/HTTPS-Endpunkte verhindert, lasse die regionsspezifischen IP-Adressen der AWS-Region zu.

Prüfen, ob der HTTP/HTTPS-Endpunkt über eine Abonnementfilterrichtlinie verfügt

Wenn sich der Endpunkt in einem abonnierten Status befindet, aber keine Themenbenachrichtigungen erhalten hat, überprüfe, ob für den Endpunkt eine Abonnementfilterrichtlinie konfiguriert ist. Wenn das HTTP/HTTPS-Abonnement über eine Filterrichtlinie verfügt, filtert die Richtlinie möglicherweise Benachrichtigungen.

Um dich zu vergewissern, dass deine SNS-Nachrichten gefiltert wurden, überprüfe die CloudWatch-Metriken NumberOfNotificationsFilteredOut, NumberOfNotificationsFilteredOut-InvalidAttributes und NumberOfNotificationsFilteredOut-NoMessageAttributes.

Weitere Informationen findest du unter How do I troubleshoot message filtering issues in Amazon SNS? (Wie behebe ich Probleme mit der Nachrichtenfilterung in Amazon SNS?)

AWS OFFICIALAktualisiert vor 6 Monaten