Comment puis-je créer une règle EventBridge qui utilise le transformateur d'entrée pour rendre une notification Amazon SNS lisible par un utilisateur ?

Lecture de 7 minute(s)
0

Je souhaite créer une règle Amazon EventBridge pour envoyer une notification Amazon Simple Notification Service (Amazon SNS) personnalisée lisible par un utilisateur.

Brève description

Pour que l'utilisateur puisse lire les notifications d'événements Amazon SNS, utilisez le transformateur d'entrée d'EventBridge. Le transformateur d'entrée permet de personnaliser le texte d'un événement avant qu'il ne soit envoyé à la cible d'une règle EventBridge. Pour plus d'informations, consultez le didacticiel : Utiliser des transformateurs d'entrée pour transformer les événements dans EventBridge

Vous pouvez configurer une rubrique SNS en tant que cible recevant un texte d'événement personnalisé en provenance du transformateur d'entrée. Vous pouvez également créer une règle EventBridge pour faire correspondre les appels d'API aux groupes 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.

La résolution suivante inclut deux exemples d'événement que vous pouvez utiliser pour créer votre propre règle EventBridge afin de rendre une notification Amazon SNS lisible par un utilisateur.

Résolution

Exemple d'événement de changement d'état Amazon EC2

Dans l'exemple suivant, une rubrique SNS est configurée en tant que cible recevant le texte d'événement personnalisé en provenance du transformateur d'entrée. L'événement est un changement d'état d'Amazon Elastic Compute Cloud (Amazon EC2) publié sur le bus d'événements EventBridge au format 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"
  }
}

Le transformateur d'entrée comporte les sections suivantes :

  • Chemin d'entrée : zone où vous définissez les variables qui utilisent un chemin JSON pour référencer les valeurs de la source de l'événement d'origine.
  • Modèle : modèle des informations que vous souhaitez transmettre à la cible.

Chemin d'entrée

Pour créer un chemin d'entrée, consultez la section Exemples de transformation d'entrée. Pour cet exemple, utilisez le chemin d'entrée suivant :

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

Modèles

Pour cet exemple, utilisez les modèles suivants.

Exemple 1 :

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

Exemple 2 :

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

Les exemples de modèles précédents envoient des messages à la cible aux formats suivants.

Exemple 1 :

"Instance i-12345abcdefg is in running state"

Exemple 2 :

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

Configurer EventBridge pour utiliser le transformateur d'entrée

Pour configurer EventBridge afin d'envoyer des messages personnalisés à une rubrique SNS, procédez comme suit :

Remarque : Ces instructions suivent les étapes de configuration du transformateur d'entrée décrites dans la section Création de règles qui réagissent aux événements dans Amazon EventBridge.

  1. Définissez une règle EventBridge pour les événements de changement d'état Amazon EC2.

  2. Créez le modèle d'événement. Dans la section Méthode de création, pour Méthode, sélectionnez Modèle personnalisé (éditeur JSON).

  3. Pour Modèle d'événement, saisissez l'exemple de code JSON suivant pour les événements de changement d'état Amazon EC2 :

    {
      "source": [
        "aws.ec2"
      ],
      "detail-type": [
        "EC2 Instance State-change Notification"
      ]
    }
  4. Sélectionnez Suivant.

  5. Pour Types de cibles, sélectionnez Service AWS.

  6. Pour Sélectionner une cible, sélectionnez Rubrique SNS. Puis, sélectionnez la rubrique dans la liste déroulante.

  7. Pour Paramètres supplémentaires, dans la liste déroulante Configurer l'entrée cible, sélectionnez Transformateur d'entrée. Puis, sélectionnez Configurer le transformateur d'entrée.

  8. Dans la section Transformateur d'entrée cible, pour Chemin d'entrée, copiez et collez le code JSON suivant :

    {
      "timestamp": "$.time",
      "instance": "$.detail.instance-id",
      "state": "$.detail.state"
    }
  9. Pour Modèle d'entrée, copiez et collez les modèles de chaînes suivants :

    "Instance <instance> is in <state> state"  "At <timestamp>, Instance <instance> changed its state to <state>. "
  10. Sélectionnez Confirmer, puis Suivant.

  11. (Facultatif) Ajoutez des identifications à votre règle, puis sélectionnez Suivant.

  12. Vérifiez les détails de la règle, puis sélectionnez Créer une règle.

Exemple d'événement pour un appel d'API lié au groupe de sécurité Amazon EC2

Dans l'exemple d'événement suivant, utilisez CreateSecurityGroup dans un cloud privé virtuel (VPC) pour créer un groupe de sécurité. AWS CloudTrail capture l'événement et le publie ensuite sur CloudWatch au format JSON suivant :

{
  "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 création d'une notification personnalisée lisible par l'utilisateur

Utilisez l'exemple suivant pour créer des notifications personnalisées lisibles par l'utilisateur à partir d'EventBridge au format JSON.

  1. Créez une règle EventBridge pour les appels d'API en lien avec les groupes de sécurité. Pour Modèle d'événement, sélectionnez Créer un modèle d'événement personnalisé. Modifiez l'exemple de modèle d'événement en fonction de votre cas d'utilisation. Notez que l'exemple de notification concerne un événement CreateSecurityGroup. Toutefois, l'exemple de modèle d'événement suivant inclut toutes les actions d'appel d'API en lien avec le 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 Types de cibles, sélectionnez Service AWS.

  3. Pour Sélectionner une cible, sélectionnez Rubrique SNS. Puis, sélectionnez la rubrique dans la liste déroulante.

  4. Pour Paramètres supplémentaires, dans la liste déroulante Configurer l'entrée cible, sélectionnez Transformateur d'entrée. Puis, sélectionnez Configurer le transformateur d'entrée.

  5. Dans la section Transformateur d'entrée cible, pour Chemin d'entrée, collez le code JSON suivant. Incluez les paires clé-valeur que vous souhaitez utiliser dans la notification. Modifiez l'exemple de chemin d'entrée suivant en fonction de 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"
    }
  6. Pour Modèle d'entrée, collez les modèles de chaîne suivants. 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. Modifiez l'exemple de modèle d'entrée suivant en fonction de 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>."
  7. Sélectionnez Confirmer, puis Suivant.

  8. (Facultatif) Ajoutez des identifications à votre règle, puis sélectionnez Suivant.

  9. Vérifiez les détails de la règle, puis sélectionnez Créer une règle.

Résolution des problèmes

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. Exemples :

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

Si la règle s'exécute mais ne parvient pas à invoquer la cible, configurez une file d'attente de lettres mortes afin qu'EventBridge reçoive les erreurs liées au transformateur d'entrée.

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 AWS Lambda. Vous pouvez écrire cette fonction pour analyser les variables et construire un corps de message dans le format requis pour la publication. Créez ensuite un corps de message au format requis pour le publier sur Amazon SNS. Pour plus d'informations, consultez la page Comment puis-je publier un message sur une rubrique Amazon SNS à l'aide d'une fonction Lambda ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois