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

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

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

nota
  • Le recomendamos que utilice eventos de datos de AWS CloudTrail en lugar de los registros de acceso 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, puede requerir más recursos o tiempo para analizar los registros.

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.

nota

Para especificar una ubicación de Amazon S3 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 de S3, de la siguiente manera: s3://DOC-EXAMPLE-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 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. 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) 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://awsexamplebucket1-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 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.mybucket_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');
nota

A fin de reducir el tiempo que retiene el registro, puede crear una política de ciclo de vida de Amazon S3 para el bucket de registros de acceso al servidor. Configure la política de ciclo de vida para eliminar periódicamente los archivos de registro. Esto reduce la cantidad de datos que Athena analiza para cada consulta. Para obtener más información, consulte Configurar el ciclo de vida de 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

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 el registro de acceso al 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.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')
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/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 Amazon S3 AWS CloudTrail, consulte Identificación del acceso a objetos S3 mediante CloudTrail.