Como posso analisar meus logs do CloudTrail com o CloudWatch Logs Insights?

10 minuto de leitura
0

Quero analisar meus logs do Amazon CloudTrail usando o Amazon CloudWatch Logs Insights. Como posso fazer isso?

Breve descrição

Você pode configurar o CloudTrail para registrar logs no CloudWatch Logs. Isso permite que você use o CloudWatch Logs Insights para analisar logs do CloudTrail e monitorar atividades específicas da conta.

Para demonstrar a capacidade do Logs Insights de analisar logs do CloudTrail, a resolução a seguir contém exemplos de consultas. Essas consultas abrangem os casos de uso mais comuns:

  • Isolar campos de log específicos.
  • Filtrar em condições diferentes.
  • Agregar eventos.
  • Construir uma série temporal.

Resolução

As consultas a seguir exploram a atividade de bucket e objeto do Amazon Simple Storage Service (Amazon S3). Por padrão, o CloudTrail não captura eventos de dados do S3. Você pode ativar o registro de eventos no CloudTrail. Para obter mais informações, consulte Habilitar o registro de eventos do CloudTrail para buckets e objetos do S3.

Você pode criar essas consultas de exemplo para criar consultas adicionais e mais complexas do Logs Insights alinhadas ao seu caso de uso. Você também pode integrar consultas ao seu painel do CloudWatch para visualizar suas consultas como tabelas e gráficos ao lado de métricas relacionadas.

Consulta 1: Eventos mais recentes

Objetivo

Recupera os eventos mais recentes do log do CloudTrail com os campos @timestamp e @message padrão.

Consulte

#Retrieve the most recent CloudTrail events
fields @timestamp, @message
| sort @timestamp desc
| limit 2

Resultados

@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" (saída truncada)
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": (saída truncada)

Consulta 2: Dividir campos individuais

Objetivo

  • Isolar os campos individuais em @message.
  • Exibir campos selecionados no evento do CloudTrail.

Consulte

#Breakout Individual Fields
fields @timestamp, awsRegion, eventCategory, eventSource, eventName, eventType, sourceIPAddress, userIdentity.type
| sort @timestamp desc
| limit 2

Resultados

@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

Consulta 3: Filtrar por instâncias de execução do Amazon Elastic Compute Cloud (Amazon EC2)

Objetivo

  • Recuperar campos específicos no evento do Cloudtrail.
  • Renomear os campos com rótulos mais significativos.
  • Filtrar as instâncias do EC2 mais recentes executadas nessa conta com base na chamada de API.

Consulte

#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

Resultados

eventTimeAPIInstanceIDIssuerTypeIdentityTypeuserName
2022-02-18T17:36:38ZRunInstancesi-0325b4d6ae4e93c75FunçãoAssumedRoleAWSServiceRoleForAutoScaling
2022-02-18T13:45:18ZRunInstancesi-04d17a8425b7cb59aFunçãoAssumedRoleAWSServiceRoleForAutoScaling

Consulta 4: Filtrar por login do console: Mais recente

Objetivo

  • Recuperar campos específicos no evento do Cloudtrail.
  • Renomear os campos com rótulos mais significativos.
  • Filtrar os logins mais recentes por meio do Console da AWS com base na chamada de API.

Consulte

#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

Resultados

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

Consulta 5: Filtrar por login do console: Falha na autenticação

Objetivo

  • Recuperar campos específicos (por exemplo, nome de usuário, tipo de usuário, IP de origem) no evento do Cloudtrail.
  • Renomear os campos com rótulos mais significativos.
  • Filtrar os logins malsucedidos mais recentes por meio do Console AWS.

Consulte

#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

Resultados

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

Consulta 6: Filtrar por upload de objeto da Amazon Simple Storage Solution (Amazon S3)

Objetivo

  • Recuperar campos específicos no evento do Cloudtrail.
  • Renomear os campos com rótulos mais significativos.
  • Filtrar na chamada de API e no bucket do S3 de destino.

Consulte

#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

Resultados

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

Consulta 7: Resumir a atividade do S3

Objetivo

  • Filtrar com base no serviço S3.
  • Agregar todos os eventos correspondentes com base na estatística de contagem.
  • Emendar os resultados com base na API, no bucket do S3 e na chave.
  • Usar o comando stats para renomear campos.
  • Classificar por ordem decrescente.

Consulte

#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

Resultados

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

Consulta 8: Resumir a atividade de descriptografia do AWS Key Management Service (AWS KMS)

Objetivo

  • Filtrar com base no serviço do KMS e na API Decrypt.
  • Use o comando fields para renomear campos e agregar os nomes amigáveis.
  • Agregar todos os eventos correspondentes com base na estatística de contagem.
  • Emendar os resultados com base na Chave do KMS e Usuário.
  • Classificar por ordem decrescente.

Consulte

#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

Resultados

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

Consulta 9: Resumir as chamadas de API com erros

Objetivo

  • Filtrar com base na presença do campo errorCode.
  • Agregar todos os eventos correspondentes com base na estatística de contagem.
  • Emendar os resultados com base no serviço da AWS, na API e no errorCode.
  • Usar o comando stats para renomear campos.
  • Classificar pelo maior número de correspondências.

Consulte

#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

Resultados

AWS_ServiceAPIerrorCodeNum_of_Events
s3.amazonaws.comGetBucketPublicAccessBlockNoSuchPublicAccessBlockConfiguration79
lambda.amazonaws.comGetLayerVersionPolicy20181031ResourceNotFoundException66
s3.amazonaws.comGetBucketPolicyStatusNoSuchBucketPolicy60
s3.amazonaws.comHeadBucketAccessDenied47
logs.amazonaws.comCreateLogStreamResourceNotFoundException21

Consulta 10: Resumir as chamadas de API do S3 com códigos de erro

Objetivo

  • Filtrar com base no Serviço do S3 e na presença do campo ErrorCode.
  • Agregar todos os eventos correspondentes com base na estatística de contagem.
  • Emendar os resultados com base em ErrorCode eErrorMessage.
  • Classificar pelo maior número de correspondências.

Consulte

#S3: Summarize Error Codes
filter eventSource = 's3.amazonaws.com' and ispresent(errorCode)
| stats count(*) as Hits by errorCode, errorMessage
| sort Hits desc
| limit 5

Resultados

errorCodeerrorMessageHits
AccessDeniedAcesso negado86
NoSuchBucketPolicyA política de bucket não existe80
NoSuchPublicAccessBlockConfigurationA configuração do bloco de acesso público não foi encontrada79
ObjectLockConfigurationNotFoundErrorA configuração de bloqueio de objeto não existe para esse bucket3
ServerSideEncryptionConfigurationNotFoundErrorA configuração de criptografia do lado do servidor não foi encontrada3

Consulta 11: Resumir as chamadas de API AccessDenied/UnauthorizedOperation por serviço da AWS, da API e do usuário do AWS Identity and Access Management (IAM)

Objetivo

  • Filtrar os eventos AccessDenied ou UnauthorizedOperation do CloudTrail.
  • Agregar todos os eventos correspondentes com base na estatística de contagem.
  • Emendar os resultados com base no ErrorCode, no serviço da AWS, na API e no usuário/função do IAM.
  • Usar o comando stats para renomear campos.
  • Classifique em ordem decrescente.

Consulte

#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

Resultados

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

Consulta 12: Série temporal: Volume de chamadas por hora do KMS

Objetivo

  • Filtrar com base no serviço do KMS e na API Decrypt.
  • Agregar todos os eventos correspondentes em compartimentos de 1 hora.
  • Visualize os resultados em um gráfico de linhas.

Consulte

#KMS: Hourly Decrypt Call Volume
filter eventSource='kms.amazonaws.com' and eventName='Decrypt'
| stats count(*) as Hits by bin(1h)

Resultados

compartimento (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

Informações relacionadas

Monitorar dados de log do AWS CloudTrail no Amazon CloudWatch (vídeo)

Adicionar consulta ao painel ou exportar os resultados da consulta

Exemplos de consultas do CloudWatch Logs Insights

Comandos de consulta do CloudWatch Logs Insights

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos