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.

    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) 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');
nota

A fin de reducir el tiempo que se retienen sus registros, puede crear una configuración del ciclo de vida de S3 para el bucket de registros de acceso al servidor. Cree reglas de configuración del ciclo de vida para eliminar los archivos de registro periódicamente. Esto reduce la cantidad de datos que Athena analiza para cada consulta. Para obtener más información, consulte Configuración de un ciclo de vida en un bucket.

Identificación de solicitudes de la versión 2 de firma mediante registros de acceso de Amazon S3

La compatibilidad de Amazon S3 con Signature Version 2 va a finalizar (esta característica quedará obsoleta). Cuando esto suceda, Amazon S3 dejará de aceptar solicitudes que utilicen Signature Version 2, y todas las solicitudes deberán firmarse con Signature Version 4. Puede identificar las solicitudes de Signature Version 2 utilizando los registros de acceso de Amazon S3.

nota

Para identificar solicitudes de Signature Version 2, 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 que los registros de acceso del servidor. Para obtener más información, consulte Identificación de solicitudes de firma de Amazon S3 versión 2 mediante CloudTrail.

ejemplo — Mostrar todos los solicitantes que envían tráfico de la versión 2 de la firma
SELECT requester, sigv, Count(sigv) as sigcount FROM s3_access_logs_db.mybucket_logs GROUP BY requester, sigv;

Identificación de solicitudes de acceso a objetos mediante los registros de acceso de Amazon S3

Puede usar consultas en registros de acceso al servidor de Amazon S3 para identificar las solicitudes de acceso a objetos de Amazon S3 para operaciones como GET, PUT y DELETE y obtener información sobre esas solicitudes.

El siguiente ejemplo de consulta de Amazon Athena muestra cómo obtener todas las solicitudes de objetos PUT para Amazon S3 desde un registro de acceso al servidor.

ejemplo — Mostrar todos los solicitantes que envían solicitudes de objetos PUT en un periodo determinado
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime FROM s3_access_logs_db WHERE operation='REST.PUT.OBJECT' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

El siguiente ejemplo de consulta de Amazon Athena muestra cómo obtener todas las solicitudes de objetos GET para Amazon S3 desde el registro de acceso al servidor.

ejemplo — Mostrar todos los solicitantes que envían solicitudes de objetos GET en un periodo determinado
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime FROM s3_access_logs_db WHERE operation='REST.GET.OBJECT' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

La siguiente consulta de ejemplo de Amazon Athena muestra cómo obtener todas las solicitudes anónimas realizadas a los buckets de S3 desde el registro de acceso al servidor.

ejemplo — Mostrar todos los solicitantes anónimos que hacen solicitudes a un bucket durante un periodo determinado
SELECT bucket_name, requester, remoteip, key, httpstatus, errorcode, requestdatetime FROM s3_access_logs_db.mybucket_logs WHERE requester IS NULL AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

La siguiente consulta de Amazon Athena muestra cómo identificar todas las solicitudes realizadas a los buckets de S3 que requerían una lista de control de acceso (ACL) para la autorización. Puede usar esta información para migrar esos permisos de ACL a las políticas de bucket adecuadas y desactivar las ACL. Una vez que haya creado estas políticas de bucket, puede desactivar las ACL de estos buckets. Para obtener más información acerca de la desactivación de las ACL, consulte Requisitos previos para desactivar las ACL.

ejemplo — Identificar todas las solicitudes que requerían una ACL para la autorización
SELECT bucket_name, requester, key, operation, aclrequired, requestdatetime FROM s3_access_logs_db WHERE aclrequired = 'Yes' AND parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2022-05-10:00:00:00','yyyy-MM-dd:HH:mm:ss') AND parse_datetime('2022-08-10:00:00:00','yyyy-MM-dd:HH:mm:ss')
nota
  • Puede modificar el intervalo de fechas según sea necesario.

  • Estos ejemplos de consulta también pueden ser útiles para la monitorización de la seguridad. Puede revisar los resultados de las llamadas a las operaciones PutObject o GetObject desde solicitantes o direcciones IP inesperados o no autorizados con el fin de identificar cualquier solicitud anónima que se realice a los buckets.

  • Esta consulta solo recupera información de la hora a la que se habilitó el registro.

  • Si utiliza registros de AWS CloudTrail, consulte Identificación del acceso a objetos S3 mediante CloudTrail.