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. Se cerchi un tutorial completo, puoi vedere Tutorial: usa il trasformatore di input per personalizzare ciò che EventBridge passa alla destinazione dell'evento.

Ad esempio, puoi configurare un argomento SNS come destinazione per ricevere il 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.

Soluzione

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. In questo esempio, l'evento è una modifica dello stato di Amazon Elastic Compute Cloud (Amazon EC2).

Di seguito è riportato un esempio di evento pubblicato sul router 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 possiede due 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, usa i seguenti modelli:

Esempio 1:

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

Esempio 2:

"At example-timestamp, Instance example-instance changed its state to example-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 descritti in Create a rule that reacts to events. Forniscono inoltre passaggi specifici per configurare il trasformatore di input.

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 Modello 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 Successivo.

5.    Per Tipi di destinazione, seleziona il servizio AWS.

6.    Per Seleziona una destinazione, scegli l'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 example-instance is in example-state state"  
"At example-timestamp, Instance example-instance changed its state to example-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, usa CreateSecurityGroup in un cloud privato virtuale (VPC) per creare un gruppo di sicurezza. AWS CloudTrail acquisisce l'evento e lo pubblica su Amazon 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, seleziona il servizio AWS.

3.    Per Seleziona una destinazione, scegli l'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 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.    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 dei problemi

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:

"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 la regola viene eseguita, ma non riesce a richiamare la destinazione, configura una coda DLQ affinché EventBridge riceva gli errori relativi 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 UFFICIALE
AWS UFFICIALEAggiornata 6 mesi fa