J’ai créé une alarme Amazon CloudWatch pour envoyer des notifications pour un sujet Amazon Simple Notification Service (Amazon SNS) lorsque l’état de l’alarme change. Cependant, je ne reçois pas de notification SNS lorsque l’alarme CloudWatch change d’état.
Résolution
L’envoi des notifications SNS dépend de la configuration de la rubrique SNS et de l’alarme CloudWatch. Pour déterminer pourquoi vous ne recevez pas de notifications SNS, consultez l’historique de l’alarme CloudWatch pour connaître l’état de l’action déclencheuse.
Si votre action de déclenchement échoue en raison de restrictions liées à la politique d’accès au SNS, l’historique des alarmes CloudWatch affiche un message similaire au suivant :
« Impossible d’exécuter l’action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Erreur reçue : « Ressource : arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME n'est pas autorisé à effectuer : SNS:Publish sur la ressource : arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME« »
SNS utilise des politiques d'accès pour restreindre les sources qui peuvent publier des messages sur le sujet. Si une erreur d’autorisation se produit, ajoutez les autorisations suivantes dans la section Déclaration de la politique d'accès au SNS. La mise à jour de la politique autorise le service d’alarmes CloudWatch à publier des messages sur la rubrique SNS :
{
"Sid": "Allow_Publish_Alarms",
"Effect": "Allow",
"Principal": {
"Service": [
"cloudwatch.amazonaws.com"
]
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME"
}
**Remarque :**Remplacez us-east-1 par la Région AWS à laquelle la notification est destinée, ACCOUNT_ID par l’ID de votre compte et TOPIC_NAME par le nom de la rubrique SNS.
Pour limiter la possibilité de publier des messages dans la rubrique pour des alarmes spécifiques, ajoutez des clés de condition globales. L’exemple de politique suivant utilise l'opérateur de condition ARNlike et la clé de condition globale aws:SourceArn. Pour plus d'informations, consultez Exemples de cas pour le contrôle d'accès Amazon SNS.
{
"Sid": "Allow_Publish_Alarms",
"Effect": "Allow",
"Principal": {
"Service": [
"cloudwatch.amazonaws.com"
]
},
"Action": "sns:Publish",
"Resource": "arn:aws:sns:REGION:ACCOUNT_ID:TOPIC_NAME",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME"
}
}
}
Remarque : Remplacez us-east-1 par la région à laquelle la notification est destinée, ACCOUNT_ID par l'ID de votre compte, TOPIC_NAME par le nom de la rubrique SNS et ALARM_NAME par le nom de l'alarme.
**Important :**Toute alarme du compte incluse dans la condition peut être publiée dans la rubrique SNS de la ressource dans la politique. Par exemple, l’ID de compte du propriétaire de la ressource d’alarme peut être publié dans la rubrique. Limitez la politique au même compte pour l’ID de compte du sujet SNS et pour l’ID du compte propriétaire de l’alarme.
Si votre action de déclenchement échoue en raison du chiffrement des rubriques SNS, l’historique des alarmes CloudWatch affiche un message similaire au suivant :
« Impossible d’exécuter l’action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Erreur reçue : « null (Service : AWSKMS ; code d’état : 400; Code d’erreur : AccessDeniedException;)« »
Le SNS autorise le chiffrement au repos pour son sujet. Si SNS utilise la clé alias/aws/sns par défaut d’AWS Key Management Service (AWS KMS) pour le chiffrement, les alarmes CloudWatch ne peuvent pas être publiées dans la rubrique SNS. La politique de la clé AWS KMS par défaut pour SNS n'autorise pas les alarmes CloudWatch à effectuer des appels d’API Kms:Decrypt et Kms:GenerateDataKey. Comme AWS gère cette clé, vous ne pouvez pas modifier la politique manuellement.
Si vous devez chiffrer la rubrique SNS au repos, utilisez une clé gérée par le client. La clé gérée par le client doit inclure les autorisations suivantes dans la section Déclaration de la politique relative aux clés. Ces autorisations permettent aux alarmes Cloudwatch de publier des messages sur des rubriques SNS cryptées :
{
"Sid": "Allow_CloudWatch_for_CMK",
"Effect": "Allow",
"Principal": {
"Service": [
"cloudwatch.amazonaws.com"
]
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey*"
],
"Resource": "*"
}
Si votre action de déclenchement réussit, l’historique des alarmes CloudWatch affiche un message similaire au suivant :
« Action exécutée avec succès arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME »
Le message précédent signifie que l’alarme CloudWatch a publié avec succès un message dans la rubrique SNS. Si la notification n’est pas envoyée par SNS, consultez la rubrique SNS et ses métriques pour détecter tout échec de diffusion. Pour plus d'informations, consultez la section Comment accéder aux journaux de diffusion des rubriques Amazon SNS pour les notifications push ?
**Remarque :**CloudWatch ne teste ni ne valide les actions que vous spécifiez. CloudWatch ne détecte pas non plus les erreurs Amazon EC2 Auto Scaling ou Amazon SNS qui se produisent lorsque vous essayez d’invoquer des actions inexistantes. Assurez-vous que vos actions existent.
Informations connexes
Utilisation des alarmes Amazon CloudWatch
Chiffrement des messages publiés sur Amazon SNS avec AWS KMS