View a markdown version of this page

Uso de los registros de acceso al servidor de Amazon S3 para identificar solicitudes - Amazon Simple Storage Service

Uso de los registros de acceso al servidor de Amazon S3 para identificar solicitudes

Puede identificar las solicitudes de Amazon S3 mediante los registros de acceso al servidor de Amazon S3.

nota
  • Para identificar solicitudes de Amazon S3, le recomendamos que utilice eventos de datos de AWS CloudTrail en lugar de los registros de acceso al servidor de Amazon S3. Los eventos de datos de CloudTrail son más fáciles de configurar y contienen más información. Para obtener más información, consulte Identificación de solicitudes de Amazon S3 mediante CloudTrail.

  • Según el número de solicitudes de acceso que obtenga, analizar sus registros puede requerir más recursos o tiempo que usar eventos de datos de CloudTrail.

Consultar los registros de acceso para solicitudes mediante Amazon Athena

Puede identificar las solicitudes de Amazon S3 con los registros de acceso de Amazon S3 mediante Amazon Athena.

Amazon S3 almacena los registros de acceso del servidor como objetos en un bucket de S3. Suele ser más fácil utilizar una herramienta que pueda analizar los registros en Amazon S3. Athena admite el análisis de objetos de S3 y se puede utilizar para consultar los registros de acceso de Amazon S3.

ejemplo

El siguiente ejemplo muestra cómo puede consultar los registros de acceso al servidor de Amazon S3 en Amazon Athena. Reemplace los user input placeholders utilizados en los siguientes ejemplos con su propia información.

nota

Para especificar una ubicación de Amazon S3 en una consulta de Athena, debe proporcionar un URI de S3 para el bucket donde se van a entregar sus registros. Este URI debe incluir el nombre y el prefijo del bucket en el siguiente formato: s3://amzn-s3-demo-bucket1-logs/prefix/

  1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.

  2. En el editor de consultas, ejecute un comando similar al siguiente. Sustituya s3_access_logs_db por el nombre que desea asignar a la base de datos.

    CREATE DATABASE s3_access_logs_db
    nota

    Una práctica recomendada es la creación de la base de datos en la misma Región de AWS que el bucket de S3.

  3. En el editor de consultas, ejecute un comando similar al siguiente para crear un esquema de tabla en la base de datos que creó en el paso 2. Sustituya s3_access_logs_db.mybucket_logs por el nombre que desea asignar a la tabla. Los valores con los tipos de datos STRING y BIGINT son las propiedades del registro de acceso. Puede consultar estas propiedades en Athena. Para LOCATION, introduzca el bucket de S3 y la ruta del prefijo como se indicó anteriormente.

    Date-based partitioning
    CREATE EXTERNAL TABLE s3_access_logs_db.mybucket_logs( `bucketowner` STRING, `bucket_name` STRING, `requestdatetime` STRING, `remoteip` STRING, `requester` STRING, `requestid` STRING, `operation` STRING, `key` STRING, `request_uri` STRING, `httpstatus` STRING, `errorcode` STRING, `bytessent` BIGINT, `objectsize` BIGINT, `totaltime` STRING, `turnaroundtime` STRING, `referrer` STRING, `useragent` STRING, `versionid` STRING, `hostid` STRING, `sigv` STRING, `ciphersuite` STRING, `authtype` STRING, `endpoint` STRING, `tlsversion` STRING, `accesspointarn` STRING, `aclrequired` STRING, `sourceregion` STRING) PARTITIONED BY ( `timestamp` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket-name/prefix-name/account-id/region/source-bucket-name/' TBLPROPERTIES ( 'projection.enabled'='true', 'projection.timestamp.format'='yyyy/MM/dd', 'projection.timestamp.interval'='1', 'projection.timestamp.interval.unit'='DAYS', 'projection.timestamp.range'='2024/01/01,NOW', 'projection.timestamp.type'='date', 'storage.location.template'='s3://bucket-name/prefix-name/account-id/region/source-bucket-name/${timestamp}')
    Non-date-based partitioning
    CREATE EXTERNAL TABLE `s3_access_logs_db.mybucket_logs`( `bucketowner` STRING, `bucket_name` STRING, `requestdatetime` STRING, `remoteip` STRING, `requester` STRING, `requestid` STRING, `operation` STRING, `key` STRING, `request_uri` STRING, `httpstatus` STRING, `errorcode` STRING, `bytessent` BIGINT, `objectsize` BIGINT, `totaltime` STRING, `turnaroundtime` STRING, `referrer` STRING, `useragent` STRING, `versionid` STRING, `hostid` STRING, `sigv` STRING, `ciphersuite` STRING, `authtype` STRING, `endpoint` STRING, `tlsversion` STRING, `accesspointarn` STRING, `aclrequired` STRING, `sourceregion` STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket1-logs/prefix/'
  4. En el panel de navegación, en Database (Base de datos), elija la base de datos.

  5. En Tables (Tablas), elija Preview table (Vista previa de tabla) junto al nombre de la tabla.

    En el panel Results (Resultados), debería ver los datos de los registros de acceso del servidor, como bucketowner, bucket, requestdatetime, etc. Esto significa que ha creado correctamente la tabla de Athena. Ahora puede consultar los registros de acceso al servidor de Amazon S3.

ejemplo— Mostrar quién eliminó un objeto y cuándo (marca temporal, dirección IP y usuario de IAM)
SELECT requestdatetime, remoteip, requester, key FROM s3_access_logs_db.mybucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';
ejemplo— Mostrar todas las operaciones realizadas por un usuario de IAM
SELECT * FROM s3_access_logs_db.mybucket_logs WHERE requester='arn:aws:iam::123456789123:user/user_name';
ejemplo— Mostrar todas las operaciones realizadas en un objeto en un periodo de tiempo específico
SELECT * FROM s3_access_logs_db.mybucket_logs WHERE Key='prefix/images/picture.jpg' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');
ejemplo— Mostrar la cantidad de datos transferidos a una dirección IP específica en un periodo de tiempo específico
SELECT coalesce(SUM(bytessent), 0) AS bytessenttotal FROM s3_access_logs_db.mybucket_logs WHERE remoteip='192.0.2.1' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2022-06-01','yyyy-MM-dd') AND parse_datetime('2022-07-01','yyyy-MM-dd');
ejemplo— Encontrar los ID de solicitud de errores 5xx de HTTP en un periodo de tiempo concreto
SELECT requestdatetime, key, httpstatus, errorcode, requestid, hostid FROM s3_access_logs_db.mybucket_logs WHERE httpstatus like '5%' AND timestamp BETWEEN '2024/01/29' AND '2024/01/30'

Identificación de solicitudes de Signature Version 2

Puede usar registros de acceso al servidor para identificar solicitudes de Signature Version 2. Para obtener más información sobre la consulta de registros con Amazon Athena, consulte la sección de consultas de Athena en Entrega de registros a un bucket de uso general de Amazon S3.

Identificación de las solicitudes de acceso a objetos

Puede utilizar los registros de acceso al servidor para identificar patrones de acceso a objetos. Para obtener más información sobre la consulta de registros con Amazon Athena, consulte la sección de consultas de Athena en Entrega de registros a un bucket de uso general de Amazon S3.