Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Wie behebe ich Probleme, wenn ich einen HTTP (S) -Endpunkt für mein Amazon SNS-Thema abonniere?

Lesedauer: 4 Minute
0

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:

  1. Richten Sie Lieferstatusprotokolle ein für Ihr SNS-Thema.
  2. 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:

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

  2. 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:

  1. 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.
  2. Um zu überprüfen, ob Ihre SNS-Nachrichten gefiltert werden, überprüfen Sie die folgenden CloudWatch-Metriken: NumberOfNotificationsFilteredOut, NumberOfNotificationsFilteredOut-InvalidAttributes und NumberOfNotificationsFilteredOut-NoMessageAttributes.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr