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 il tuo 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 dell'host non deve contenere un trattino basso. 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, dovrebbe restituire 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, dovrebbe restituire una risposta HTTP/1.1 401 Unauthorized header insieme a un'intestazione "WWW-Authenticate". Il valore dell'intestazione deve contenere la parola chiave "Digest", un valore monouso generato casualmente chiamato "nonce", un campo di autenticazione e altri parametri opzionali supportati in RFC 2617 (dal sito Web di 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

1.    Imposta i registri dello stato di consegna per il tuo argomento SNS. 

2.    Visualizza i dati di registro 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 registri dello stato di consegna di Amazon CloudWatch.

Controlla il certificato SSL per il tuo 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 affidabile da Amazon SNS

2.    Verifica che il tuo 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 dal tuo endpoint è affidabile e completo. Ad esempio, puoi utilizzare SSL Server Test dal sito web di SSL Labs.

Oppure, per verificare se il certificato SSL restituito dal tuo endpoint è affidabile e completo, esegui il seguente comando OpenSSL:

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

Se il certificato SSL restituito dall'endpoint non è affidabile o completo, nei log di CloudWatch potresti visualizzare il 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 il tuo 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 il tuo endpoint è abbonato ma non riceve notifiche relative agli argomenti, completa i seguenti passaggi:

1.    Controlla se il tuo endpoint ha una policy di filtro di sottoscrizione configurata. Se il tuo abbonamento HTTP(S) ha una policy di filtro, le notifiche potrebbero essere filtrate.

2.    Per confermare che i tuoi messaggi SNS vengano filtrati, controlla i seguenti parametri di CloudWatch: NumberOfNotificationsFilteredOutNumberOfNotificationsFilteredOut-InvalidAttributes,e NumberOfNotificationsFilteredOut-NoMessageAttributes.


AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa