He configurado una regla de Amazon EventBridge para enviar notificaciones a mi tema de Amazon Simple Notification Service (Amazon SNS). Sin embargo, mi tema de Amazon SNS no recibió las notificaciones de eventos.
Resolución
Verificar que los objetivos de la regla de EventBridge estén en la misma región que la regla
Los objetivos que asocies a una regla deben estar en la misma región de AWS que la regla.
Nota: Para encontrar la región en la que se encuentra un recurso de AWS, comprueba el nombre de recurso de Amazon (ARN) del recurso.
Revisión de las métricas Invocations y FailedInvocations de la regla de EventBridge para identificar el problema
Utiliza la consola de Amazon CloudWatch para revisar las métricas Invocations y FailedInvocations de la regla de EventBridge.
Si solo hay puntos de datos para la métrica Invocations, la notificación de la regla de EventBridge no llegó al objetivo. Para resolver este problema, vuelve a configurar la regla para el objetivo.
Si hay puntos de datos para ambas métricas, la notificación de la regla de EventBridge intentó invocar el objetivo, pero la invocación falló. Para resolver este problema, asegúrate de que EventBridge tenga los permisos necesarios para publicar mensajes en tu tema.
Confirmar que has concedido a EventBridge los permisos necesarios para publicar mensajes en tu tema
Tu política basada en recursos del tema de SNS debe permitir que EventBridge publique mensajes en el tema. Revisa tu política de AWS Identity and Access Management (IAM) del tema para confirmar que cuentas con los permisos necesarios.
Ejemplo de política:
{
"Sid": "AWSEvents_ArticleEvent_Id4950650036948",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sns:Publish",
"Resource": "SNS_TOPIC_ARN"
}
Importante: Debes introducir events.amazonaws.com como valor de servicio y sns:Publish como valor de acción. Sustituye SNS_TOPIC_ARN por el ARN de tu tema.
Si usas un rol de ejecución, asegúrate de que el rol de IAM adjunto a la regla de EventBridge sea correcto. Para comprobar el rol de IAM, abre la consola de EventBridge y, a continuación, selecciona Reglas. Selecciona la regla y, a continuación, elige Objetivos para ver el rol de IAM adjunto.
Verificar que el rol de ejecución permita a EventBridge publicar en el objetivo
El rol de ejecución requiere una relación de confianza con EventBridge. Asegúrate de que la política de confianza de tu rol incluya events.amazonaws.com como entidad de confianza para permitir que EventBridge asuma el rol de ejecución del objetivo. Además, asegúrate de que el rol tenga permiso para invocar el tema de SNS con la acción sts:AssumeRole.
Ejemplo de política de confianza de IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "ACCOUNT-ID",
"aws:SourceArn": "EVENTBRIDGE-RULE-ARN"
}
}
}
]
}
Nota: Sustituye ACCOUNT-ID por tu ID de cuenta de AWS y EVENTBRIDGE_RULE_ARN por el ARN de tu regla.
Ejemplo de permisos de IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sns:Publish"
],
"Resource": [
"SNS_TOPIC_ARN"
]
}
]
}
Nota: Sustituye SNS_TOPIC_ARN por el ARN de tu tema de SNS.
Confirmación de que tu tema tenga los permisos de AWS KMS necesarios
Si usas el cifrado en el servidor (SSE), el tema debe usar una clave administrada por el cliente de AWS Key Management Service (AWS KMS). Esta clave de AWS KMS debe tener una política de claves personalizada que permita a EventBridge usarla.
Para configurar los permisos de AWS KMS necesarios, sigue estos pasos:
- Crea una nueva clave administrada por el cliente.
- Utiliza la clave administrada por el cliente para configurar el SSE para tu tema de SNS.
- Configura una política de AWS KMS que permita a EventBridge publicar mensajes sobre tu tema cifrado.
Ejemplo de política:
{
"Sid": "Allow EventBridge to use the key",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}