Come posso analizzare i miei log di CloudTrail con CloudWatch Logs Insights?

10 minuti di lettura
0

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

@timestampawsRegioneventCategoryeventSourceeventNameeventTypesourceIPAddressuserIdentity.type
2022-02-18 18:00:09.647ca-central-1Gestionests.amazonaws.comAssumeRoleAwsApiCallcloudtrail.amazonaws.comAWSService
2022-02-18 18:00:09.647ca-central-1Gestionests.amazonaws.comAssumeRoleAwsApiCallcloudtrail.amazonaws.comAWSService

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

eventTimeAPIInstanceIDIssuerTypeIdentityTypeuserName
2022-02-18T17:36:38ZRunInstancesi-0325b4d6ae4e93c75RuoloAssumedRoleAWSServiceRoleForAutoScaling
2022-02-18T13:45:18ZRunInstancesi-04d17a8425b7cb59aRuoloAssumedRoleAWSServiceRoleForAutoScaling

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

eventTimeeventNameRispostaARNUser_Type
2022-02-18T17:35:44ZConsoleLoginEsito positivoarn:aws:iam::123456789012:user/test_userIAMUser
2022-02-17T13:53:58ZConsoleLoginEsito positivoarn:aws:sts::123456789012:assumed-role/Admin/test_userAssumedRole

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

eventTimeeventNameRispostaUtenteUser_TypesourceIPAddresserrorMessage
2022-02-18T20:10:55ZConsoleLoginFallimentoechoIAMUser12.34.56.89Autenticazione fallita
2022-02-18T20:10:43ZConsoleLoginFallimentoechoIAMUser12.34.56.89Autenticazione 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

@timestampAPIBucketNameNozioni diUserName
2022-02-12 17:16:07.415PutObjecttest_bucket1w4r9Hg4V7g.jpg
2022-02-12 16:29:43.470PutObjecttest_bucket26wyBy0hBoB.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

APIBucketNameNozioni diOccorrenze
ListAccessPoints44
GetBucketAclteam1-ctrail-multi-region27
GetBucketAclteam2-dub-cloudtrail27
GetBucketAclaws-cloudtrail-logs-123456789012-ba940dd726
GetObjectdevsupport-prodrdscr/individual/12345678901218

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_KeyUtenteOccorrenze
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bdAWSServiceRoleForConfig12
arn:aws:kms:us-east-1:123456789012:key/03f2923d-e213-439d-92cf-cbb444bd85bdFoxTrot-1UQJBODTWZYZ68

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_ServiceAPIerrorCodeNum_of_Events
s3.amazonaws.comGetBucketPublicAccessBlockNoSuchPublicAccessBlockConfiguration79
lambda.amazonaws.comGetLayerVersionPolicy20181031ResourceNotFoundException66
s3.amazonaws.comGetBucketPolicyStatusNoSuchBucketPolicy60
s3.amazonaws.comHeadBucketAccessDenied47
logs.amazonaws.comCreateLogStreamResourceNotFoundException21

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

errorCodeerrorMessageOccorrenze
AccessDeniedAccesso negato86
NoSuchBucketPolicyLa policy del bucket non esiste80
NoSuchPublicAccessBlockConfigurationLa configurazione del blocco di accesso pubblico non è stata trovata79
ObjectLockConfigurationNotFoundErrorLa configurazione Object Lock non esiste per questo bucket3
ServerSideEncryptionConfigurationNotFoundErrorLa configurazione della crittografia lato server non è stata trovata3

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

errorCodeAWS_ServiceAPIIdentityTypeInvokedByNumberOfEvents
AccessDenieds3.amazonaws.comHeadBucketAWSServicedelivery.logs.amazonaws.com83
AccessDenieds3.amazonaws.comGetObjectAssumedRole9

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.00016
2022-02-18 18:00:00.00025
2022-02-18 17:00:00.00028
2022-02-18 16:00:00.00014
2022-02-18 15:00:00.00016

Informazioni correlate

Monitor AWS CloudTrail log data in Amazon CloudWatch (video)

Aggiungi query al pannello di controllo o esporta i risultati delle query

Query di esempio di CloudWatch Logs Insights

Comandi di query CloudWatch Logs Insights

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa