¿Cómo puedo crear una regla de EventBridge que utilice el transformador de entrada de modo que las notificaciones de Amazon SNS sean legibles para las personas?

8 minutos de lectura
0

Quiero crear una regla de Amazon EventBridge para iniciar una notificación personalizada de Amazon Simple Notification Service (Amazon SNS) que sea legible para las personas.

Breve descripción

Para que las notificaciones de eventos de Amazon SNS sean legibles para las personas, utilice el transformador de entrada de EventBridge. El transformador de entrada puede personalizar el texto de un evento antes de enviarlo al destino de una regla de EventBridge. Para ver un tutorial completo, consulte Tutorial: Use input transformer to customize what EventBridge passes to the event target.

Por ejemplo, puede configurar un tema de SNS como destino para recibir un texto de evento personalizado del transformador de entrada. También puede crear una regla de EventBridge para que coincida con las llamadas a la API relacionadas con los grupos de seguridad que captura AWS CloudTrail. La regla se configura con un patrón de eventos que coincide con las llamadas a la API pertinentes.

La siguiente solución incluye dos eventos de ejemplo que puede utilizar para crear su propia regla de EventBridge y hacer que una notificación de Amazon SNS sea legible para las personas.

Solución

Evento de ejemplo para el cambio de estado de Amazon EC2

En el siguiente ejemplo se configura un tema de SNS como destino para recibir un texto de evento personalizado desde el transformador de entrada. En este ejemplo, el evento es un cambio de estado de Amazon Elastic Compute Cloud (Amazon EC2).

A continuación se muestra un evento de ejemplo publicado en el bus de eventos de EventBridge en formato JSON:

{  
    "version": "0",  
    "id": "2ad63080-2526-d42c-4983-123456789",  
    "detail-type": "EC2 Instance State-change Notification",  
    "source": "aws.ec2",  
    "account": "0123456789",  
    "time": "2023-05-17T16:30:32Z",  
    "region": "us-east-1",  
    "resources": [  
        "arn:aws:ec2:us-east-1:0123456789:instance/i-12345abcdefg"  
    ],  
    "detail": {  
        "instance-id": "i-12345abcdefg",  
        "state": "running"  
    }  
}

El transformador de entrada tiene dos secciones:

  • Ruta de entrada: donde se definen las variables que utilizan una ruta JSON para hacer referencia a valores del origen del evento original.
  • **Plantilla:**una plantilla para la información que desea transferir a su destino.

Ruta de entrada

Para crear una ruta de entrada, consulte Input transform examples. En este ejemplo, utilice la siguiente ruta de entrada:

{  
"timestamp": "$.time",  
"instance": "$.detail.instance-id",  
"state": "$.detail.state"  
}

Plantillas

En este ejemplo, utilice las siguientes plantillas:

Ejemplo 1:

"Instance example-instance is in example-state state"

Ejemplo 2:

"At example-timestamp, Instance example-instance changed its state to example-state. "

Las plantillas del ejemplo anterior envían mensajes al destino en el siguiente formato:

Ejemplo 1:

"Instance i-12345abcdefg is in running state"

Ejemplo 2:

"At 2023-05-17T16:30:32Z, Instance i-12345abcdefg changed its state to running. "

Configuración de EventBridge de modo que utilice el transformador de entrada

Para configurar EventBridge de modo que envíe mensajes personalizados a un tema de SNS, siga estos pasos:

Nota: Estas instrucciones siguen los pasos de Create a rule that reacts to events. También proporcionan pasos específicos para configurar el transformador de entrada.

1.    Defina una regla de EventBridge para los eventos de cambio de estado de Amazon EC2.

2.    Cree el patrón de eventos. En la sección Método de creación, en Método, elija Patrón personalizado (editor JSON).

3.    En Patrón de eventos, introduzca el siguiente ejemplo de patrón JSON para los eventos de cambio de estado de Amazon EC2:

{  
"source": ["aws.ec2"],  
"detail-type": ["EC2 Instance State-change Notification"]  
}

4.    Elija Siguiente.

5.    En Tipos de destino, elija Servicio de AWS.

6.    En Seleccione un destino, elija Tema de SNS. A continuación, seleccione su tema en la lista desplegable.

7.    En Configuración adicional, en la lista desplegable Configurar la entrada de destino, elija Transformador de entrada. A continuación, elija Configurar transformador de entrada.

8.    En la sección Transformador de entrada de destino, en Ruta de entrada, copie y pegue el siguiente JSON:

{  
"timestamp": "$.time",  
"instance": "$.detail.instance-id",  
"state": "$.detail.state"  
}

9.    En Plantilla de entrada, copie y pegue las siguientes plantillas de cadenas:

"Instance example-instance is in example-state state"  
"At example-timestamp, Instance example-instance changed its state to example-state. "

10.    Elija Confirmar y, a continuación, Siguiente.

11.    (Opcional) Añada etiquetas a la regla y, a continuación, elija Siguiente.

12.    Revise los detalles de la regla y, a continuación, elija Crear regla.

Evento de ejemplo para una llamada a la API del grupo de seguridad de Amazon EC2

En el siguiente evento de ejemplo, utilice CreateSecurityGroup en una nube virtual privada (VPC) para crear un grupo de seguridad. AWS CloudTrail captura el evento y lo publica en Amazon CloudWatch en el siguiente formato JSON:

{
    "version": "0",
    "id": "41dff147-cfbc-492a-9a98-9dd00d082417",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2017-07-14T16:36:23Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "Root",
            "principalId": "123456789012",
            "arn": "arn:aws:iam::123456789012:root",
            "accountId": "123456789012",
            "accessKeyId": "ASIAIRP4G1234567891Q",
            "userName": "iamuser",
            "sessionContext": {
                "attributes": {
                    "mfaAuthenticated": "false",
                    "creationDate": "2017-07-14T16:27:38Z"
                }
            }
        },
        "eventTime": "2017-07-14T16:36:23Z",
        "eventSource": "ec2.amazonaws.com",
        "eventName": "CreateSecurityGroup",
        "awsRegion": "us-east-1",
        "sourceIPAddress": "72.21.196.64",
        "userAgent": "console.ec2.amazonaws.com",
        "requestParameters": {
            "groupName": "test",
            "groupDescription": "test",
            "vpcId": "vpc-54a4232d"
        },
        "responseElements": {
            "_return": true,
            "groupId": "sg-82d531f3"
        },
        "requestID": "a4609e55-69ac-4a2d-8057-843dc8b4658b",
        "eventID": "7774b898-59c1-48a5-9c41-af1bcaa04612",
        "eventType": "AwsApiCall"
    }
}

Ejemplo de cómo crear una notificación personalizada legible para las personas

Utilice el siguiente ejemplo para crear notificaciones personalizadas legibles para las personas desde EventBridge en formato JSON.

1.    Utilice Crear regla de EventBridge para las llamadas a la API relacionadas con grupos de seguridad. En Patrón de eventos, elija Crear un patrón de eventos personalizado. Modifique el patrón de eventos de ejemplo según su caso de uso. Tenga en cuenta que la notificación de ejemplo corresponde a CreateSecurityGroup. Sin embargo, el siguiente patrón de eventos de ejemplo incluye todas las acciones de llamada a la API relacionadas con grupos de seguridad:

{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ec2.amazonaws.com"
    ],
    "eventName": [
      "CreateSecurityGroup",
      "AuthorizeSecurityGroupEgress",
      "AuthorizeSecurityGroupIngress",
      "DeleteSecurityGroup",
      "RevokeSecurityGroupEgress",
      "RevokeSecurityGroupIngress",
      "DescribeStaleSecurityGroups",
      "DescribeSecurityGroups",
      "DescribeSecurityGroupReferences"
    ]
  }
}

2.    En Tipos de destino, elija Servicio de AWS.

3.    En Seleccione un destino, elija Tema de SNS. A continuación, seleccione su tema en la lista desplegable.

4.    En Configuración adicional, en la lista desplegable Configurar la entrada de destino, elija Transformador de entrada. A continuación, elija Configurar transformador de entrada.

5.    En la sección Transformador de entrada de destino, en Ruta de entrada, copie y pegue el siguiente JSON. Incluya los pares clave-valor que desee utilizar en la notificación. Modifique la siguiente ruta de entrada de ejemplo según su caso de uso:

{  
    "sgname": "$.detail.requestParameters.groupName",  
    "sourceip": "$.detail.sourceIPAddress",  
    "vpcid": "$.detail.requestParameters.vpcId",  
    "action": "$.detail.eventName",  
    "sgid": "$.detail.responseElements.groupId",  
    "time": "$.detail.eventTime",  
    "region": "$.detail.awsRegion",  
    "user": "$.detail.userIdentity.userName",  
    "reqid": "$.detail.requestID"  
}

6.    En Plantilla de entrada, copie y pegue las siguientes plantillas de cadenas. Incluya una cadena con marcadores de posición para los valores de su ruta de entrada. Esta cadena es el texto de su notificación legible para las personas. Modifique la siguiente plantilla de entrada de ejemplo según su caso de uso:

"User example-user  has executed API call example-action from source IP example-sourceip on security group example-sgid/example-sgname that belongs to vpc example-vpcid in region example-region at time(UTC) example-time. The Request ID is example-reqid."

7.    Elija Confirmar y, a continuación, Siguiente.

8.    (Opcional) Añada etiquetas a la regla y, a continuación, elija Siguiente.

9.    Revise los detalles de la regla y, a continuación, elija Crear regla.

Solución de problemas

Si se muestra el error Invalid InputTemplate al guardar una plantilla con saltos de línea, cierre cada línea con comillas dobles. Observe los siguientes ejemplos:

"example-type example-arn has executed action API example-action on Security Group example-sgid located in AWS region example-region at example-time (UTC)."
"Event Details:"
"Request ID: example-requestid"
"Event ID: example-eventid"
"Event Source: example-eventsource"
"Event Type: example-eventtype"

Si la regla se ejecuta pero no invoca el destino, configure una cola de mensajes fallidos para que EventBridge reciba los errores relacionados con el transformador de entrada.

EventBridge admite un máximo de 100 variables en las asignaciones de rutas de entrada. Para extraer más de 10 variables, transfiera todo el evento a una función de AWS Lambda. Escriba esta función para analizar sus variables y cree un cuerpo de mensaje en el formato requerido para publicarlo. A continuación, cree el cuerpo del mensaje en el formato necesario para publicarlo en Amazon SNS. Para obtener más información, consulte ¿Cómo puedo publicar un mensaje en un tema de Amazon SNS mediante una función de Lambda?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 6 meses