¿Cómo puedo analizar mis registros de CloudTrail con CloudWatch Logs Insights?

10 minutos de lectura
0

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

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

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

eventTimeAPIInstanceIDIssuerTypeIdentityTypeuserName
2022-02-18T17:36:38ZRunInstancesi-0325b4d6ae4e93c75RoleAssumedRoleAWSServiceRoleForAutoScaling
2022-02-18T13:45:18ZRunInstancesi-04d17a8425b7cb59aRoleAssumedRoleAWSServiceRoleForAutoScaling

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

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

eventTimeeventNameResponseUserUser_TypesourceIPAddresserrorMessage
2022-02-18T20:10:55ZConsoleLoginFailureechoIAMUser12.34.56.89Failed authentication
2022-02-18T20:10:43ZConsoleLoginFailureechoIAMUser12.34.56.89Failed 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

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

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

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

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

errorCodeerrorMessageHits
AccessDeniedAccess Denied86
NoSuchBucketPolicyThe bucket policy does not exist80
NoSuchPublicAccessBlockConfigurationThe public access block configuration was not found79
ObjectLockConfigurationNotFoundErrorObject Lock configuration does not exist for this bucket3
ServerSideEncryptionConfigurationNotFoundErrorThe server side encryption configuration was not found3

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

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

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.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

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

Consultas de ejemplo de CloudWatch Logs Insights

Comandos de consulta de CloudWatch Logs Insights

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años