Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Comment récupérer puis analyser mes journaux CloudTrail à l’aide de CloudWatch Logs Insights ?
Je souhaite utiliser Amazon CloudWatch Logs Insights pour récupérer puis analyser mes journaux Amazon CloudTrail.
Brève description
Après avoir configuré CloudTrail pour qu’il enregistre les journaux CloudWatch, vous pouvez utiliser des requêtes dans CloudWatch Logs Insights pour récupérer les journaux CloudTrail. Vous pouvez ensuite surveiller l'activité d’un compte précis.
Solution
Les requêtes suivantes vous permettront de récupérer les journaux CloudWatch afin d'analyser et d'explorer l'activité des compartiments et des objets Amazon Simple Storage Service (Amazon S3). Notez que par défaut, CloudTrail ne capture pas les événements de données Amazon S3. Vous devez activer la journalisation des événements dans CloudTrail pour récupérer les journaux des événements pour les compartiments et les objets S3.
Vous pouvez vous appuyer sur ces exemples de requêtes pour créer d’autres requêtes Logs Insights plus complexes qui correspondent à votre cas d'utilisation. Vous pouvez également intégrer des requêtes à votre tableau de bord CloudWatch pour les visualiser sous forme de tableaux et de graphiques associés aux métriques correspondantes.
Requête 1 : Événements les plus récents
Objectif
Récupérer les événements CloudTrail Log les plus récents à l’aide des champs par défaut @timestamp et @message.
Requête
#Retrieve the most recent CloudTrail events fields @timestamp, @message | sort @timestamp desc | limit 2
Résultats
@timestamp | @message |
2022-02-18 17:52:31.118 | {"eventVersion":"1.08","userIdentity":{"type":"AssumedRole","principalId":"AROAWZKRRJU47ARZN7ECC:620d7d78144334d6933c27195cae2a98", "arn":"arn:aws:sts::123456789012:assumed- role/Amazon_EventBridge_Invoke_Run_Command_371790151/620d7d78144334d6933c27195cae2a98","accountId":"123456789012", "accessKeyId":"ASIAWZKRRJU4Y45M4SC6","sessionContext":{"sessionIssuer": {"type":"Role","principalId":"AROAWZKRRJU47ARZN7ECC","arn":"arn:aws:iam::123456789012:role/service- role/Amazon_EventBridge_Invoke_Run_Command_371790151","accountId":"123456789012","userName": "Amazon_EventBridge_Invoke_Run_Command_371790151" (output truncated) |
2022-02-18 17:51:52.137 | {"eventVersion":"1.08","userIdentity":{"type":"AssumedRole","principalId":"AROAWZKRRJU43YP4FHR2N:StateManagerService","arn":"arn:aws:sts::123456789012:assumed-role/AWSServiceRoleForAmazonSSM/StateManagerService","accountId":"123456789012","sessionContext":{"sessionIssuer":{"type":"Role","principalId":"AROAWZKRRJU43YP4FHR2N","arn":"arn:aws:iam::123456789012:role/aws-service-role/ssm.amazonaws.com/AWSServiceRoleForAmazonSSM","accountId":"123456789012","userName":"AWSServiceRoleForAmazonSSM"}, "webIdFederationData":{},"attributes":{"creationDate":"2022-02-18T17:50:06Z","mfaAuthenticated":"false"}},"invokedBy":"ssm.amazonaws.com"},"eventTime":"2022-02-18T17:50:06Z","eventSource":"ec2.amazonaws.com","eventName":"DescribeInstances","awsRegion":"eu-west-1","sourceIPAddress":"ssm.amazonaws.com","userAgent":"ssm.amazonaws.com","requestParameters":{"maxResults":50,"instancesSet": (output truncated) |
Requête 2 : Séparer les champs individuels
Objectif
- Isoler les champs individuels dans @message.
- Afficher les champs sélectionnés dans l'événement CloudTrail.
Requête
#Breakout Individual Fields fields @timestamp, awsRegion, eventCategory, eventSource, eventName, eventType, sourceIPAddress, userIdentity.type | sort @timestamp desc | limit 2
Résultats
@timestamp | awsRegion | eventCategory | eventSource | eventName | eventType | sourceIPAddress | userIdentity.type |
---|---|---|---|---|---|---|---|
2022-02-18 18:00:09.647 | ca-central-1 | Gestion | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
2022-02-18 18:00:09.647 | ca-central-1 | Gestion | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
Requête 3 : Filtrer par instances exécutées sur Amazon Elastic Compute Cloud (Amazon EC2)
Objectif
- Récupérer des champs spécifiques dans l'événement CloudTrail.
- Renommer les champs pour utiliser des libellés plus significatifs.
- Filtrer les dernières instances EC2 lancées sur ce compte en fonction de l'appel d'API.
Requête
#EC2: Recently Launched Instances fields eventTime, eventName as API, responseElements.instancesSet.items.0.instanceId as InstanceID, userIdentity.sessionContext.sessionIssuer.type as IssuerType, userIdentity.type as IdentityType, userIdentity.sessionContext.sessionIssuer.userName as userName | filter eventName = 'RunInstances' | sort eventTime desc | limit 2
Résultats
eventTime | API | InstanceID | IssuerType | IdentityType | userName |
---|---|---|---|---|---|
2022-02-18T17:36:38Z | RunInstances | i-0325b4d6ae4e93c75 | Role | AssumedRole | AWSServiceRoleForAutoScaling |
2022-02-18T13:45:18Z | RunInstances | i-04d17a8425b7cb59a | Role | AssumedRole | AWSServiceRoleForAutoScaling |
Requête 4 : Filtrer en fonction de la dernière connexion à la console
Objectif
- Récupérer des champs spécifiques dans l'événement CloudTrail.
- Renommer les champs pour utiliser des libellés plus significatifs.
- Filtrer les dernières connexions à la console en fonction de l'appel d'API.
Requête
#Console Login: Most Recent API Calls fields eventTime, eventName, responseElements.ConsoleLogin as Response, userIdentity.arn as ARN, userIdentity.type as User_Type | filter eventName = 'ConsoleLogin' | sort eventTime desc | limit 10
Résultats
eventTime | eventName | Response | ARN | User_Type |
---|---|---|---|---|
2022-02-18T17:35:44Z | ConsoleLogin | Success | arn:aws:iam::123456789012:user/test_user | IAMUser |
2022-02-17T13:53:58Z | ConsoleLogin | Success | arn:aws:sts::123456789012:assumed-role/Admin/test_user | AssumedRole |
Requête 5 : Filtrer en fonction de la connexion à la console en cas d'échec de l'authentification
Objectif
- Récupérer des champs spécifiques dans l'événement CloudTrail.
- Renommer les champs pour utiliser des libellés plus significatifs.
- Filtrer les dernières connexions qui ont échouées depuis la console.
Requête
#ConsoleLogin: Filter on Failed Logins fields eventTime, eventName, responseElements.ConsoleLogin as Response, userIdentity.userName as User, userIdentity.type as User_Type, sourceIPAddress, errorMessage | filter eventName = 'ConsoleLogin' and responseElements.ConsoleLogin = 'Failure' | sort eventTime desc | limit 10
Résultats
eventTime | eventName | Response | User | User_Type | sourceIPAddress | errorMessage |
---|---|---|---|---|---|---|
2022-02-18T20:10:55Z | ConsoleLogin | Failure | echo | IAMUser | 12.34.56.89 | Failed authentication |
2022-02-18T20:10:43Z | ConsoleLogin | Failure | echo | IAMUser | 12.34.56.89 | Failed authentication |
Requête 6 : Filtrer par téléchargement d'objets Amazon Simple Storage Service (Amazon S3)
Objectif
- Récupérer des champs spécifiques dans l'événement CloudTrail.
- Renommer les champs pour utiliser des libellés plus significatifs.
- Filtrez en fonction de l'appel d'API et du compartiment S3 cible.
Requête
#Filter PutObject API Calls on a specific S3 Bucket fields @timestamp, eventName as API, requestParameters.bucketName as BucketName, requestParameters.key as Key, userIdentity.sessionContext.sessionIssuer.userName as UserName | filter eventName = 'PutObject' and BucketName = 'target-s3-bucket' | sort @timestamp desc | limit 2
Résultats
@timestamp | API | BucketName | Key | UserName |
---|---|---|---|---|
2022-02-12 17:16:07.415 | PutObject | test_bucket1 | w4r9Hg4V7g.jpg | |
2022-02-12 16:29:43.470 | PutObject | test_bucket2 | 6wyBy0hBoB.jpg |
Requête 7 : Résumer l'activité S3
Objectif
- Filtrer en fonction du service Amazon S3.
- Regrouper tous les événements correspondants en fonction de la statistique de comptage.
- Séparer les résultats en fonction de l'API, du compartiment S3 et de la clé.
- Utiliser la commande stats pour renommer les champs.
- Trier par ordre décroissant.
Requête
#S3 Activity: Bucket Key Details filter eventSource = 's3.amazonaws.com' | stats count(*) as Hits by eventName as API, requestParameters.bucketName as BucketName, requestParameters.key as Key | sort Hits desc | limit 5
Résultats
API | BucketName | Key | Hits |
---|---|---|---|
ListAccessPoints | 44 | ||
GetBucketAcl | team1-ctrail-multi-region | 27 | |
GetBucketAcl | team2-dub-cloudtrail | 27 | |
GetBucketAcl | aws-cloudtrail-logs-123456789012-ba940dd7 | 26 | |
GetObject | devsupport-prod | rdscr/individual/123456789012 | 18 |
Requête 8 : Résumer l'activité de déchiffrement d'AWS KMS
Objectif
- Filtrer en fonction du service AWS Key Management Service (AWS KMS) et de l'API Decrypt.
- Utiliser la commande fields pour renommer les champs, puis les agréger selon des noms conviviaux.
- Regrouper tous les événements correspondants en fonction de la statistique de comptage.
- Séparer les résultats en fonction de la clé AWS KMS et de l'utilisateur.
- Trier par ordre décroissant.
Requête
#KMS Decrypt Activity: Key User Details fields resources.0.ARN as KMS_Key, userIdentity.sessionContext.sessionIssuer.userName as User | filter eventSource='kms.amazonaws.com' and eventName='Decrypt' | stats count(*) as Hits by KMS_Key, User | sort Hits desc | limit 2
Résultats
KMS_Key | User | Hits |
---|---|---|
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bd | AWSServiceRoleForConfig | 12 |
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bd | FoxTrot-1UQJBODTWZYZ6 | 8 |
Requête 9 : Résumer les appels d'API contenant des erreurs
Objectif
- Filtrer en fonction de la présence du champ ErrorCode.
- Regrouper tous les événements correspondants en fonction de la statistique de comptage.
- Séparer les résultats en fonction du service AWS, de l'API et du errorCode.
- Utiliser la commande stats pour renommer les champs.
- Trier selon le plus grand nombre de réponses.
Requête
#Summarize API Calls with Errors filter ispresent(errorCode) | stats count(*) as Num_of_Events by eventSource as AWS_Service, eventName as API, errorCode | sort Num_of_Events desc | limit 5
Résultats
AWS_Service | API | errorCode | Num_of_Events |
---|---|---|---|
s3.amazonaws.com | GetBucketPublicAccessBlock | NoSuchPublicAccessBlockConfiguration | 79 |
lambda.amazonaws.com | GetLayerVersionPolicy20181031 | ResourceNotFoundException | 66 |
s3.amazonaws.com | GetBucketPolicyStatus | NoSuchBucketPolicy | 60 |
s3.amazonaws.com | HeadBucket | AccessDenied | 47 |
logs.amazonaws.com | CreateLogStream | ResourceNotFoundException | 21 |
Requête 10 : Résumer les appels d'API S3 comportant des codes d'erreur
Objectif
- Filtrer en fonction du service Amazon S3 et de la présence du champ ErrorCode.
- Regrouper tous les événements correspondants en fonction de la statistique de comptage.
- Séparer les résultats en fonction de ErrorCode et de ErrorMessage.
- Trier selon le plus grand nombre de réponses.
Requête
#S3: Summarize Error Codes filter eventSource = 's3.amazonaws.com' and ispresent(errorCode) | stats count(*) as Hits by errorCode, errorMessage | sort Hits desc | limit 5
Résultats
errorCode | errorMessage | Hits |
---|---|---|
AccessDenied | Accès refusé | 86 |
NoSuchBucketPolicy | Cette politique de compartiments n'existe pas | 80 |
NoSuchPublicAccessBlockConfiguration | La configuration du bloc d'accès public est introuvable | 79 |
ObjectLockConfigurationNotFoundError | La configuration Object Lock n'existe pas pour ce compartiment | 3 |
ServerSideEncryptionConfigurationNotFoundError | La configuration de chiffrement côté serveur est introuvable | 3 |
Requête 11 : Résumer les appels d'API AccessDenied/UnauthorizedOperation effectués par un utilisateur du service AWS, de l'API et de Gestion des identités et des accès (IAM)
Objectif
- Filtrer en fonction des événements CloudTrail AccessDenied ou UnauthorizedOperation.
- Regrouper tous les événements correspondants en fonction de statistiques de comptage.
- Séparer les résultats en fonction de ErrorCode, du service AWS, de l'API et de l'utilisateur ou du rôle IAM.
- Renommer les champs à l’aide de la commande stats.
- Trier par ordre décroissant.
Requête
#Summarize AccessDenied/UnauthorizedOperation API Calls by AWS Service, API, IAM User filter (errorCode='AccessDenied' or errorCode='UnauthorizedOperation') | stats count(*) as NumberOfEvents by errorCode, eventSource as AWS_Service, eventName as API, userIdentity.type as IdentityType, userIdentity.invokedBy as InvokedBy | sort NumberOfEvents desc | limit 10
Résultats
errorCode | AWS_Service | API | IdentityType | InvokedBy | NumberOfEvents |
---|---|---|---|---|---|
AccessDenied | s3.amazonaws.com | HeadBucket | AWSService | delivery.logs.amazonaws.com | 83 |
AccessDenied | s3.amazonaws.com | GetObject | AssumedRole | 9 |
Requête 12 : Volume d'appels horaire AWS KMS
Objectif
- Filtrer en fonction du service AWS KMS et de l'API Decrypt.
- Regrouper tous les événements correspondants dans des groupes d'une heure.
- Visualiser les résultats sur un graphique linéaire.
Requête
#KMS: Hourly Decrypt Call Volume filter eventSource='kms.amazonaws.com' and eventName='Decrypt' | stats count(*) as Hits by bin(1h)
Résultats
bin(1h) | Hits |
---|---|
2022-02-18 19:00:00.000 | 16 |
2022-02-18 18:00:00.000 | 25 |
2022-02-18 17:00:00.000 | 28 |
2022-02-18 16:00:00.000 | 14 |
2022-02-18 15:00:00.000 | 16 |
Informations complémentaires
Monitor AWS CloudTrail log data in Amazon CloudWatch (Video)

Contenus pertinents
- demandé il y a 2 moislg...
- demandé il y a un anlg...
- demandé il y a 2 moislg...
- demandé il y a 10 moislg...
- demandé il y a 2 moislg...
- AWS OFFICIELA mis à jour il y a un an
- AWS OFFICIELA mis à jour il y a 2 mois