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.
Temas
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
utilizados en los siguientes ejemplos con su propia información.user input placeholders
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
/
Abra la consola de Athena en https://console.aws.amazon.com/athena/
. -
En el Editor de consultas, ejecute un comando similar al siguiente. Sustituya
por el nombre que desea asignar a la base de datos.s3_access_logs_db
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.
-
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
por el nombre que desea asignar a la tabla. Los valores con los tipos de datoss3_access_logs_db.mybucket_logs
STRING
yBIGINT
son las propiedades del registro de acceso. Puede consultar estas propiedades en Athena. ParaLOCATION
, 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/
' -
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 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
oGetObject
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.