Salta al contenuto

Come posso creare una regola EventBridge che utilizzi il trasformatore di input per rendere una notifica Amazon SNS leggibile dagli utenti?

7 minuti di lettura
0

Voglio creare una regola Amazon EventBridge per avviare una notifica Amazon Simple Notification Service (Amazon SNS) personalizzata che sia leggibile dagli utenti.

Descrizione breve

Per rendere le notifiche degli eventi di Amazon SNS leggibili per gli utenti, è possibile usare il trasformatore di input in EventBridge. Il trasformatore di input può personalizzare il testo di un evento prima che venga inviato alla destinazione di una regola EventBridge. Per ulteriori informazioni, consulta Tutorial: Utilizza i trasformatori di input per trasformare gli eventi in EventBridge

Puoi configurare un argomento SNS come destinazione per ricevere testo personalizzato dell'evento dal trasformatore di input. Puoi anche creare una regola EventBridge per abbinare le chiamate API relative ai gruppi di sicurezza acquisite da AWS CloudTrail. La regola è configurata con un modello di eventi che corrisponde alle chiamate API pertinenti.

La seguente soluzione include due eventi di esempio che puoi utilizzare per creare la tua regola EventBridge affinché una notifica Amazon SNS sia leggibile dagli utenti.

Risoluzione

Evento di esempio per la modifica dello stato di Amazon EC2

L'esempio seguente configura un argomento SNS come destinazione che riceve il testo dell'evento personalizzato dal trasformatore di input. L'evento è una modifica dello stato di Amazon Elastic Compute Cloud (Amazon EC2) pubblicata sul bus di eventi EventBridge in 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"
  }
}

Il trasformatore di input ha le seguenti sezioni:

  • Percorso di input: dove si definiscono variabili che utilizzano un percorso JSON per fare riferimento ai valori nella sorgente dell'evento originale.
  • Modello: un modello per le informazioni che vuoi trasmettere alla tua destinazione.

Percorso di input

Per creare un percorso di input, consulta Input transform examples. Per questo esempio, utilizza il seguente percorso di input:

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

Modelli

Per questo esempio, utilizza i seguenti modelli.

Esempio 1:

"Instance <instance> is in <state> state"

Esempio 2:

"At <timestamp>, Instance <instance> changed its state to <state>. "

I modelli di esempio precedenti inviano messaggi alla destinazione nel seguente formato.

Esempio 1:

"Instance i-12345abcdefg is in running state"

Esempio 2:

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

Configurazione di EventBridge per utilizzare il trasformatore di input

Per configurare EventBridge per l'invio di messaggi personalizzati a un argomento SNS, completa i seguenti passaggi:

Nota: queste istruzioni seguono i passaggi per configurare il trasformatore di input in Creazione di regole che reagiscono agli eventi in Amazon EventBridge.

  1. Definisci una regola EventBridge per gli eventi di modifica dello stato di Amazon EC2.

  2. Costruisci lo schema dell'evento. Nella sezione Metodo di creazione, per Metodo scegli Modello personalizzato (editor JSON).

  3. Per Modelli di eventi, inserisci il seguente esempio JSON per gli eventi di modifica dello stato di Amazon EC2:

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

  5. Per Tipi di destinazione, scegli servizio AWS.

  6. Per Seleziona una destinazione, scegli Argomento SNS. Quindi seleziona il tuo argomento dall'elenco a discesa.

  7. Per Impostazioni aggiuntive, nell'elenco a discesa Configura l'input di destinazione, scegli Trasformatore di input. Quindi scegli Configura il trasformatore di input.

  8. Nella sezione Trasformatore di input di destinazione per Percorso di input, copia e incolla il seguente codice JSON:

    {
      "timestamp": "$.time",
      "instance": "$.detail.instance-id",
      "state": "$.detail.state"
    }
  9. Per Modello di input, copia e incolla i seguenti modelli di stringhe:

    "Instance <instance> is in <state> state"  "At <timestamp>, Instance <instance> changed its state to <state>. "
  10. Scegli Conferma, quindi scegli Successivo.

  11. (Facoltativo) Aggiungi tag alla regola, quindi scegli Successivo.

  12. Controlla i dettagli della regola, quindi scegli Crea regola.

Evento di esempio per una chiamata API del gruppo di sicurezza Amazon EC2

Nel seguente evento di esempio, utilizza CreateSecurityGroup in un cloud privato virtuale (VPC) per creare un gruppo di sicurezza. CloudTrail acquisisce l'evento e l'evento viene pubblicato su CloudWatch nel seguente 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"
  }
}

Esempio di come creare una notifica personalizzata leggibile dagli utenti

Utilizza l'esempio seguente per creare notifiche personalizzate leggibili dagli utenti da EventBridge in formato JSON.

  1. Crea una regola EventBridge per le chiamate API relative ai gruppi di sicurezza. Per Modello di eventi, scegli Crea modello di eventi personalizzato. Modifica il modello di evento di esempio per il tuo caso d'uso. Nota che la notifica di esempio è per CreateSecurityGroup. Tuttavia, il seguente modello di evento di esempio include tutte le azioni di chiamata API relative al gruppo di sicurezza:

    {
      "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. Per Tipi di destinazione, scegli servizio AWS.

  3. Per Seleziona una destinazione, scegli Argomento SNS. Quindi seleziona il tuo argomento dall'elenco a discesa.

  4. Per Impostazioni aggiuntive, nell'elenco a discesa Configura l'input di destinazione, scegli Trasformatore di input. Quindi scegli Configura il trasformatore di input.

  5. Nella sezione Trasformatore di input di destinazione per Percorso di input, incolla il seguente codice JSON. Includi tutte le coppie chiave-valore che desideri utilizzare nella notifica. Modifica il seguente percorso di input di esempio per il tuo caso d'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. Per Modello di input, incolla i seguenti modelli di stringhe. Includi una stringa con segnaposto per i valori del percorso di input. Questa stringa corrisponde al testo della tua notifica leggibile dagli utenti. Modifica il seguente modello di input di esempio per il tuo caso d'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>."
  7. Scegli Conferma, quindi scegli Successivo.

  8. (Facoltativo) Aggiungi tag alla regola, quindi scegli Successivo.

  9. Controlla i dettagli della regola, quindi scegli Crea regola.

Risoluzione del problema

Se ricevi un errore InputTemplate non valido quando salvi un modello con interruzioni di riga, chiudi ogni riga con virgolette doppie. Guarda il seguente esempio:

"<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 la regola viene eseguita ma non riesce a richiamare la destinazione, configura una coda DLQ affinché EventBridge riceva errori correlati al trasformatore di input.

EventBridge supporta un massimo di 100 variabili nelle mappe dei percorsi di input. Per estrarre più di 10 variabili, passa l'intero evento a una funzione AWS Lambda. Scrivi questa funzione per analizzare le tue variabili e costruire un corpo del messaggio nel formato richiesto per la pubblicazione. Quindi, crea un corpo del messaggio nel formato richiesto per la pubblicazione su Amazon SNS. Per ulteriori informazioni, consulta Come posso pubblicare un messaggio su un argomento Amazon SNS utilizzando una funzione Lambda?

AWS UFFICIALEAggiornata un anno fa