Come posso risolvere i problemi quando sottoscrivo un endpoint HTTP(S) al mio argomento Amazon SNS?

4 minuti di lettura
0

Non riesco a ricevere una notifica di conferma dell'abbonamento quando sottoscrivo il mio endpoint HTTP o HTTPS a un argomento di Amazon Simple Notification Service (Amazon SNS).

Soluzione

Prima di sottoscrivere l’endpoint HTTP(S) a un argomento SNS, devi confermare che l'endpoint HTTP(S) sia pronto per elaborare i messaggi Amazon SNS.

Nota: I passaggi seguenti si applicano anche agli scenari in cui l'abbonamento HTTP(S) è confermato, ma non ricevi ancora notifiche.

Verifica che il tuo endpoint HTTP(S) sia accessibile pubblicamente prima di iscriverti a un argomento SNS

Amazon SNS non supporta gli endpoint HTTP(S) privati. Amazon SNS invia una richiesta HTTP POST al tuo endpoint tramite Internet pubblico quando sottoscrivi un endpoint HTTP(S) a un argomento SNS. Per ulteriori informazioni ed esempi di richieste POST, consulta Analisi dei formati di messaggi.

Per verificare se il tuo endpoint è accessibile al pubblico, effettua una richiesta POST di esempio dal tuo computer locale. Ad esempio:

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

Se l'endpoint è accessibile pubblicamente, il comando restituisce il seguente codice di stato HTTP:

200 OK

Se stai sottoscrivendo un endpoint HTTP che non è accessibile pubblicamente a un argomento SNS, ricevi il seguente errore:

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

Importante: il nome host non deve contenere alcun carattere di sottolineatura. Ad esempio, il seguente nome host non è consentito: your_hostname

Convalida l'intestazione della risposta dell'endpoint

Completa i seguenti passaggi in base al tipo di autenticazione che stai utilizzando: autenticazione di accesso basic o digest. Assicurati che il tuo endpoint sia 'https' e supporti la risposta HTTP/1.1 401 Unauthorized header.

Autenticazione di accesso di base:

Quando l'endpoint riceve una richiesta non autenticata, restituisce la risposta HTTP/1.1 401 Unauthorized header insieme all'intestazione "WWW-Authenticate". Il valore dell'intestazione deve contenere la parola chiave "Basic" e altri parametri opzionali supportati in RFC 2617 (dal sito Web di RFC Editor). Ad esempio:

WWW-Authenticate: Basic

Autenticazione di accesso digest:

Quando l'endpoint riceve una richiesta non autenticata, restituisce una risposta HTTP/1.1 401 Unauthorized header insieme a un'intestazione "WWW-Authenticate". Il valore dell'intestazione deve contenere quanto segue:

  • la parola chiave Digest
  • un valore monouso generato casualmente chiamato "nonce"
  • un campo di autenticazione
  • altri parametri opzionali supportati in RFC 2617 (dal sito Web RFC Editor)

Ad esempio:

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

Configura la registrazione dello stato della consegna

Completa i seguenti passaggi:

  1. Imposta i log dello stato di consegna per l’argomento SNS.
  2. Visualizza i dati di log per la consegna della notifica di conferma dell'abbonamento SNS generata quando provi a sottoscrivere un endpoint HTTP(S).

I log degli errori, se presenti, verranno generati in un gruppo di log nel seguente formato:

sns/your_aws_region/your_account_ID/your_topic_name/Failure

Nota: per scoprire perché la notifica di conferma dell'abbonamento non è stata recapitata, controlla providerResponse nei log dello stato di consegna di Amazon CloudWatch.

Controlla il certificato SSL dell’endpoint HTTPS

Se utilizzi un endpoint HTTPS, completa i seguenti passaggi per la risoluzione dei problemi:

  1. Verifica che il certificato SSL restituito dall'endpoint sia valido e firmato da un'autorità di certificazione ritenuta attendibile da Amazon SNS.

  2. Verifica che l’endpoint restituisca l'intera catena di certificati. La catena completa include tutti i certificati intermedi.

    Nota: puoi utilizzare strumenti di terze parti per verificare se il certificato SSL restituito dall’endpoint è attendibile e completo. Ad esempio, puoi utilizzare SSL Server Test dal sito web di SSL Labs.

    Oppure, per verificare se il certificato SSL restituito dall’endpoint è attendibile e completo, esegui il seguente comando OpenSSL:

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

    Se il certificato SSL restituito dall'endpoint non è attendibile o completo, i log di CloudWatch potrebbero contenere la seguente providerResponse:

    {
        "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"
    }

Controlla se un firewall sta bloccando l’endpoint HTTP(S)

Se un firewall impedisce l'invio della notifica di conferma della sottoscrizione SNS agli endpoint HTTP(S), autorizza gli indirizzi IP specifici della regione AWS.

Verifica se il tuo endpoint HTTP(S) ha una policy di filtro di sottoscrizione

Se l’endpoint è in stato di abbonamento ma non riceve notifiche relative agli argomenti, completa i seguenti passaggi:

  1. Controlla se l’endpoint ha una policy di filtro di abbonamento configurata. Se l’abbonamento HTTP(S) ha una policy di filtro, le notifiche potrebbero essere filtrate.
  2. Per verificare se i messaggi SNS vengono filtrati, controlla i seguenti parametri di CloudWatch: NumberOfNotificationsFilteredOut, NumberOfNotificationsFilteredOut-InvalidAttributes e NumberOfNotificationsFilteredOut-NoMessageAttributes.
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa