Come faccio a recuperare e quindi analizzare i miei log di CloudTrail con CloudWatch Logs Insights?

9 minuti di lettura
0

Desidero utilizzare Amazon CloudWatch Logs Insights per recuperare e quindi analizzare i miei log di Amazon CloudTrail.

Breve descrizione

Dopo aver configurato CloudTrail per registrare CloudWatch Logs, puoi utilizzare le query in CloudWatch Logs Insights per recuperare i log di CloudTrail. Quindi, puoi monitorare l'attività specifica dell'account.

Soluzione

Utilizza le seguenti query per recuperare i log di CloudWatch per analizzare ed esplorare l'attività dei bucket e degli oggetti di Amazon Simple Storage Service (Amazon S3). Tieni presente che, per impostazione predefinita, CloudTrail non acquisisce eventi di dati di Amazon S3. È necessario attivare la registrazione degli eventi in CloudTrail per recuperare i registri degli eventi per bucket e oggetti S3.

Puoi basarti su queste query di esempio per creare query Logs Insights aggiuntive e più complesse che si allineano al tuo caso d'uso. Puoi anche integrare le query con la dashboard di CloudWatch per visualizzarle sotto forma di diagrammi e grafici insieme alle relative metriche.

Query 1: Eventi recenti

Obiettivo

Recuperare gli eventi CloudTrail Log più recenti con i campi @timestamp e @message predefiniti.

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: Suddividi i singoli campi

Obiettivo

  • Isolare i singoli campi in @message.
  • Visualizzare i campi selezionati nell'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-1Managementsts.amazonaws.comAssumeRoleAwsApiCallcloudtrail.amazonaws.comAWSService
2022-02-18 18:00:09.647ca-central-1Managementsts.amazonaws.comAssumeRoleAwsApiCallcloudtrail.amazonaws.comAWSService

Query 3: Filtra per istanze eseguite da Amazon Elastic Compute Cloud (Amazon EC2)

Obiettivo

  • Recuperare campi specifici nell'evento CloudTrail.
  • Rinominare i campi per utilizzare etichette più significative.
  • Filtrare le ultime istanze EC2 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-0325b4d6ae4e93c75RoleAssumedRoleAWSServiceRoleForAutoScaling
2022-02-18T13:45:18ZRunInstancesi-04d17a8425b7cb59aRoleAssumedRoleAWSServiceRoleForAutoScaling

Query 4: Filtra in base all'accesso alla console più recente

Obiettivo

  • Recuperare campi specifici nell'evento CloudTrail.
  • Rinominare i campi per utilizzare etichette più significative.
  • Filtra gli ultimi accessi nella console 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

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

Query 5: Filtra in base all'accesso alla console con autenticazione non riuscita

Obiettivo

  • Recuperare campi specifici nell'evento CloudTrail.
  • Rinominare i campi per utilizzare etichette più significative.
  • Filtrare gli ultimi accessi non riusciti dalla console.

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

eventTimeeventNameResponseUserUser_TypesourceIPAddresserrorMessage
2022-02-18T20:10:55ZConsoleLoginFailureechoIAMUser12.34.56.89Failed authentication
2022-02-18T20:10:43ZConsoleLoginFailureechoIAMUser12.34.56.89Failed authentication

Query 6: Filtra per upload di oggetti Amazon Simple Storage Service (Amazon S3)

Obiettivo

  • Recuperare campi specifici nell'evento CloudTrail.
  • Rinominare i campi per utilizzare etichette più significative.
  • Filtrare 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

@timestampAPIBucketNameKeyUserName
2022-02-12 17:16:07.415PutObjecttest_bucket1w4r9Hg4V7g.jpg
2022-02-12 16:29:43.470PutObjecttest_bucket26wyBy0hBoB.jpg

Query 7: Riepiloga l'attività di S3

Obiettivo

  • Filtrare basato sul servizio Amazon S3.
  • Aggregare tutti gli eventi corrispondenti in base alla statistica del conteggio.
  • Dividi i risultati in base all'API, al bucket S3 e alla chiave.
  • Usare il comando stats per rinominare i campi.
  • Ordinare 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

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

Query 8: Riepiloga l'attività di decrittografia di AWS KMS

Obiettivo

  • Filtrare in base al servizio AWS Key Management Service (AWS KMS) e all'API Decrypt.
  • Usare il comando fields per rinominare i campi, quindi aggregali in base ai nomi intuitivi.
  • Aggregare tutti gli eventi corrispondenti in base alla statistica del conteggio.
  • Dividere i risultati in base alla chiave e all'utente di AWS KMS.
  • Ordinare 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_KeyUserHits
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: Riepiloga le chiamate API con errori

Obiettivo

  • Filtro in base alla presenza del campo errorCode.
  • Aggregare tutti gli eventi corrispondenti in base alla statistica del conteggio.
  • Dividere i risultati in base al servizio AWS, all'API e a errorCode.
  • Usare il comando stats per rinominare i campi.
  • Ordinare per il 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: Riepiloga le chiamate API S3 con i codici di errore

Obiettivo

  • Filtrare basato sul servizio Amazon S3 e sulla presenza del campo errorCode.
  • Aggregare tutti gli eventi corrispondenti in base alla statistica del conteggio.
  • Dividere i risultati in base a errorCode ed errorMessage.
  • Ordinare per il 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

errorCodeerrorMessageHits
AccessDeniedAccesso negato86
NoSuchBucketPolicyThe bucket policy does not exist80
NoSuchPublicAccessBlockConfigurationLa configurazione del blocco di accesso pubblico non è stata trovata79
ObjectLockConfigurationNotFoundErrorLa configurazione Object Lock non esiste per questo bucket3
Errore di configurazione della crittografia lato serverLa configurazione di crittografia lato server non è stata trovata3

Query 11: Riepilogo delle chiamate API AccessDenied/UnauthorizedOperation da parte dell'utente del servizio AWS, dell'API e dell'AWS Identity and Access Management (IAM)

Obiettivo

  • Filtrare gli eventi AccessDenied o UnauthorizedOperation CloudTrail.
  • Aggregare tutti gli eventi corrispondenti in base alla statistica del conteggio.
  • Dividere i risultati in base all'utente o al ruolo di errorCode, AWS Service, API e IAM.
  • Usare il comando stats per rinominare i campi.
  • Ordinare 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: Volume orario di chiamate AWS KMS

Obiettivo

  • Filtrare basato sul servizio AWS KMS e sull'API Decrypt.
  • Aggregare tutti gli eventi corrispondenti in contenitori da un'ora.
  • Visualizzare 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)Hits
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)

Add a query to dashboard or export query results