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/
-
Abra la consola de Athena en https://console.aws.amazon.com/athena/
. -
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.
-
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
yBIGINT
son las propiedades del registro de acceso. Puede consultar estas propiedades en Athena. ParaLOCATION
, 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/
' -
En el panel de navegación, en Database (Base de datos), elija la base de datos.
-
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
oGetObject
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.