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?
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 mais informações, consulte Tutorial: Use transformadores de entrada para transformar eventos no EventBridge
É possível 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 é possível 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. O evento é uma mudança de estado do Amazon Elastic Compute Cloud (Amazon EC2) publicada 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 as seguintes 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 <instance> is in <state> state"
Exemplo 2:
"At <timestamp>, Instance <instance> changed its state to <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 para configurar o transformador de entrada em Criação de regras que reagem a eventos no Amazon EventBridge.
-
Defina uma regra do EventBridge para eventos de mudança de estado do Amazon EC2.
-
Crie o padrão do evento. Na seção Método de criação, em Método, escolha Padrão personalizado (editor JSON).
-
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" ] }
-
Escolha Avançar.
-
Em Tipos de destinos, selecione Serviço da AWS.
-
Em Selecionar um destino, escolha Tópico do SNS. Em seguida, selecione seu tópico na lista suspensa.
-
Em Configurações adicionais, na lista suspensa Configurar entrada de destino, escolha Transformador de entrada. Em seguida, escolha Configurar transformador de entrada.
-
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" }
-
Para Modelo de entrada, copie e cole os seguintes modelos de string:
"Instance <instance> is in <state> state" "At <timestamp>, Instance <instance> changed its state to <state>. "
-
Escolha Confirmar e, em seguida, Avançar.
-
(Opcional) Adicione tags à sua regra e escolha Avançar.
-
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 CloudTrail captura o evento, e o evento publica no 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.
-
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" ] } }
-
Em Tipos de destinos, selecione Serviço da AWS.
-
Em Selecionar um destino, escolha Tópico do SNS. Em seguida, selecione seu tópico na lista suspensa.
-
Em Configurações adicionais, na lista suspensa Configurar entrada de destino, escolha Transformador de entrada. Em seguida, escolha Configurar transformador de entrada.
-
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 para 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" }
-
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 <user> has executed API call <action> from source IP <sourceip> on security group <sgid>/<sgname> that belongs to vpc <vpcid> in region <region> at time(UTC) <time>. The Request ID is <reqid>."
-
Escolha Confirmar e, em seguida, Avançar.
-
(Opcional) Adicione tags à sua regra e escolha Avançar.
-
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:
"<type> <arn> has executed action API <action> on Security Group <sgid> located in AWS region <region> at <time> (UTC)." "Request ID: <requestid>" "Event ID: <eventid>" "Event Source: <eventsource>" "Event Type: <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?
Conteúdo relevante
- feita há um mêslg...
- Resposta aceitafeita há 13 diaslg...
- feita há 15 diaslg...
- feita há 15 diaslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos