Comment configurer les notifications EventBridge lisibles par l'utilisateur pour les appels d'API à l'aide du transformateur d'entrée ?

Date de la dernière mise à jour : 09/12/2021

Je souhaite recevoir des notifications lisibles par l'utilisateur dans Amazon EventBridge concernant les appels d'API de groupes de sécurité Amazon Elastic Compute Cloud (Amazon EC2). Comment utiliser le transformateur d'entrée pour personnaliser les notifications ?

Brève description

Vous pouvez créer une règle EventBridge pour faire correspondre les appels d'API liés au groupe de sécurité capturés par AWS CloudTrail. Cette règle est configurée avec un modèle d'événement qui correspond aux appels d'API concernés.

Utilisez le transformateur d'entrée pour personnaliser le texte envoyé à la cible. Par exemple, la cible peut être une rubrique Amazon Simple Notification Service (Amazon SNS) ou une fonction AWS Lambda. En procédant ainsi, l'événement JSON brut est converti en une notification lisible par l'utilisateur. Pour plus d'informations, consultez Didacticiel : Utiliser le transformateur d'entrée pour personnaliser ce qu'EventBridge transmet à la cible de l'événement.

Solution

Exemple d'événement

Dans l'exemple d'événement suivant, un événement de journal CloudTrail est capturé lorsqu'un utilisateur crée un groupe de sécurité à l'aide de CreateSecurityGroup dans un Virtual Private Cloud (VPC). Cet événement est ensuite publié dans CloudWatch au format JSON comme suit :

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

Exemple de solution

Utilisez l'exemple de solution suivant comme modèle pour créer vos propres notifications personnalisées lisibles par l'utilisateur à partir de EventBridge au format JSON.

1.    Créez une règle EventBridge pour les appels d'API liés aux groupes de sécurité. Pour Event Pattern (Modèle d'événement), sélectionnez Build custom event pattern (Créer un modèle d'événement personnalisé). Veillez à modifier l'exemple de modèle d'événement pour votre cas d'utilisation. Notez que si l'exemple de notification concerne CreateSecurityGroup, l'exemple de modèle d'événement suivant inclut toutes les actions d'appels d'API liés au groupe de sécurité :

{
  "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.    Pour le paramètre Target (Cible) de votre règle, sélectionnez Input Transformer (Transformateur d'entrée) sous Configure input (Configurer l'entrée).

3.    Dans la première zone de saisie, configurez votre Input Path (Chemin d'entrée). Incluez toutes les paires clé-valeur à utiliser dans votre notification. Veillez à modifier l'exemple de chemin d'entrée suivant pour votre cas d'utilisation :

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

Remarque : actuellement, EventBridge prend en charge un maximum de 100 variables dans les mappages de chemins d'entrée. Pour extraire plus de 10 variables, transmettez l'événement entier à une fonction Lambda. Vous pouvez écrire cette fonction pour analyser toutes les variables souhaitées et construire un corps de message dans le format requis pour la publication. Créez ensuite un corps de message au format requis pour la publication sur Amazon SNS.

4.    Dans la deuxième zone de saisie, configurez Input Template (Modèle d'entrée). Incluez une chaîne avec des espaces réservés pour les valeurs de votre chemin d'entrée. Cette chaîne est le texte lisible par l'utilisateur de votre notification. Veillez à modifier l'exemple de modèle d'entrée suivant pour votre cas d'utilisation :

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

Remarque : si vous recevez l'erreur InputTemplate non valide lorsque vous enregistrez un modèle avec des sauts de ligne, veillez à terminer chaque ligne par des guillemets doubles. Par exemple :

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

5.    Sélectionnez Configure details (Configurer les détails).

6.    Spécifiez un nom et une description pour la règle.

7.    Choisissez Create rule (Créer une règle).


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?