¿Por qué no he recibido una notificación de SNS para activar mi alarma de CloudWatch?

5 minutos de lectura
0

He creado una alarma de Amazon CloudWatch para enviar notificaciones a través de un tema de Amazon Simple Notification Service (Amazon SNS) cuando cambia el estado de la alarma. Sin embargo, cuando la alarma de CloudWatch cambia de estado, no recibo ninguna notificación de SNS.

Resolución

La entrega de las notificaciones de SNS depende de la configuración del tema del SNS y de la alarma de CloudWatch. Para determinar 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 de activación falló debido a las restricciones de la política de acceso al 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"" («No se pudo ejecutar la acción ARN:AWS:SNS:US-EAST-1:ACCOUNT\ _ID:TOPIC\ _NAME. Error recibido: 'Recurso: arn:AWS:CloudWatch:US-EAST-1:ACCOUNT\ _ID:Alarm:alarm\ _NAME no tiene autorización para hacer lo siguiente: SNS:Publicar en el recurso: arn:AWS:SNS:US-EAST-1:ACCOUNT\ _ID:TOPIC\ _NAME'»

SNS restringe las fuentes que pueden publicar mensajes sobre el tema mediante políticas de acceso. Si se produce un error de permisos, debe añadir los siguientes permisos en la sección Statement (Declaración) de la política de acceso al SNS. Esta actualización otorga permisos al servicio de alarmas de CloudWatch para publicar mensajes en el tema SNS.

Nota: Sustituya us-east-1 por la región de AWS a la que vaya destinada esta notificación. Reemplace ACCOUNT_ID por el ID de su cuenta. Sustituya TOPIC_NAME por el nombre del tema de 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"
}

Estos permisos permiten a cualquier persona que utilice su cuenta crear alarmas y publicar mensajes en su tema de SNS. Para restringir la posibilidad de publicar mensajes sobre el tema a alarmas específicas, añada claves de condiciones globales. El siguiente ejemplo 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 (Ejemplos de casos de control de acceso a Amazon SNS).

Nota: Nota: Sustituya us-east-1 por la región de AWS a la que vaya destinada esta notificación. Reemplace ACCOUNT_ID por el ID de su cuenta. Sustituya TOPIC_NAME por el nombre del tema de SNS. Sustituya ALARM_NAME por el nombre de la alarma:

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

Si la acción de activación falla debido al cifrado de temas 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 su tema. Si SNS usa el alias de clave predeterminado de AWS Key Management Service (AWS KMS) /aws/sns para este cifrado, las alarmas de CloudWatch no podrán publicar mensajes en el tema SNS. La política de claves KMS de AWS predeterminada para SNS no permite que las alarmas de CloudWatch realicen llamadas a las API KMS:Decrypt y kms:GenerateDataKey. Como esta clave se administra por AWS, no puede editar la política manualmente.

Si el tema del SNS debe cifrarse en reposo, utilice una clave gestionada por el cliente. La clave gestionada por el cliente debe incluir los siguientes permisos en la sección Statement (Declaració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 de activación se realizó correctamente, 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" («Se ejecutó correctamente la acción ARN:AWS:SNS:US-EAST-1:ACCOUNT_ID:TOPIC_NAME»)

Esto significa que la alarma de CloudWatch publicó correctamente un mensaje en el tema SNS. Si la notificación no la envió SNS, consulte el tema sobre SNS y sus métricas para ver si hay algún error en la entrega. Para obtener más información, consulte ¿Cómo accedo a los registros de entrega de temas de Amazon SNS para las notificaciones push?

Nota: CloudWatch no prueba ni valida las acciones que usted especifique. Tampoco detecta los errores de Amazon EC2 Auto Scaling o Amazon SNS que se derivan 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)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año