Come posso analizzare i miei log di CloudTrail con CloudWatch Logs Insights?
Voglio analizzare i miei log di Amazon CloudTrail utilizzando Amazon CloudWatch Logs Insights. In che modo posso farlo?
Breve descrizione
Puoi configurare CloudTrail per l'accesso a CloudWatch Logs. In questo modo puoi utilizzare CloudWatch Logs Insights per analizzare i log di CloudTrail per monitorare l'attività specifica dell'account.
Per dimostrare la capacità di Logs Insights di analizzare i log di CloudTrail, la seguente risoluzione contiene query di esempio. Queste query riguardano i casi d'uso più comuni:
- Isolamento di campi di log specifici.
- Filtraggio in diverse condizioni.
- Aggregazione di eventi.
- Costruzione di una serie temporale.
Risoluzione
Le seguenti query esplorano l'attività del bucket e degli oggetti di Amazon Simple Storage Service (Amazon S3). Per impostazione predefinita, CloudTrail non acquisisce gli eventi di dati S3. Puoi attivare la registrazione degli eventi in CloudTrail. Per ulteriori informazioni, consulta la sezione Abilitazione della registrazione degli eventi CloudTrail per bucket e oggetti S3.
Puoi basarti su queste query di esempio per creare query di Logs Insights aggiuntive e più complesse allineate al tuo caso d'uso. Puoi anche integrare le query con il tuo pannello di controllo di CloudWatch per visualizzare le query come diagrammi e grafici insieme ai parametri correlati.
Query 1: eventi più recenti
Obiettivo
Recupera il registro eventi più recente di CloudTrail con i campi predefiniti @timestamp e @message.
Query
#Retrieve the most recent CloudTrail events fields @timestamp, @message | sort @timestamp desc | limit 2
Risultati
@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) |
Query 2: suddivisione dei singoli campi
Obiettivo
- Isola i singoli campi in @message.
- Visualizza i campi selezionati in CloudTrail event (Evento CloudTrail).
Query
#Breakout Individual Fields fields @timestamp, awsRegion, eventCategory, eventSource, eventName, eventType, sourceIPAddress, userIdentity.type | sort @timestamp desc | limit 2
Risultati
@timestamp | awsRegion | eventCategory | eventSource | eventName | eventType | sourceIPAddress | userIdentity.type |
---|---|---|---|---|---|---|---|
2022-02-18 18:00:09.647 | ca-central-1 | Gestione | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
2022-02-18 18:00:09.647 | ca-central-1 | Gestione | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
Query 3: filtraggio per RunInstances di Amazon Elastic Compute Cloud (Amazon EC2)
Obiettivo
- Recupera campi specifici nell'evento Cloudtrail.
- Rinomina i campi con etichette più significative.
- Filtra le istanze EC2 più recenti avviate in questo account in base alla chiamata API.
Query
#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
Risultati
eventTime | API | InstanceID | IssuerType | IdentityType | userName |
---|---|---|---|---|---|
2022-02-18T17:36:38Z | RunInstances | i-0325b4d6ae4e93c75 | Ruolo | AssumedRole | AWSServiceRoleForAutoScaling |
2022-02-18T13:45:18Z | RunInstances | i-04d17a8425b7cb59a | Ruolo | AssumedRole | AWSServiceRoleForAutoScaling |
Query 4: filtraggio per accesso alla console: più recente
Obiettivo
- Recupera campi specifici nell'evento Cloudtrail.
- Rinomina i campi con etichette più significative.
- Filtra gli accessi più recenti tramite la console AWS in base alla chiamata API.
Query
#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
Risultati
eventTime | eventName | Risposta | ARN | User_Type |
---|---|---|---|---|
2022-02-18T17:35:44Z | ConsoleLogin | Esito positivo | arn:aws:iam::123456789012:user/test_user | IAMUser |
2022-02-17T13:53:58Z | ConsoleLogin | Esito positivo | arn:aws:sts::123456789012:assumed-role/Admin/test_user | AssumedRole |
Query 5: filtraggio per accesso alla console: autenticazione non riuscita
Obiettivo
- Recupera campi specifici (ad esempio, nome utente, tipo di utente, IP sorgente) nell'evento Cloudtrail.
- Rinomina i campi con etichette più significative.
- Filtra gli ultimi accessi non riusciti tramite la console AWS.
Query
#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
Risultati
eventTime | eventName | Risposta | Utente | User_Type | sourceIPAddress | errorMessage |
---|---|---|---|---|---|---|
2022-02-18T20:10:55Z | ConsoleLogin | Fallimento | echo | IAMUser | 12.34.56.89 | Autenticazione fallita |
2022-02-18T20:10:43Z | ConsoleLogin | Fallimento | echo | IAMUser | 12.34.56.89 | Autenticazione fallita |
Query 6: filtraggio per caricamento di oggetti Amazon Simple Storage Solution (Amazon S3)
Obiettivo
- Recupera campi specifici nell'evento Cloudtrail.
- Rinomina i campi con etichette più significative.
- Filtra la chiamata API e il bucket S3 di destinazione.
Query
#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
Risultati
@timestamp | API | BucketName | Nozioni di | 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 |
Query 7: riepilogo dell'attività S3
Obiettivo
- Filtraggio basato su S3 service (Servizio S3).
- Aggrega tutti gli eventi corrispondenti in base alla statistica count (conteggio).
- Unisci i risultati in base ad API, S3 bucket (Bucket S3) e key (chiave).
- Usa il comando stats (statistiche) per rinominare i campi.
- Ordina per ordine decrescente.
Query
#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
Risultati
API | BucketName | Nozioni di | Occorrenze |
---|---|---|---|
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 |
Query 8: riepilogo dell'attività di decrittografia di AWS Key Management Service (AWS KMS)
Obiettivo
- Filtraggio basato su KMS service (Servizio KMS) e sull'API Decrypt (Decrittografia).
- Usa il comando fields (campi) per rinominare i campi e aggregarli sui nomi intuitivi.
- Aggrega tutti gli eventi corrispondenti in base alla statistica count (conteggio).
- Unisci i risultati in base a KMS Key (chiave KMS) e User (Utente).
- Ordina per ordine decrescente.
Query
#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
Risultati
KMS_Key | Utente | Occorrenze |
---|---|---|
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 |
Query 9: riepilogo delle chiamate API con errori
Obiettivo
- Filtraggio in base alla presenza del campo errorCode.
- Aggrega tutti gli eventi corrispondenti in base alla statistica count (conteggio).
- Unisci i risultati in base ad AWS Service (Servizio AWS), API ed errorCode.
- Usa il comando stats (statistiche) per rinominare i campi.
- Ordina per maggior numero di corrispondenze.
Query
#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
Risultati
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 |
Query 10: riepilogo delle chiamate API S3 con codici di errore
Obiettivo
- Filtraggio basato su S3 Service (Servizio S3) e sulla presenza del campo errorCode.
- Aggrega tutti gli eventi corrispondenti in base alla statistica count (conteggio).
- Unisci i risultati in base a errorCode ed errorMessage.
- Ordina per maggior numero di corrispondenze.
Query
#S3: Summarize Error Codes filter eventSource = 's3.amazonaws.com' and ispresent(errorCode) | stats count(*) as Hits by errorCode, errorMessage | sort Hits desc | limit 5
Risultati
errorCode | errorMessage | Occorrenze |
---|---|---|
AccessDenied | Accesso negato | 86 |
NoSuchBucketPolicy | La policy del bucket non esiste | 80 |
NoSuchPublicAccessBlockConfiguration | La configurazione del blocco di accesso pubblico non è stata trovata | 79 |
ObjectLockConfigurationNotFoundError | La configurazione Object Lock non esiste per questo bucket | 3 |
ServerSideEncryptionConfigurationNotFoundError | La configurazione della crittografia lato server non è stata trovata | 3 |
Query 11: riepilogo delle chiamate API AccessDenied/UnauthorizedOperation da parte del servizio AWS, dell'API e dell'utente AWS Identity and Access Management (IAM)
Obiettivo
- Filtraggio degli eventi CloudTrail AccessDenied o UnauthorizedOperation.
- Aggrega tutti gli eventi corrispondenti in base alla statistica count (conteggio).
- Unisci i risultati in base a errorCode, AWS Service (Servizio AWS), API eIAM user/role (Ruolo/utente AWS).
- Usa il comando stats (statistiche) per rinominare i campi.
- Ordina in ordine decrescente.
Query
#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
Risultati
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 |
Query 12 - Serie temporali: volume di chiamate orarie KMS
Obiettivo
- Filtraggio basato su KMS Service (Servizio KMS) e sull'API Decrypt (Decrittografia).
- Aggrega tutti gli eventi corrispondenti in bini da 1 ora.
- Visualizza i risultati su un grafico a linee.
Query
#KMS: Hourly Decrypt Call Volume filter eventSource='kms.amazonaws.com' and eventName='Decrypt' | stats count(*) as Hits by bin(1h)
Risultati
bin(1h) | Occorrenze |
---|---|
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 |
Informazioni correlate
Monitor AWS CloudTrail log data in Amazon CloudWatch (video)
Aggiungi query al pannello di controllo o esporta i risultati delle query
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa