Como criar uma regra do EventBridge que use o transformador de entrada para fazer com que uma notificação do Amazon SNS seja legível por humanos?

7 minuto de leitura
0

Quero criar uma regra do Amazon EventBridge para iniciar uma notificação personalizada do Amazon Simple Notification Service (Amazon SNS) que seja legível por humanos.

Breve descrição

Para fazer com que notificações de eventos do Amazon SNS sejam legíveis por humanos, use o transformador de entrada no EventBridge. O transformador de entrada pode personalizar o texto de um evento antes de enviá-lo para o destino de uma regra do EventBridge. Para obter um tutorial completo, consulte Tutorial: Use input transformer to customize what EventBridge passes to the event target.

Por exemplo, você pode configurar um tópico do SNS como destino para receber texto de evento personalizado do transformador de entrada. Você também pode criar uma regra do EventBridge para corresponder às chamadas de API relacionadas a grupos de segurança capturadas pelo AWS CloudTrail. A regra é configurada com um padrão de evento que corresponde às chamadas de API relevantes.

A resolução a seguir inclui dois exemplos de eventos que você pode usar para criar sua própria regra do EventBridge para fazer com que uma notificação do Amazon SNS seja legível por humanos.

Resolução

Exemplo de evento para mudança de estado do Amazon EC2

O exemplo a seguir configura um tópico do SNS como um destino que recebe texto de evento personalizado do transformador de entrada. Neste exemplo, o evento é uma mudança de estado do Amazon Elastic Compute Cloud (Amazon EC2).

Veja a seguir um exemplo de evento publicado no barramento de eventos do EventBridge no 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"  
    }  
}

O transformador de entrada tem duas seções:

  • Caminho de entrada: onde você define variáveis que usam um caminho JSON para referenciar valores na fonte original do evento.
  • Modelo: um modelo para as informações que você deseja transmitir para o seu alvo.

Caminho de entrada

Para criar um caminho de entrada, consulte Input transform examples. Para este exemplo, use o seguinte caminho de entrada:

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

Modelos

Para este exemplo, use os seguintes modelos:

Exemplo 1:

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

Exemplo 2:

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

Os modelos de exemplo anteriores enviam mensagens para o destino no seguinte formato:

Exemplo 1:

"Instance i-12345abcdefg is in running state"

Exemplo 2:

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

Configure o EventBridge para usar o transformador de entrada

Para configurar o EventBridge de modo que ele envie mensagens personalizadas para um tópico do SNS, conclua as seguintes etapas:

Observação: essas instruções seguem as etapas em Create a rule that reacts to events. Elas também fornecem etapas específicas para a configuração do transformador de entrada.

1.    Defina uma regra do EventBridge para eventos de mudança de estado do Amazon EC2.

2.    Crie o padrão do evento. Na seção Método de criação, em Método, escolha Padrão personalizado (editor JSON).

3.    Em Padrão de evento, insira o seguinte exemplo de JSON para eventos de mudança de estado do Amazon EC2:

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

4.    Escolha Avançar.

5.    Em Tipos de destinos, selecione Serviço da AWS.

6.    Em Selecionar um destino, escolha Tópico do SNS. Em seguida, selecione seu tópico na lista suspensa.

7.    Em Configurações adicionais, na lista suspensa Configurar entrada de destino, escolha Transformador de entrada. Em seguida, escolha Configurar transformador de entrada.

8.    Na seção Transformador de entrada de destino, em Caminho de entrada, copie e cole o seguinte JSON:

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

9.    Para Modelo de entrada, copie e cole os seguintes modelos de string:

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

10.    Escolha Confirmar e, em seguida, escolha Avançar.

11.    (Opcional) Adicione tags à sua regra e escolha Avançar.

12.    Revise os detalhes da regra e escolha Criar regra.

Exemplo de evento para chamada de API do grupo de segurança do Amazon EC2

No evento de exemplo a seguir, use CreateSecurityGroup em uma nuvem privada virtual (VPC) para criar um grupo de segurança. O AWS CloudTrail captura o evento e o evento publica no Amazon CloudWatch no seguinte 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"
    }
}

Exemplo de como criar uma notificação personalizada legível por humanos

Use o exemplo a seguir para criar notificações do EventBridge personalizadas e legíveis por humanos no formato JSON.

1.    Crie uma regra do EventBridge para chamadas de API relacionadas a grupos de segurança. Em Padrão de evento, escolha Criar padrão de evento personalizado. Modifique o padrão de exemplo de evento para seu caso de uso. Observe que o exemplo de notificação é para CreateSecurityGroup. No entanto, o padrão de exemplo de evento a seguir inclui todas as ações de chamada de API relacionadas a grupos de segurança:

{
  "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.    Em Tipos de destinos, selecione Serviço da AWS.

3.    Em Selecionar um destino, escolha Tópico do SNS. Em seguida, selecione seu tópico na lista suspensa.

4.    Em Configurações adicionais, na lista suspensa Configurar entrada de destino, escolha Transformador de entrada. Em seguida, escolha Configurar transformador de entrada.

5.    Na seção Transformador de entrada de destino, em Caminho de entrada, cole o seguinte JSON. Inclua todos os pares de valores-chave que você deseja usar em sua notificação. Modifique o seguinte caminho de entrada de exemplo de acordo com o seu 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.    Em Modelo de entrada, cole os seguintes modelos de string. Inclua uma string com espaços reservados para valores do seu caminho de entrada. Essa string é o texto legível por humanos da sua notificação. Modifique o seguinte modelo de entrada de exemplo para seu 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.    Escolha Confirmar e, em seguida, selecione Avançar.

8.    (Opcional) Adicione tags à sua regra e escolha Avançar.

9.    Revise os detalhes da regra e escolha Criar regra.

Resolução de problemas

Se você receber um erro Invalid InputTemplate ao salvar um modelo com quebras de linha, encerre cada linha com aspas duplas. Veja o exemplo a seguir:

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

Se sua regra for executada, mas não conseguir invocar o destino, configure uma fila de mensagens não entregues para que o EventBridge receba erros relacionados ao transformador de entrada.

O EventBridge suporta no máximo 100 variáveis nos mapas de caminho de entrada. Para extrair mais de 10 variáveis, transmita o evento inteiro para uma função do AWS Lambda. Escreva essa função para analisar suas variáveis e estruturar um corpo de mensagem no formato necessário para publicação. Em seguida, estruture um corpo de mensagem no formato necessário para publicar no Amazon SNS. Para obter mais informações, consulte Como posso publicar uma mensagem em um tópico do Amazon SNS usando uma função do Lambda?

AWS OFICIAL
AWS OFICIALAtualizada há 6 meses