Comment résoudre les problèmes liés à l'abonnement d'un point de terminaison HTTP(S) à ma rubrique Amazon SNS ?

Dernière mise à jour : 2021-0-21

Je ne parviens pas à recevoir de notification de confirmation d'abonnement lorsque j'abonne mon point de terminaison HTTP ou HTTPS à une rubrique Amazon Simple Notification Service (Amazon SNS).

Solution

Avant d'abonner votre point de terminaison HTTP(S) à une rubrique SNS, vous devez confirmer que le point de terminaison HTTP(S) est prêt à traiter les messages Amazon SNS.

Remarque : les étapes suivantes s'appliquent également aux scénarios où votre abonnement HTTP(S) est dans l'état confirmé et que vous ne recevez toujours pas de notifications.

Vérifiez que votre point de terminaison HTTP(S) est accessible publiquement avant de vous abonner à une rubrique SNS

Amazon SNS ne prend pas en charge les points de terminaison HTTP (S) privés. Amazon SNS envoie une requête HTTP POST à votre point de terminaison via l'Internet public lorsque vous abonnez un point de terminaison HTTP(S) à une rubrique SNS. Pour plus d'informations et des exemples de requêtes POST, consultez Parsing message formats (Analyse des formats de messages).

Pour vérifier si votre point de terminaison est accessible publiquement, envoyez un exemple de requête POST depuis votre machine locale. Par exemple :

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

Si votre point de terminaison est accessible publiquement, la commande renvoie le code d'état HTTP suivant :

200 OK

Si vous abonnez un point de terminaison HTTP qui n'est pas accessible publiquement à une rubrique SNS, l'erreur suivante s'affiche :

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

Important : votre nom d'hôte ne doit pas contenir de trait de soulignement. Par exemple, le nom d'hôte suivant n'est pas autorisé : your_hostname

Validation de l'en-tête de réponse de votre point de terminaison

Effectuez les étapes suivantes en fonction du type d'authentification que vous utilisez : authentification d'accès « Basic » ou « Digest ». Assurez-vous que votre point de terminaison est « https » et prend en charge la réponse d'en-tête non autorisée HTTP/1.1 401.

Authentification d'accès « Basic » :

Lorsque votre point de terminaison reçoit une requête non authentifiée, il doit renvoyer la réponse d'en-tête non autorisée HTTP/1.1 401 ainsi qu'un en-tête « WWW-Authenticate ». La valeur d'en-tête doit contenir le mot-clé « Basic » et d'autres paramètres facultatifs pris en charge par RFC 2617 (à partir du site Web de l'éditeur RFC). Par exemple :

WWW-Authenticate: Basic

Authentification d'accès « Digest » :

Lorsque votre point de terminaison reçoit une requête non authentifiée, il doit renvoyer une réponse d'en-tête non autorisée HTTP/1.1 401 ainsi qu'un en-tête « WWW-Authenticate ». La valeur d'en-tête doit contenir le mot-clé « Digest », une valeur à usage unique générée aléatoirement appelée « nonce », un domaine d'authentification et d'autres paramètres facultatifs pris en charge par RFC 2617 (à partir du site Web de l'éditeur RFC). Par exemple :

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

Configurer la journalisation des statuts de diffusion

1.    Configurez les journaux des statuts de diffusion de votre rubrique SNS. 

2.    Affichez les données de journaux de votre notification de confirmation d'abonnement SNS générée lorsque vous tentez d'abonner un point de terminaison HTTP(S).

Les journaux d'échec, le cas échéant, seront générés dans un groupe de journaux au format suivant :

sns/your_aws_region/your_account_ID/your_topic_name/Failure

Remarque : pour savoir pourquoi la notification de confirmation d'abonnement a échoué, vérifiez providerResponse dans vos journaux des status de diffusion Amazon CloudWatch.

Vérifier le certificat SSL de votre point de terminaison HTTPS

Si vous utilisez un point de terminaison HTTPS, effectuez les étapes de dépannage suivantes :

1.    Vérifiez que le certificat SSL renvoyé par le point de terminaison est valide et signé par une autorité de certification approuvée par Amazon SNS

2.    Vérifiez que votre point de terminaison renvoie la chaîne complète de certificats. La chaîne complète inclut tous les certificats intermédiaires.

Remarque : vous pouvez utiliser des outils tiers pour vérifier si le certificat SSL renvoyé par votre point de terminaison est approuvé et complet. Par exemple, vous pouvez utiliser SSL Server Test à partir du site Web SSL Labs.

Ou, pour vérifier si le certificat SSL renvoyé par votre point de terminaison est approuvé et complet, exécutez la commande OpenSSL suivante :

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

Si le certificat SSL renvoyé par le point de terminaison n'est pas approuvé ou complet, vous pouvez voir le providerResponse suivant dans vos journaux CloudWatch :

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

Vérifier si un pare-feu bloque votre point de terminaison HTTP(S)

Si un pare-feu empêche la remise de la notification de confirmation d'abonnement SNS à vos points de terminaison HTTP(S), autorisez les adresses IP spécifiques à la région AWS.

Vérifier si votre point de terminaison HTTP(S) dispose d'une stratégie de filtre d'abonnement

Si votre point de terminaison est abonné mais ne reçoit pas de notifications de rubrique, procédez comme suit :

1.    Vérifiez si une stratégie de filtre d'abonnement est configurée pour votre point de terminaison. Si votre abonnement HTTP(S) dispose d'une stratégie de filtre, les notifications peuvent être filtrées.

2.    Pour vérifier que vos messages SNS sont filtrés, vérifiez les mesures CloudWatch suivantes : NumberOfNotificationsFilteredOut, NumberOfNotificationsFilteredOut-InvalidAttributes, et NumberOfNotificationsFilteredOut-NoMessageAttributes.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?