Consulta de registros de AWS CloudTrail - Amazon Athena

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Consulta de registros de AWS CloudTrail

AWS CloudTrail es un servicio que registra las llamadas a la API de AWS y los eventos para las cuentas de Amazon Web Services.

CloudTrail los registros incluyen detalles sobre cualquier llamada a la API que se realice a Servicios de AWS usted, incluida la consola. CloudTrail genera archivos de registro cifrados y los almacena en Amazon S3. Para obtener más información, consulte la AWS CloudTrailGuía del usuario de .

nota

Si desea realizar consultas SQL sobre la información de CloudTrail eventos de cuentas, regiones y fechas, considere la posibilidad de utilizar CloudTrail Lake. CloudTrail Lake es una AWS alternativa a la creación de rutas que agrupa la información de una empresa en un único almacén de datos de eventos con capacidad de búsqueda. En lugar de utilizar el almacenamiento de bucket de Amazon S3, almacena los eventos en un lago de datos, lo que permite realizar consultas más ricas y rápidas. Se puede utilizar para crear consultas SQL que buscan eventos en organizaciones, regiones y dentro de intervalos de tiempo personalizados. Como las consultas de CloudTrail Lake se realizan dentro de la propia CloudTrail consola, el uso de CloudTrail Lake no requiere Athena. Para obtener más información, consulte la documentación de CloudTrail Lake.

El uso de Athena con CloudTrail registros es una forma eficaz de mejorar el análisis de Servicio de AWS la actividad. Por ejemplo, puede ejecutar consultas que identifiquen tendencias y aislar la actividad por atributos, como el usuario o la dirección IP de origen.

Una aplicación habitual consiste en utilizar CloudTrail los registros para analizar la actividad operativa con fines de seguridad y conformidad. Para obtener información sobre un ejemplo detallado, consulte la publicación del blog sobre macrodatos de AWS, Analyze security, compliance, and operational activity using AWS CloudTrail and Amazon Athena.

Athena le permite consultar estos archivos de registro directamente desde Amazon S3 especificando su ubicación con LOCATION. Puede hacerlo de una de las dos formas siguientes:

  • Creando tablas para los archivos de CloudTrail registro directamente desde la CloudTrail consola.

  • Creando manualmente tablas para los archivos de CloudTrail registro en la consola de Athena.

Descripción de CloudTrail los registros y las tablas de Athena

Antes de empezar a crear tablas, debe comprender un poco más sobre CloudTrail cómo se almacenan los datos. Esto puede ayudarle a crear las tablas que necesita, tanto si las crea desde la CloudTrail consola como desde Athena.

CloudTrail guarda los registros como archivos de texto JSON en formato gzip comprimido (*.json.gzip). La ubicación de los archivos de registro depende del modo en que se configuran los registros de seguimiento, la Región de AWS (o regiones) donde se lleva a cabo el registro y otros factores.

Para obtener más información sobre el lugar donde se almacenan los logs, la estructura de JSON y el contenido de los archivos de registro, consulte los temas siguientes en la Guía del usuario de AWS CloudTrail:

Para recopilar registros y guardarlos en Amazon S3, habilite CloudTrail desdeAWS Management Console. Para obtener más información, consulte Crear un registro de seguimiento en la Guía del usuario de AWS CloudTrail.

Anote el bucket de Amazon S3 de destino en el que guarda los registros. Sustituya la LOCATION cláusula por la ruta a la ubicación del CloudTrail registro y al conjunto de objetos con los que trabajar. En el ejemplo se usa como valor de LOCATION los registros de una cuenta determinada, pero puede especificar tanto como requiera su aplicación.

Por ejemplo:

  • Para analizar datos de varias cuentas, puede modificar el especificador LOCATION para que indique todos los AWSLogs con el valor LOCATION 's3://MyLogFiles/AWSLogs/'.

  • Para analizar los datos de una fecha, cuenta y región específicas, utilice LOCATION 's3://MyLogFiles/123456789012/CloudTrail/us-east-1/2016/03/14/'.

El uso del máximo nivel en la jerarquía de objetos le ofrece la mayor flexibilidad al ejecutar consultas con Athena.

Uso de la CloudTrail consola para crear una tabla Athena para los registros CloudTrail

Puedes crear una tabla Athena no particionada para consultar los CloudTrail registros directamente desde la consola. CloudTrail La creación de una tabla de Athena desde la CloudTrail consola requiere que haya iniciado sesión con un rol que tenga permisos suficientes para crear tablas en Athena.

nota

No puede usar la CloudTrail consola para crear una tabla de Athena para los registros de seguimiento de la organización. En su lugar, cree la tabla manualmente con la consola de Athena para que pueda especificar la ubicación de almacenamiento correcta. Para obtener información sobre los registros de seguimiento de una organización, consulte Creación de registros de seguimiento de una organización en la Guía del usuario de AWS CloudTrail.

Para crear una tabla Athena para un CloudTrail sendero mediante la consola CloudTrail
  1. Abra la CloudTrail consola en https://console.aws.amazon.com/cloudtrail/.

  2. En el panel de navegación, elija Event history (Historial de eventos).

  3. Elija Creación de una tabla de Athena.

    
                        Elija Creación de una tabla de Athena
  4. En Storage location (Ubicación de almacenamiento), utilice la flecha hacia abajo para seleccionar el bucket de Amazon S3 en el que se almacenan los archivos de registro de seguimiento que desea consultar.

    nota

    Para encontrar el nombre del segmento asociado a una ruta, elija Rutas en el panel de CloudTrail navegación y consulte la columna de áreas S3 de la ruta. Para ver la ubicación del bucket en Amazon S3, elija el enlace del bucket en la columna del bucket de S3. Esto abre la consola Amazon S3 en la ubicación del CloudTrail depósito.

  5. Elija Crear tabla. La tabla se crea con un nombre predeterminado que incluye el nombre del bucket de Amazon S3.

Crear una tabla para CloudTrail registros en Athena mediante particionamiento manual

Puede crear manualmente tablas para los archivos de CloudTrail registro en la consola de Athena y, a continuación, ejecutar consultas en Athena.

Para crear una tabla Athena para un CloudTrail sendero con la consola Athena
  1. Copie y pegue la siguiente instrucción DDL en el editor de consultas de la consola de Athena.

    CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>, ec2RoleDelivery:string, webIdFederationData:map<string,string> > >, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< arn:STRING, accountid:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING, eventCategory STRING, tlsDetails struct< tlsVersion:string, cipherSuite:string, clientProvidedHostHeader:string> ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/';
    nota

    Sugerimos usar la que org.apache.hive.hcatalog.data.JsonSerDe se muestra en el ejemplo. Aunque a com.amazon.emr.hive.serde.CloudTrailSerde existe, actualmente no maneja algunos de los CloudTrail campos más nuevos.

  2. (Opcional) Elimine los campos que no sean obligatorios para la tabla. Si solo necesita leer un determinado conjunto de columnas, la definición de la tabla puede excluir las demás columnas.

  3. Modifique s3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/ de modo que apunte al bucket de Amazon S3 que contiene los datos de registro.

  4. Compruebe que los campos se muestran correctamente. Para obtener más información sobre la lista completa de campos de un CloudTrail registro, consulte el contenido del CloudTrail registro.

    El siguiente ejemplo utiliza El SerDe JSON de Hive. En este ejemplo, los campos requestparameters, responseelements y additionaleventdata se incluyen como tipo STRING en la consulta, pero son tipo de datos STRUCT utilizado en JSON. Por lo tanto, para obtener datos de estos campos puede usar funciones JSON_EXTRACT. Para obtener más información, consulte Extracción de datos de JSON. Para mejorar el rendimiento, este ejemplo particiona los datos por Región de AWS, año, mes y día.

  5. Ejecutar la instrucción CREATE TABLE en la consola de Athena.

  6. Utilice el comando ALTER TABLE ADD PARTITION para cargar las particiones de modo que pueda consultarlas, como en el ejemplo siguiente.

    ALTER TABLE table_name ADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://cloudtrail_bucket_name/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'

Creación de una tabla para la ruta de toda una organización mediante particiones manuales

Para crear una tabla para los archivos de CloudTrail registro de toda la organización en Athena, siga los pasos que se indican en el procedimiento siguienteCrear una tabla para CloudTrail registros en Athena mediante particionamiento manual, pero realice las modificaciones que se indican en él.

Para crear una tabla Athena para registros de toda la organización CloudTrail
  1. En la instrucción CREATE TABLE, modifique la cláusula LOCATION para incluir el ID de organización, como en el ejemplo siguiente:

    LOCATION 's3://cloudtrail_bucket_name/AWSLogs/organization_id/Account_ID/CloudTrail/'
  2. En la cláusula PARTITIONED BY, agregue una entrada para el ID de cuenta en forma de cadena, como en el ejemplo siguiente:

    PARTITIONED BY (account string, region string, year string, month string, day string)

    En el ejemplo siguiente, se muestra el resultado combinado:

    ... PARTITIONED BY (account string, region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://cloudtrail_bucket_name/AWSLogs/organization_id/Account_ID/CloudTrail/'
  3. En la cláusula ADD PARTITION de la instrucción ALTER TABLE, incluya el ID de cuenta, como en el ejemplo siguiente:

    ALTER TABLE table_name ADD PARTITION (account='111122223333', region='us-east-1', year='2022', month='08', day='08')
  4. En la cláusula LOCATION de la instrucción ALTER TABLE, incluya el ID de la organización, el ID de cuenta y la partición que desea agregar, como en el ejemplo siguiente:

    LOCATION 's3://cloudtrail_bucket_name/AWSLogs/organization_id/Account_ID/CloudTrail/us-east-1/2022/08/08/'

    En el siguiente ejemplo, la instrucción ALTER TABLE muestra el resultado combinado:

    ALTER TABLE table_name ADD PARTITION (account='111122223333', region='us-east-1', year='2022', month='08', day='08') LOCATION 's3://cloudtrail_bucket_name/AWSLogs/organization_id/111122223333/CloudTrail/us-east-1/2022/08/08/'

Creación de la tabla para los registros de CloudTrail en Athena por medio de la proyección de particiones

Como CloudTrail los registros tienen una estructura conocida cuyo esquema de particiones puede especificar de antemano, puede reducir el tiempo de ejecución de las consultas y automatizar la administración de particiones mediante la función de proyección de particiones de Athena. La proyección de particiones agrega de forma automática nuevas particiones a medida que se agregan nuevos datos. Esto hace que no sea necesario agregar particiones manualmente mediante ALTER TABLE ADD PARTITION.

El siguiente ejemplo de CREATE TABLE instrucción utiliza automáticamente la proyección de particiones en CloudTrail los registros desde una fecha específica hasta el presente en el caso de un registro. Región de AWS En las cláusulas LOCATION y storage.location.template, reemplace los marcadores de posición bucket, account-id y aws-region por valores idénticos en consecuencia. En projection.timestamp.range, reemplace 2020/01/01 por la fecha de inicio que quiera utilizar. Una vez ejecutada la consulta correctamente, puede consultar la tabla. No tiene que ejecutar ALTER TABLE ADD PARTITION para cargar las particiones.

CREATE EXTERNAL TABLE cloudtrail_logs_pp( eventVersion STRING, userIdentity STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, invokedBy: STRING, accessKeyId: STRING, userName: STRING, sessionContext: STRUCT< attributes: STRUCT< mfaAuthenticated: STRING, creationDate: STRING>, sessionIssuer: STRUCT< type: STRING, principalId: STRING, arn: STRING, accountId: STRING, userName: STRING>, ec2RoleDelivery:string, webIdFederationData:map<string,string> > >, eventTime STRING, eventSource STRING, eventName STRING, awsRegion STRING, sourceIpAddress STRING, userAgent STRING, errorCode STRING, errorMessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestId STRING, eventId STRING, readOnly STRING, resources ARRAY<STRUCT< arn: STRING, accountId: STRING, type: STRING>>, eventType STRING, apiVersion STRING, recipientAccountId STRING, serviceEventDetails STRING, sharedEventID STRING, vpcendpointid STRING, eventCategory STRING, tlsDetails struct< tlsVersion:string, cipherSuite:string, clientProvidedHostHeader:string> ) PARTITIONED BY ( `timestamp` string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket/AWSLogs/account-id/CloudTrail/aws-region' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.timestamp.format'='yyyy/MM/dd', 'projection.timestamp.interval'='1', 'projection.timestamp.interval.unit'='DAYS', 'projection.timestamp.range'='2020/01/01,NOW', 'projection.timestamp.type'='date', 'storage.location.template'='s3://bucket/AWSLogs/account-id/CloudTrail/aws-region/${timestamp}')

Para obtener más información sobre la proyección de particiones, consulte Proyección de particiones con Amazon Athena.

Consulta de campos anidados

Ya que los campos userIdentity y resources son tipos de datos anidados, su consulta requiere un tratamiento especial.

El objeto userIdentity se compone de tipos STRUCT anidados. Estos se pueden consultar utilizando un punto para separar los campos, como en el ejemplo a continuación:

SELECT eventsource, eventname, useridentity.sessioncontext.attributes.creationdate, useridentity.sessioncontext.sessionissuer.arn FROM cloudtrail_logs WHERE useridentity.sessioncontext.sessionissuer.arn IS NOT NULL ORDER BY eventsource, eventname LIMIT 10

El campo resources es una matriz de objetos STRUCT. Para estas matrices, utilice CROSS JOIN UNNEST para desanidar la matriz, de modo que pueda consultar sus objetos.

En el ejemplo siguiente se devuelven todas las filas donde el ARN de recurso termina en example/datafile.txt. Por motivos de legibilidad, la función replace elimina la subcadena arn:aws:s3::: inicial del ARN.

SELECT awsregion, replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as s3_resource, eventname, eventtime, useragent FROM cloudtrail_logs t CROSS JOIN UNNEST(t.resources) unnested (resources_entry) WHERE unnested.resources_entry.ARN LIKE '%example/datafile.txt' ORDER BY eventtime

Las siguientes son consultas de ejemplo para eventos DeleteBucket. La consulta extrae el nombre del bucket y el ID de cuenta al que pertenece el bucket del objeto resources.

SELECT awsregion, replace(unnested.resources_entry.ARN,'arn:aws:s3:::') as deleted_bucket, eventtime AS time_deleted, useridentity.username, unnested.resources_entry.accountid as bucket_acct_id FROM cloudtrail_logs t CROSS JOIN UNNEST(t.resources) unnested (resources_entry) WHERE eventname = 'DeleteBucket' ORDER BY eventtime

Para obtener más información acerca de la desanidación, consulte Filtro de matrices.

Consulta de ejemplo

El siguiente ejemplo muestra una parte de una consulta que devuelve todas las solicitudes anónimas (sin firmar) de la tabla creada para los registros de CloudTrail eventos. Esta consulta selecciona esas solicitudes donde useridentity.accountid es anónimo y no se ha especificado useridentity.arn:

SELECT * FROM cloudtrail_logs WHERE eventsource = 's3.amazonaws.com' AND eventname in ('GetObject') AND useridentity.accountid = 'anonymous' AND useridentity.arn IS NULL AND requestparameters LIKE '%[your bucket name ]%';

Para obtener más información, consulte la publicación del blog sobre macrodatos de AWS Analyze security, compliance, and operational activity using AWS CloudTrail and Amazon Athena.

Consejos para consultar los registros CloudTrail

Para explorar los datos CloudTrail de los registros, sigue estos consejos:

  • Antes de consultar los registros, compruebe que la tabla de registros sea similar a la de Crear una tabla para CloudTrail registros en Athena mediante particionamiento manual. Si no es la primera tabla, elimine la tabla existente con el siguiente comando: DROP TABLE cloudtrail_logs.

  • Después de eliminar la tabla existente, vuelva a crearla. Para obtener más información, consulte Crear una tabla para CloudTrail registros en Athena mediante particionamiento manual.

    Verifique que los campos de la consulta de Athena se muestren correctamente. Para obtener información sobre la lista completa de campos de un CloudTrail registro, consulta el contenido del CloudTrail registro.

    Si la consulta incluye campos en formato JSON, como STRUCT, extraiga los datos de JSON. Para obtener más información, consulte Extracción de datos de JSON.

    Algunas sugerencias para realizar consultas en CloudTrail la tabla:

  • Para comenzar, observe qué usuarios de han invocado qué operaciones de la API y desde qué direcciones IP lo han hecho.

  • Utilice la consulta SQL básica siguiente como plantilla. Pegue la consulta en la consola de Athena y ejecútela.

    SELECT useridentity.arn, eventname, sourceipaddress, eventtime FROM cloudtrail_logs LIMIT 100;
  • Modifique la consulta para explorar en profundidad los datos.

  • Para mejorar el rendimiento, incluya la cláusula LIMIT para obtener un subconjunto de filas determinado.