¿Cómo puedo analizar mis registros de CloudTrail con CloudWatch Logs Insights?
Quiero analizar mis registros de Amazon CloudTrail con Amazon CloudWatch Logs Insights. ¿Cómo puedo hacerlo?
Descripción corta
Puede configurar CloudTrail para que su actividad quede registrada en CloudWatch Logs. Si lo hace, podrá utilizar CloudWatch Logs Insights para analizar los registros de CloudTrail y supervisar la actividad específica de la cuenta.
Para demostrar la capacidad de Logs Insights para analizar los registros de CloudTrail, la siguiente resolución contiene consultas de ejemplo. Estas consultas cubren los casos de uso más comunes:
- Aislar campos de registro específicos.
- Filtrar en diferentes condiciones.
- Agregar eventos.
- Construir una serie temporal.
Resolución
Las siguientes consultas exploran la actividad de objetos y buckets de Amazon Simple Storage Service (Amazon S3). De forma predeterminada, CloudTrail no captura eventos de datos de S3. Puede activar el registro de eventos en CloudTrail. Para obtener más información, consulte Habilitación del registro de eventos de CloudTrail para buckets y objetos de S3.
Puede basarse en estas consultas de ejemplo para crear consultas de Logs Insights adicionales y más complejas alineadas con su caso de uso. También puede integrar las consultas en el panel de control de CloudWatch para visualizar sus consultas en forma de tablas y gráficos junto con métricas relacionadas.
Consulta 1: eventos más recientes
Objetivo
Recuperar los eventos de CloudTrail Log más recientes con los campos @timestamp y @message predeterminados.
Consulta
#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" (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) |
Consulta 2: desglosar campos individuales
Objetivo
- Aislar los campos individuales en @message.
- Mostrar los campos seleccionados en el evento de CloudTrail.
Consulta
#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 | Administración | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
2022-02-18 18:00:09.647 | ca-central-1 | Administración | sts.amazonaws.com | AssumeRole | AwsApiCall | cloudtrail.amazonaws.com | AWSService |
Consulta 3: filtrar por RunInstances de Amazon Elastic Compute Cloud (EC2)
Objetivo
- Recuperar campos específicos en el evento de CloudTrail.
- Cambiar el nombre de los campos con etiquetas más significativas.
- Filtrar las últimas instancias de EC2 lanzadas en esta cuenta en función de la llamada a la API.
Consulta
#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 | Role | AssumedRole | AWSServiceRoleForAutoScaling |
2022-02-18T13:45:18Z | RunInstances | i-04d17a8425b7cb59a | Role | AssumedRole | AWSServiceRoleForAutoScaling |
Consulta 4: filtrar por inicio de sesión de consola: Más reciente
Objetivo
- Recuperar campos específicos en el evento de CloudTrail.
- Cambiar el nombre de los campos con etiquetas más significativas.
- Filtrar los últimos inicios de sesión a través de la consola de AWS según la llamada a la API.
Consulta
#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 inicio de sesión de consola: Autenticación fallida
Objetivo
- Recuperar campos específicos (por ejemplo, nombre de usuario, tipo de usuario, IP de origen) en el evento de CloudTrail.
- Cambiar el nombre de los campos con etiquetas más significativas.
- Filtrar los últimos inicios de sesión incorrectos a través de la consola de AWS.
Consulta
#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 carga de objetos de Amazon Simple Storage Solution (Amazon S3)
Objetivo
- Recuperar campos específicos en el evento de CloudTrail.
- Cambiar el nombre de los campos con etiquetas más significativas.
- Filtrar por llamada a la API y bucket S3 de destino.
Consulta
#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 la actividad de S3
Objetivo
- Filtrar según el servicio de S3.
- Agregar todos los eventos coincidentes en función de la estadística count (recuento).
- Unir los resultados en función de la API, el bucket de S3 y la clave.
- Usar el comando stats para cambiar el nombre de los campos.
- Ordenar por orden descendente.
Consulta
#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: resumen de la actividad de descifrado de AWS Key Management Service (AWS KMS)
Objetivo
- Filtrar según el servicio KMS y la API Decrypt (Descifrar).
- Usar el comando fields para cambiar el nombre de los campos y agregar nombres fáciles de usar.
- Agregar todos los eventos coincidentes en función de la estadística count (recuento).
- Unir los resultados según la clave de KMS y el usuario.
- Ordenar por orden descendente.
Consulta
#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 las llamadas a la API con errores
Objetivo
- Filtrar en función de la presencia del campo errorCode.
- Agregar todos los eventos coincidentes en función de la estadística count (recuento).
- Unir los resultados en función del servicio de AWS, la API y el código de error.
- Usar el comando stats para cambiar el nombre de los campos.
- Ordenar por mayor número de coincidencias.
Consulta
#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 las llamadas a la API de S3 con códigos de error
Objetivo
- Filtrar según el servicio de S3 y la presencia del campo ErrorCode.
- Agregar todos los eventos coincidentes en función de la estadística count (recuento).
- Unir los resultados en función de los parámetros ErrorCode y ErrorMessage.
- Ordenar por mayor número de coincidencias.
Consulta
#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 | Access Denied | 86 |
NoSuchBucketPolicy | The bucket policy does not exist | 80 |
NoSuchPublicAccessBlockConfiguration | The public access block configuration was not found | 79 |
ObjectLockConfigurationNotFoundError | Object Lock configuration does not exist for this bucket | 3 |
ServerSideEncryptionConfigurationNotFoundError | The server side encryption configuration was not found | 3 |
Consulta 11: resumen de las llamadas a las API AccessDenied/UnauthorizedOperation realizadas por el servicio de AWS, la API y el usuario de AWS Identity and Access Management (IAM)
Objetivo
- Filtrar los eventos de CloudTrail de AccessDenied o UnauthorizedOperation.
- Agregar todos los eventos coincidentes en función de la estadística count (recuento).
- Unir los resultados en función de los parámetros errorCode, servicio de AWS, API y usuario/rol de IAM.
- Usar el comando stats para cambiar el nombre de los campos.
- Ordenar en orden descendente.
Consulta
#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: serie temporal: volumen de llamadas por hora de KMS
Objetivo
- Filtrar según el servicio KMS y la API Decrypt (Descifrar).
- Agregar todos los eventos coincidentes en compartimentos de 1 hora.
- Visualizar los resultados en un gráfico de líneas.
Consulta
#KMS: Hourly Decrypt Call Volume filter eventSource='kms.amazonaws.com' and eventName='Decrypt' | stats count(*) as Hits by bin(1h)
Resultados
bin(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 |
Información relacionada
Supervisar los datos de registro de AWS CloudTrail en Amazon CloudWatch (video)
Agregar consulta al panel o exportar los resultados de la consulta
Contenido relevante
- ¿Cómo puedo analizar los registros de flujo de VPC personalizados mediante CloudWatch Logs Insights?OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años