Saltar al contenido

¿Por qué no he recibido una notificación de Amazon SNS cuando se ha activado mi alarma de CloudWatch?

4 minutos de lectura
0

He configurado 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, no recibo notificaciones de SNS cuando cambia el estado.

Resolución

Para averiguar por qué no recibes notificaciones de SNS, consulta el historial de alarmas de CloudWatch para ver el estado de la acción desencadenante.

Restricciones de la política de acceso de SNS

Recibes un mensaje de error similar al siguiente en el historial de alarmas de CloudWatch:

"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "CloudWatch Alarms is not authorized to perform: SNS:Publish on resource: arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME""

Este error se produce porque la política de acceso de SNS restringe el acceso de CloudWatch al tema de SNS.

Amazon SNS utiliza políticas de acceso para restringir los servicios que pueden publicar mensajes en el tema. Para conceder permisos a CloudWatch para publicar mensajes en el tema de SNS, agrega la siguiente instrucción de permisos a la política de acceso 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"
}

Nota: Sustituye 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 de AWS y TOPIC_NAME por el nombre del tema de SNS.

Para restringir la posibilidad de publicar mensajes en el tema para alarmas específicas, agrega 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:

{  "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: Sustituye 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.

Las alarmas de la cuenta que estén incluidas en la condición pueden 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. Restringe la política a la misma cuenta tanto para la cuenta propietaria del tema de SNS como para la propietaria de la alarma.

Para obtener más información, consulta Ejemplos de casos de control de acceso con Amazon SNS.

Problemas de cifrado del tema de SNS

Si la acción desencadenante falla debido al cifrado del tema de SNS, el historial de alarmas de CloudWatch mostrará un mensaje de error similar al siguiente:

"Failed to execute action arn:aws:sns:us-east-1:ACCOUNT_ID:TOPIC_NAME. Received error: "CloudWatch Alarms does not have authorization to access the SNS topic encryption key.""

Si configuraste Amazon SNS para usar la clave alias/aws/sns predeterminada de AWS Key Management Service (AWS KMS) para el cifrado del lado del servidor, CloudWatch no podrá publicar en el tema de SNS. La política predeterminada de claves de AWS KMS para Amazon SNS no permite que CloudWatch realice las operaciones de la API kms:Decrypt y kms:GenerateDataKey. Como AWS administra esta clave, no puedes editar la política manualmente.

Si debes cifrar el tema de SNS en reposo, utiliza una clave administrada por el cliente. La clave administrada por el cliente debe incluir la siguiente instrucción de permisos en la política de claves:

{  "Sid": "Allow_CloudWatch_for_CMK",
  "Effect": "Allow",
  "Principal": {
    "Service": [
      "cloudwatch.amazonaws.com"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*"
}

Ejecución correcta

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"

Si no recibes ninguna notificación de SNS, consulta el tema de SNS y sus métricas para ver si hay errores de entrega. Para obtener más información, consulta ¿Cómo puedo acceder a los registros de entrega de temas de Amazon SNS para recibir notificaciones push?

CloudWatch no probará ni validará las acciones que especifiques. CloudWatch tampoco detectará los errores de Amazon EC2 Auto Scaling o Amazon SNS que se produzcan al intentar invocar acciones inexistentes. Asegúrate de que tus 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)