¿Por qué no he recibido una notificación de SNS cuando se ha activado mi alarma de CloudWatch?
He creado una alarma de Amazon CloudWatch para enviar notificaciones para un tema de Amazon Simple Notification Service (Amazon SNS) cuando cambie el estado de la alarma. Sin embargo, cuando la alarma de CloudWatch cambia de estado, no recibo ninguna notificación de SNS.
Solución
La entrega de notificaciones de SNS depende de la configuración del tema de SNS y de la alarma de CloudWatch. Para averiguar por qué no recibe notificaciones de SNS, consulte el historial de alarmas de CloudWatch para ver el estado de la acción desencadenante.
Si la acción desencadenante ha fallado debido a las restricciones de la política de acceso a SNS, el historial de alarmas de CloudWatch mostrará un mensaje similar al siguiente:
«Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "Resource: arn:aws:cloudwatch:us-east-1:ACCOUNT_ID:alarm:ALARM_NAME is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME"»
SNS utiliza políticas de acceso para restringir las fuentes que pueden publicar mensajes en el tema. Si se produce un error relacionado con los permisos, añada los siguientes permisos en la sección Instrucción de la política de acceso a SNS. La actualización de la política otorga permisos al servicio de alarmas de CloudWatch para publicar mensajes en el tema 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" }
Nota: Reemplace us-east-1 por la región de AWS a la que va dirigida la notificación, ACCOUNT_ID por el ID de la cuenta y TOPIC_NAME por el nombre del tema de SNS.
Para restringir la posibilidad de publicar mensajes en el tema para alarmas específicas, añada claves de condiciones globales. En el siguiente ejemplo de política se usa el operador de condición ArnLike y la clave de condición global aws:SourceArn. Para obtener más información, consulte Example cases for Amazon SNS access control.
{ "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" } } }
Nota: Reemplace us-east-1 por la región a la que va dirigida la notificación, ACCOUNT_ID por el ID de la cuenta, TOPIC_NAME por el nombre del tema de SNS y ALARM_NAME por el nombre de la alarma.
Importante: Cualquier alarma de la cuenta que esté incluida en la condición puede publicarse en el tema de SNS del recurso en la política. Por ejemplo, el ID de cuenta del propietario del recurso de alarma puede publicarse en el tema. Restrinja la política a la misma cuenta tanto para el ID de la cuenta del tema de SNS como para el ID de la cuenta propietaria de la alarma.
Si la acción desencadenante falla debido al cifrado del tema de SNS, el historial de alarmas de CloudWatch mostrará un mensaje similar al siguiente:
«Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException;)"" («No se pudo ejecutar la acción ARN:AWS:SNS:US-EAST-1:ACCOUNT\ _ID:TOPIC\ _NAME. Error recibido: 'null (Servicio: AWSKMS; código de estado: 400; Código de Error: Excepción de acceso denegado;)'»
SNS permite el cifrado en reposo para el tema. Si SNS usa la clave predeterminada de AWS Key Management Service (AWS KMS) alias/aws/sns para el cifrado, las alarmas de CloudWatch no podrán publicar en el tema SNS. La política predeterminada de claves de AWS KMS para SNS no permite que las alarmas de CloudWatch realicen llamadas a las API kms:Decrypt y kms:GenerateDataKey. Como AWS administra esta clave, no puede editar la política manualmente.
Si debe cifrar el tema de SNS en reposo, utilice una clave administrada por el cliente. La clave administrada por el cliente debe incluir los siguientes permisos en la sección Instrucción de la política de claves. Estos permisos permiten que las alarmas de CloudWatch publiquen mensajes en temas de SNS cifrados:
{ "Sid": "Allow_CloudWatch_for_CMK", "Effect": "Allow", "Principal": { "Service": [ "cloudwatch.amazonaws.com" ] }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" }
Si la acción desencadenante es correcta, el historial de alarmas de CloudWatch mostrará un mensaje similar al siguiente:
«Successfully executed action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME»
El mensaje anterior significa que la alarma de CloudWatch ha publicado un mensaje en el tema SNS correctamente. Si la notificación no la envió SNS, consulte el tema de SNS y sus métricas para ver si hay algún error en la entrega. Para obtener más información, consulte ¿Cómo puedo acceder a los registros de entrega de temas de Amazon SNS para recibir notificaciones push?
Nota: CloudWatch no probará ni validará las acciones que especifique. CloudWatch tampoco detectará los errores de Amazon EC2 Auto Scaling o Amazon SNS que se deriven de un intento de invocar acciones inexistentes. Asegúrese de que sus acciones existan.
Información relacionada
Using Amazon CloudWatch alarms (Uso de alarmas de Amazon CloudWatch)
Encrypting messages published to Amazon SNS with AWS KMS (Cifrado de los mensajes publicados en Amazon SNS con AWS KMS)
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 9 meses
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años