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, sollte er die HTTP/1.1 401 Unauthorized Header-Antwort zusammen mit einem „WWW-Authenticate“-Header zurückgeben. Der Header-Wert sollte 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 eine HTTP/1.1 401 Unauthorized Header-Antwort zusammen mit einem „WWW-Authenticate“-Header zurückgeben. Der Header-Wert sollte das Schlüsselwort „Digest“, einen zufällig generierten Einmalwert namens „nonce“, einen Authentifizierungsbereich und andere optionale Parameter enthalten, die in RFC 2617 (von der Website des RFC Editors) unterstützt werden. Zum Beispiel:

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

Richten Sie die Protokollierung des Lieferstatus ein

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 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: NumberOfNotificationsFilteredOutNumberOfNotificationsFilteredOut-InvalidAttributes,and NumberOfNotificationsFilteredOut-NoMessageAttributes.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren