Análisis de los registros de acceso a los buckets con Amazon Athena en Lightsail - Amazon Lightsail

Análisis de los registros de acceso a los buckets con Amazon Athena en Lightsail

En esta guía, le mostramos cómo identificar las solicitudes a un bucket con los registros de acceso. Para obtener más información, consulte Registros de acceso al bucket.

Contenido

Consultar los registros de acceso para solicitudes mediante Amazon Athena

Puede utilizar Amazon Athena para consultar e identificar las solicitudes a un bucket en los registros de acceso.

Lightsail almacena los registros de acceso como objetos en un bucket de Lightsail. Suele ser más fácil utilizar una herramienta que pueda analizar los registros. Athena es compatible con el análisis de objetos y se puede utilizar para consultar los registros de acceso.

Ejemplo

El siguiente ejemplo muestra cómo puede consultar los registros de acceso al servidor de buckets en Amazon Athena.

nota

Para especificar la ubicación de un bucket en una consulta de Athena, debe formatear el nombre del bucket de destino y el prefijo de destino donde los registros se entregan como un URI S3, de la siguiente manera: 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.

    create database bucket_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. 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, ingrese el bucket y la ruta del prefijo como se indicó anteriormente.

    CREATE EXTERNAL TABLE `s3_access_logs_db.amzn-s3-demo-bucket_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) 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 del servidor del bucket.

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.amzn-s3-demo-bucket_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.amzn-s3-demo-bucket_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.amzn-s3-demo-bucket_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 por una dirección IP específica en un periodo de tiempo específico

SELECT SUM(bytessent) AS uploadTotal, SUM(objectsize) AS downloadTotal, SUM(bytessent + objectsize) AS Total FROM s3_access_logs_db.amzn-s3-demo-bucket_logs WHERE RemoteIP='1.2.3.4' AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z') BETWEEN parse_datetime('2017-06-01','yyyy-MM-dd') AND parse_datetime('2017-07-01','yyyy-MM-dd');

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

Puede usar consultas en registros de acceso para identificar las solicitudes de acceso a objetos, 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 un bucket desde el registro de acceso del servidor.

Ejemplo: mostrar todos los solicitantes que envían solicitudes de objetos PUT en un periodo determinado

SELECT Bucket, 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, 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 en un periodo determinado

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime FROM s3_access_logs_db.amzn-s3-demo-bucket_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')
nota
  • Puede modificar el intervalo de fechas para adaptarlo a sus necesidades.

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