Comment configurer des notifications CloudWatch Events lisibles par l'utilisateur pour les appels d'API à l'aide de transformateurs d'entrée ?

Dernière mise à jour : 02/07/2020

Je souhaite recevoir des notifications lisibles par l'utilisateur dans Amazon CloudWatch Events concernant les appels d'API de groupes de sécurité Amazon Elastic Compute Cloud (Amazon EC2). Comment utiliser le transformateur d'entrée pour configurer des notifications sans recevoir tous les détails des événements de journaux JSON ?

Brève description

Vous pouvez utiliser des modèles d'événements afin de créer une notification Amazon CloudWatch Events pour les appels d'API liés aux groupes de sécurité dans vos données de journaux AWS CloudTrail. Ensuite, vous pouvez utiliser des transformateurs d'entrée pour convertir ces événements JSON en notifications personnalisées lisibles par l'utilisateur. Pour plus d'informations, consultez Didacticiel : Utiliser un transformateur d'entrée pour personnaliser les éléments transmis à la cible d'événement.

Ré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 résolution

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

1.    Créez une règle CloudWatch Events pour les appels d'API liés au groupe de sécurité. Pour Modèle d'événement, sélectionnez 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 la Cible de votre règle, sélectionnez Transformateur d'entrée sous Configurer l'entrée.

3.    Dans la première zone de saisie, configurez votre 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, CloudWatch Events peut prendre en charge un maximum de 10 variables dans les mappages de chemins d'entrée. Pour extraire plus de 10 variables, transmettez l'événement entier à une fonction AWS Lambda pour analyse. Ensuite, construisez un corps de message au format requis pour une publication dans Amazon Simple Notification Service (Amazon SNS).

4.    Dans la deuxième zone de saisie, configurez le 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 invalide 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 Configurer les détails.

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

7.    Sélectionnez Créer une règle.


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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?