Comment vérifier l'authenticité des messages Amazon SNS envoyés aux points de terminaison HTTP et HTTPS ?

Dernière mise à jour : 21/10/2022

J'envoie des notifications à un point de terminaison HTTPS ou HTTP à l'aide d'Amazon Simple Notification Service (Amazon SNS). Je souhaite empêcher les attaques par usurpation d'identité : comment puis-je vérifier l'authenticité des messages Amazon SNS reçus par mon point de terminaison ?

Solution

Il est recommandé d'utiliser la validation de signature basée sur un certificat lors de la vérification de l'authenticité d'une notification Amazon SNS. Pour obtenir des instructions, consultez Vérifier les signatures des messages Amazon SNS dans le Guide du développeur Amazon SNS.

Pour éviter les attaques par usurpation d'identité, veillez à effectuer les opérations suivantes lorsque vous vérifiez les signatures des messages Amazon SNS :

  • Utilisez toujours le protocole HTTPS pour obtenir le certificat auprès d'Amazon SNS.
  • Validez l'authenticité du certificat.
  • Vérifiez que le certificat a été envoyé depuis Amazon SNS.
  • (Lorsque cela est possible) Utilisez l'un des kits SDK AWS pris en charge pour Amazon SNS pour valider et vérifier les messages.

Exemple de corps de message

Voici un exemple de chaîne de données utiles de message envoyé par Amazon SNS :

{
"Type" : "Notification",
"MessageId" : "e1f2a232-e8ce-5f0a-b5d3-fbebXXXXXXXX",
"TopicArn" : "arn:aws:sns:us-east-1:XXXXXXXX:SNSHTTPSTEST",
"Subject" : "Test",
"Message" : "TestHTTPS",
"Timestamp" : "2021-10-07T18:55:19.793Z",
"SignatureVersion" : "1",
"Signature" : "VetoDxbYMh0Ii/87swLEGZt6FB0ZzGRjlW5BiVmKK1OLiV8B8NaVlADa6ThbWd1s89A4WX1WQwJMayucR8oYzEcWEH6//VxXCMQxWD80rG/NrxLeoyas4IHXhneiqBglLXh/R9nDZcMAmjPETOW61N8AnLh7nQ27O8Z+HCwY1wjxiShwElH5/+2cZvwCoD+oka3Gweu2tQyZAA9ergdJmXA9ukVnfieEEinhb8wuaemihvKLwGOTVoW/9IRMnixrDsOYOzFt+PXYuKQ6KGXpzV8U/fuJDsWiFa/lPHWw9pqfeA8lqUJwrgdbBS9vjOJIL+u2c49kzlei8zCelK3n7w==",
"SigningCertURL" : "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-7ff5318490ec183fbaddaa2aXXXXXXXX.pem",
"UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:XXXXXXXX:SNSHTTPSTEST:b5ab2db8-7775-4852-bd1a-2520XXXXXXXX",
"MessageAttributes" : {
"surname" : {"Type":"String","Value":"SNSHTTPSTest"}
}
}

Pour plus d'informations sur les formats de message utilisés par Amazon SNS, consultez Analyse des formats de message.