Como posso analisar meus logs do CloudTrail com o CloudWatch Logs Insights?
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
@timestamp | awsRegion | eventCategory | eventSource | eventName | eventType | sourceIPAddress | userIdentity.type |
---|---|---|---|---|---|---|---|
2022-02-18 18:00:09.647 | ca-central-1 | Management | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
2022-02-18 18:00:09.647 | ca-central-1 | Management | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
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
eventTime | API | InstanceID | IssuerType | IdentityType | userName |
---|---|---|---|---|---|
2022-02-18T17:36:38Z | RunInstances | i-0325b4d6ae4e93c75 | Função | AssumedRole | AWSServiceRoleForAutoScaling |
2022-02-18T13:45:18Z | RunInstances | i-04d17a8425b7cb59a | Função | AssumedRole | AWSServiceRoleForAutoScaling |
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
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 |
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
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 |
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
@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 |
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
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 |
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_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 |
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_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 |
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
errorCode | errorMessage | Hits |
---|---|---|
AccessDenied | Acesso negado | 86 |
NoSuchBucketPolicy | A política de bucket não existe | 80 |
NoSuchPublicAccessBlockConfiguration | A configuração do bloco de acesso público não foi encontrada | 79 |
ObjectLockConfigurationNotFoundError | A configuração de bloqueio de objeto não existe para esse bucket | 3 |
ServerSideEncryptionConfigurationNotFoundError | A configuração de criptografia do lado do servidor não foi encontrada | 3 |
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
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 |
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.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 |
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
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 anos