Habilitación del registro de acceso al servidor de Amazon S3 - Amazon Simple Storage Service

Habilitación del registro de acceso al servidor de Amazon S3

El registro de acceso al servidor proporciona el historial detallado de las solicitudes que se realizan a un bucket de Amazon S3. Los registros de acceso al servidor resultan útiles para muchas aplicaciones. Por ejemplo, la información del registro de acceso puede ser útil en auditorías de acceso y seguridad. Esta información también puede ayudarle a conocer mejor su base de clientes y entender su factura de Amazon S3.

De forma predeterminada, Amazon S3 no recopila registros de acceso al servidor. Cuando activa la actividad de registro, Amazon S3 envía los registros de acceso de un bucket de origen a un bucket de destino que usted selecciona. El bucket de destino debe estar en la misma Región de AWS y Cuenta de AWS que el bucket de origen.

Una entrada de registro de acceso incluye detalles de las solicitudes realizadas a un bucket. Esta información puede incluir el tipo de solicitud, los recursos especificados en la solicitud y la hora y la fecha en que se procesó la solicitud. Para obtener más información acerca de los conceptos básicos de los registros, consulte Registro de solicitudes con registro de acceso al servidor.

importante
  • Habilitar el registro de acceso al servidor en un bucket de Amazon S3 ni incurre en ningún cargo adicional. Sin embargo, los archivos de registro que recibe del sistema acumularán los cargos usuales de almacenamiento. (Puede eliminar los registros en cualquier momento). No contemplamos los cargos de transferencia de datos por la entrega de los archivos de registro, pero sí aplicamos el cargo de la tasa normal de transferencia de datos por obtener acceso a los archivos de registro.

  • El bucket de destino no debe tener habilitado el registro de acceso al servidor. Puede enviar los registros a cualquier bucket de su propiedad que se encuentre en la misma región que el bucket de origen, incluido el propio bucket de origen. Sin embargo, enviar registros al bucket de origen provocará un bucle infinito de registros, por lo que no se recomienda. Para que la administración de registros sea más sencilla, le recomendamos que guarde los registros de acceso en un bucket distinto. Para obtener más información, consulte ¿Cómo habilito la entrega de registros?

  • Los buckets de S3 con Bloqueo de objetos de S3 habilitado no se pueden utilizar como buckets de destino para los registros de acceso al servidor. Su bucket de destino no debe tener una configuración de periodo de retención predeterminada.

  • El bucket de destino no debe tener activado Pago por solicitante.

  • Puede usar el cifrado predeterminado del bucket en el bucket de destino solo si se usa el cifrado del lado del servidor con claves administradas por Amazon S3 (SSE-S3), que usa el Estándar de cifrado avanzado de 256 bits (AES-256). No se admite el cifrado del servidor predeterminado con claves AWS Key Management Service (AWS KMS) (SSE-KMS).

Puede habilitar o desactivar el registro de acceso al servidor mediante la consola de Amazon S3, la API de Amazon S3, AWS Command Line Interface (AWS CLI) o los SDK de AWS.

Permisos para entrega de registros

Amazon S3 utiliza una cuenta especial de entrega de registros para escribir registros de acceso al servidor. Estos escritos están sujetos a las restricciones de control de acceso habituales. Para la entrega del registro de acceso, debe conceder a la entidad principal del servicio de registro acceso (logging.s3.amazonaws.com) a su bucket de destino.

Para conceder permisos a Amazon S3 para la entrega de registros, puede utilizar una política de bucket o listas de control de acceso (ACL) de bucket, según la configuración de S3 Object Ownership del bucket de destino. Sin embargo, le recomendamos que utilice una política de bucket en lugar de ACL.

Configuración de propietario del bucket obligatorio de S3 Object Ownership

Si el bucket de destino utiliza la configuración de propietario del bucket obligatorio de Object Ownership, las ACL se desactivan y ya no afectan a los permisos. En ese caso, debe actualizar la política de bucket para el bucket de destino para conceder acceso a la entidad principal del servicio de registro. No puede actualizar la ACL del bucket para conceder acceso al grupo de entrega de registros de S3. Tampoco puede incluir las concesiones de destino en su configuración de PutBucketLogging.

Para obtener información sobre la migración de las ACL de bucket existentes para la entrega de registros de acceso a una política de bucket, consulte Concesión de acceso al grupo de entrega de registros de S3 para el registro de acceso al servidor. Para obtener más información acerca de la propiedad de objetos, consulte Control de la propiedad de los objetos y desactivación de las ACL del bucket. Al crear buckets nuevos, las ACL están deshabilitadas de forma predeterminada.

Concesión de acceso mediante una política de bucket

Para conceder acceso mediante la política de bucket en el bucket de destino, actualice la política de bucket para conceder el permiso s3:PutObject a la entidad principal del servicio de registro. Si utiliza la consola de Amazon S3 para habilitar los registros de acceso al servidor, la consola actualiza automáticamente la política del bucket en el bucket destino para conceder este permiso a la entidad principal del servicio de registro. Si habilita el registro de acceso al servidor mediante programación, debe actualizar manualmente la política del bucket de destino para conceder acceso a la entidad principal del servicio de registro.

Para ver un ejemplo de una política de bucket que concede acceso a la entidad principal del servicio de registro, consulte Concesión de permisos a la entidad principal del servicio de registro mediante una política de bucket.

Concesión de acceso mediante ACL de bucket

También puede utilizar las ACL de bucket para conceder acceso para la entrega de registros de acceso. Agregue una entrada de concesión a la ACL del bucket que concede permisos WRITE y READ_ACP para el grupo entrega de registros de S3. Sin embargo, no se recomienda conceder acceso al grupo de entrega de registros de S3 mediante la ACL del bucket. Para obtener más información, consulte Control de la propiedad de los objetos y desactivación de las ACL del bucket. Para obtener información sobre la migración de las ACL de bucket existentes para la entrega de registros de acceso a una política de bucket, consulte Concesión de acceso al grupo de entrega de registros de S3 para el registro de acceso al servidor. Para ver un ejemplo de ACL que concede acceso a la entidad principal del servicio de registro, consulte Concesión de permisos al grupo de entrega de registros mediante una ACL de bucket.

Concesión de permisos a la entidad principal del servicio de registro mediante una política de bucket

Esta política de bucket de ejemplo concede el permiso s3:PutObject a la entidad principal del servicio de registro (logging.s3.amazonaws.com). Para utilizar esta política de bucket, reemplace user input placeholders por su propia información. En la siguiente política, DOC-EXAMPLE-DESTINATION-BUCKET es el bucket de destino donde se entregarán los registros de acceso al servidor y DOC-EXAMPLE-SOURCE-BUCKET es el bucket de origen. EXAMPLE-LOGGING-PREFIX es el prefijo de destino opcional que desea utilizar para sus objetos de registro. SOURCE-ACCOUNT-ID es la Cuenta de AWS que posee el bucket de origen.

nota

Si hay instrucciones Deny en su política de bucket, asegúrese de que no impidan que Amazon S3 envíe registros de acceso.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/EXAMPLE-LOGGING-PREFIX*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" }, "StringEquals": { "aws:SourceAccount": "SOURCE-ACCOUNT-ID" } } } ] }

Concesión de permisos al grupo de entrega de registros mediante una ACL de bucket

nota

Como práctica recomendada de seguridad, Amazon S3 desactiva las listas de control de acceso (ACL) de forma predeterminada en todos los buckets nuevos. Para obtener más información acerca de los permisos de ACL en la consola de Amazon S3, consulte Configuración de la ACL.

Aunque no recomendamos este método, puede conceder permisos al grupo de entrega de registros mediante una ACL de bucket. Sin embargo, si el bucket de destino utiliza la configuración de propietario del bucket obligatorio de Object Ownership, no se pueden configurar ACL de bucket u objeto. Tampoco puede incluir las concesiones de destino en su configuración de PutBucketLogging. En su lugar, debe utilizar una política de bucket para conceder acceso a la entidad principal del servicio de registro (logging.s3.amazonaws.com). Para obtener más información, consulte Permisos para entrega de registros.

En la ACL del bucket, el grupo entrega de registros se representa con la siguiente URL:

http://acs.amazonaws.com/groups/s3/LogDelivery

Para conceder los permisos WRITE y READ_ACP (lectura de ACL), agregue las siguientes concesiones a la ACL del bucket de destino.

<Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>READ_ACP</Permission> </Grant>

Para obtener ejemplos de cómo agregar concesiones de ACL mediante programación, consulte Configuración de la ACL.

importante

Al habilitar el registro de acceso al servidor de Amazon S3 mediante AWS CloudFormation en un bucket y utilizar las ACL para conceder acceso al grupo de entrega de registros de S3, también debe agregar AccessControl": "LogDeliveryWrite" en la plantilla de CloudFormation. Esta acción es importante porque puede otorgar esos permisos creando solo una ACL para el bucket, pero no puede crear ACL personalizadas para los buckets en CloudFormation. Solo puede usar ACL predefinidas con CloudFormation.

Para habilitar el registro de acceso al servidor

Utilice los siguientes procedimientos para habilitar el registro de acceso al servidor mediante la consola de Amazon S3, la API de REST de Amazon S3, los SDK de AWS y AWS CLI.

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista Buckets (Buckets), elija el nombre del bucket para el que desea activar el registro de acceso al servidor.

  3. Seleccione Properties (Propiedades).

  4. En la sección Server access logging (Registro de acceso al servidor), elija Edit (Editar).

  5. En Registro de acceso al servidor, seleccione Habilitar.

  6. En Bucket de destino, especifique un bucket y un prefijo opcional. Si especifica un prefijo, le recomendamos incluir una barra inclinada (/) después del prefijo para facilitar la búsqueda de los registros.

    nota

    Especificar un prefijo con una barra (/) facilita la localización de los objetos de registro. Por ejemplo, si especifica el valor del prefijo logs/, cada objeto de registro que crea Amazon S3 comienza con el prefijo logs/ en su clave de la siguiente manera:

    logs/2013-11-01-21-32-16-E568B2907131C0C0

    Si especifica el valor del prefijo logs, el objeto de registro aparece de la siguiente manera:

    logs2013-11-01-21-32-16-E568B2907131C0C0
  7. En Formato de clave de objeto de registro, realice una de las siguientes acciones:

    • Para elegir una partición no basada en fechas, elija [DestinationPrefix][YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString].

    • Para elegir una partición basada en fechas, elija [DestinationPrefix][SourceAccountId]/[SourceRegion]/[SourceBucket]/[YYYY]/[MM]/[DD]/[YYYY]-[MM]-[DD]-[hh]-[mm]-[ss]-[UniqueString] y luego Hora de evento de S3 u Hora de entrega de archivo de registro.

  8. Elija Guardar cambios.

    Cuando se habilita el registro de acceso al servidor en un bucket, la consola habilita los registros en el bucket de origen y actualiza la política de bucket para que el bucket de destino conceda el permiso s3:PutObject a la entidad principal del servicio de registro (logging.s3.amazonaws.com). Para obtener más información acerca de esta política de bucket, consulte Concesión de permisos a la entidad principal del servicio de registro mediante una política de bucket.

    Puede ver los registros en el bucket de destino. Después de habilitar el registro de acceso al servidor, la entrega de los registros al bucket de destino puede tardar unos horas. Para obtener más información acerca de cómo y cuándo se entregan los registros, consulte ¿Cómo se envían los registros?.

Para obtener más información, consulte Visualización de las propiedades para un bucket de S3.

Para habilitar los registros, envíe una solicitud PutBucketLogging para agregar la configuración de registros en el bucket de origen. La solicitud especifica el bucket de destino y, de forma opcional, el prefijo que se debe utilizar con todas las claves de objeto de registro.

En el siguiente ejemplo se identifica DOC-EXAMPLE-DESTINATION-BUCKET como el bucket de destino y logs/ como el prefijo.

<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> <LoggingEnabled> <TargetBucket>DOC-EXAMPLE-DESTINATION-BUCKET</TargetBucket> <TargetPrefix>logs/</TargetPrefix> </LoggingEnabled> </BucketLoggingStatus>

En el siguiente ejemplo se identifica DOC-EXAMPLE-DESTINATION-BUCKET como el bucket de destino, logs/ como el prefijo y EventTime como el formato de clave del objeto de registro.

<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> <LoggingEnabled> <TargetBucket>DOC-EXAMPLE-DESTINATION-BUCKET</TargetBucket> <TargetPrefix>logs/</TargetPrefix> <TargetObjectKeyFormat> <PartitionedPrefix> <PartitionDateSource>EventTime</PartitionDateSource> </PartitionedPrefix> </TargetObjectKeyFormat> </LoggingEnabled> </BucketLoggingStatus>

La cuenta entrega de archivos de registro de S3 escribe y posee los objetos de registro y el propietario del bucket tiene permisos completos sobre los objetos de registro. De forma opcional, puede utilizar concesiones de destino para conceder permisos a otros usuarios para que puedan acceder a los registros. Para obtener más información, consulte PutBucketLogging.

nota

Si el bucket de destino utiliza la configuración de propietario del bucket obligatorio de Object Ownership, no puede usar las concesiones de destino para conceder permisos a otros usuarios. Para conceder permisos a otros, puede utilizar la actualización de la política de bucket en el bucket de destino. Para obtener más información, consulte Permisos para entrega de registros.

Para recuperar la configuración de registro de un bucket, utilice la operación de la API GetBucketLogging.

Para eliminar la configuración de registros, debe enviar la solicitud PutBucketLogging con un BucketLoggingStatus vacío.

<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01"> </BucketLoggingStatus>

Para habilitar el registro en un bucket, puede utilizar la API de Amazon S3 o las bibliotecas de encapsulamiento de los SDK de AWS.

En los siguientes ejemplos se habilitan los registros en un bucket. Debe crear dos buckets, uno de origen y uno de destino. Los ejemplos actualizan primero la ACL del bucket en el bucket de destino. Conceden al grupo de envío de registros los permisos necesarios para escribir registros en el bucket de destino y, a continuación, habilitan los registros en el bucket de origen.

Estos ejemplos no funcionarán en buckets de destino que utilizan la configuración Aplicada al propietario del bucket obligatorio para la Propiedad de objetos.

Si el bucket de destino utiliza la configuración de propietario del bucket obligatorio de Propiedad de objetos, no se pueden configurar ACL de bucket u objeto. Tampoco puede incluir concesiones de destino en la configuración PutBucketLogging. Debe utilizar una política de bucket para conceder acceso a la entidad principal del servicio de registro (logging.s3.amazonaws.com). Para obtener más información, consulte Permisos para entrega de registros.

.NET
AWS SDK for .NET
nota

Hay más información en GitHub. Busque el ejemplo completo y aprenda a configurar y ejecutar en el Repositorio de ejemplos de código de AWS.

using System; using System.IO; using System.Threading.Tasks; using Amazon.S3; using Amazon.S3.Model; using Microsoft.Extensions.Configuration; /// <summary> /// This example shows how to enable logging on an Amazon Simple Storage /// Service (Amazon S3) bucket. You need to have two Amazon S3 buckets for /// this example. The first is the bucket for which you wish to enable /// logging, and the second is the location where you want to store the /// logs. /// </summary> public class ServerAccessLogging { private static IConfiguration _configuration = null!; public static async Task Main() { LoadConfig(); string bucketName = _configuration["BucketName"]; string logBucketName = _configuration["LogBucketName"]; string logObjectKeyPrefix = _configuration["LogObjectKeyPrefix"]; string accountId = _configuration["AccountId"]; // If the AWS Region defined for your default user is different // from the Region where your Amazon S3 bucket is located, // pass the Region name to the Amazon S3 client object's constructor. // For example: RegionEndpoint.USWest2 or RegionEndpoint.USEast2. IAmazonS3 client = new AmazonS3Client(); try { // Update bucket policy for target bucket to allow delivery of logs to it. await SetBucketPolicyToAllowLogDelivery( client, bucketName, logBucketName, logObjectKeyPrefix, accountId); // Enable logging on the source bucket. await EnableLoggingAsync( client, bucketName, logBucketName, logObjectKeyPrefix); } catch (AmazonS3Exception e) { Console.WriteLine($"Error: {e.Message}"); } } /// <summary> /// This method grants appropriate permissions for logging to the /// Amazon S3 bucket where the logs will be stored. /// </summary> /// <param name="client">The initialized Amazon S3 client which will be used /// to apply the bucket policy.</param> /// <param name="sourceBucketName">The name of the source bucket.</param> /// <param name="logBucketName">The name of the bucket where logging /// information will be stored.</param> /// <param name="logPrefix">The logging prefix where the logs should be delivered.</param> /// <param name="accountId">The account id of the account where the source bucket exists.</param> /// <returns>Async task.</returns> public static async Task SetBucketPolicyToAllowLogDelivery( IAmazonS3 client, string sourceBucketName, string logBucketName, string logPrefix, string accountId) { var resourceArn = @"""arn:aws:s3:::" + logBucketName + "/" + logPrefix + @"*"""; var newPolicy = @"{ ""Statement"":[{ ""Sid"": ""S3ServerAccessLogsPolicy"", ""Effect"": ""Allow"", ""Principal"": { ""Service"": ""logging.s3.amazonaws.com"" }, ""Action"": [""s3:PutObject""], ""Resource"": [" + resourceArn + @"], ""Condition"": { ""ArnLike"": { ""aws:SourceArn"": ""arn:aws:s3:::" + sourceBucketName + @""" }, ""StringEquals"": { ""aws:SourceAccount"": """ + accountId + @""" } } }] }"; Console.WriteLine($"The policy to apply to bucket {logBucketName} to enable logging:"); Console.WriteLine(newPolicy); PutBucketPolicyRequest putRequest = new PutBucketPolicyRequest { BucketName = logBucketName, Policy = newPolicy, }; await client.PutBucketPolicyAsync(putRequest); Console.WriteLine("Policy applied."); } /// <summary> /// This method enables logging for an Amazon S3 bucket. Logs will be stored /// in the bucket you selected for logging. Selected prefix /// will be prepended to each log object. /// </summary> /// <param name="client">The initialized Amazon S3 client which will be used /// to configure and apply logging to the selected Amazon S3 bucket.</param> /// <param name="bucketName">The name of the Amazon S3 bucket for which you /// wish to enable logging.</param> /// <param name="logBucketName">The name of the Amazon S3 bucket where logging /// information will be stored.</param> /// <param name="logObjectKeyPrefix">The prefix to prepend to each /// object key.</param> /// <returns>Async task.</returns> public static async Task EnableLoggingAsync( IAmazonS3 client, string bucketName, string logBucketName, string logObjectKeyPrefix) { Console.WriteLine($"Enabling logging for bucket {bucketName}."); var loggingConfig = new S3BucketLoggingConfig { TargetBucketName = logBucketName, TargetPrefix = logObjectKeyPrefix, }; var putBucketLoggingRequest = new PutBucketLoggingRequest { BucketName = bucketName, LoggingConfig = loggingConfig, }; await client.PutBucketLoggingAsync(putBucketLoggingRequest); Console.WriteLine($"Logging enabled."); } /// <summary> /// Loads configuration from settings files. /// </summary> public static void LoadConfig() { _configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("settings.json") // Load settings from .json file. .AddJsonFile("settings.local.json", true) // Optionally, load local settings. .Build(); } }
  • Para obtener información sobre la API, consulte PutBucketLogging en la Referencia de la API de AWS SDK for .NET.

Java
import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.BucketLoggingStatus; import software.amazon.awssdk.services.s3.model.LoggingEnabled; import software.amazon.awssdk.services.s3.model.PartitionedPrefix; import software.amazon.awssdk.services.s3.model.PutBucketLoggingRequest; import software.amazon.awssdk.services.s3.model.TargetObjectKeyFormat; // Class to set a bucket policy on a target S3 bucket and enable server access logging on a source S3 bucket. public class ServerAccessLogging { private static S3Client s3Client; public static void main(String[] args) { String sourceBucketName = "SOURCE-BUCKET"; String targetBucketName = "TARGET-BUCKET"; String sourceAccountId = "123456789012"; String targetPrefix = "logs/"; // Create S3 Client. s3Client = S3Client.builder(). region(Region.US_EAST_2) .build(); // Set a bucket policy on the target S3 bucket to enable server access logging by granting the // logging.s3.amazonaws.com principal permission to use the PutObject operation. ServerAccessLogging serverAccessLogging = new ServerAccessLogging(); serverAccessLogging.setTargetBucketPolicy(sourceAccountId, sourceBucketName, targetBucketName); // Enable server access logging on the source S3 bucket. serverAccessLogging.enableServerAccessLogging(sourceBucketName, targetBucketName, targetPrefix); } // Function to set a bucket policy on the target S3 bucket to enable server access logging by granting the // logging.s3.amazonaws.com principal permission to use the PutObject operation. public void setTargetBucketPolicy(String sourceAccountId, String sourceBucketName, String targetBucketName) { String policy = "{\n" + " \"Version\": \"2012-10-17\",\n" + " \"Statement\": [\n" + " {\n" + " \"Sid\": \"S3ServerAccessLogsPolicy\",\n" + " \"Effect\": \"Allow\",\n" + " \"Principal\": {\"Service\": \"logging.s3.amazonaws.com\"},\n" + " \"Action\": [\n" + " \"s3:PutObject\"\n" + " ],\n" + " \"Resource\": \"arn:aws:s3:::" + targetBucketName + "/*\",\n" + " \"Condition\": {\n" + " \"ArnLike\": {\n" + " \"aws:SourceArn\": \"arn:aws:s3:::" + sourceBucketName + "\"\n" + " },\n" + " \"StringEquals\": {\n" + " \"aws:SourceAccount\": \"" + sourceAccountId + "\"\n" + " }\n" + " }\n" + " }\n" + " ]\n" + "}"; s3Client.putBucketPolicy(b -> b.bucket(targetBucketName).policy(policy)); } // Function to enable server access logging on the source S3 bucket. public void enableServerAccessLogging(String sourceBucketName, String targetBucketName, String targetPrefix) { TargetObjectKeyFormat targetObjectKeyFormat = TargetObjectKeyFormat.builder() .partitionedPrefix(PartitionedPrefix.builder().partitionDateSource("EventTime").build()) .build(); LoggingEnabled loggingEnabled = LoggingEnabled.builder() .targetBucket(targetBucketName) .targetPrefix(targetPrefix) .targetObjectKeyFormat(targetObjectKeyFormat) .build(); BucketLoggingStatus bucketLoggingStatus = BucketLoggingStatus.builder() .loggingEnabled(loggingEnabled) .build(); s3Client.putBucketLogging(PutBucketLoggingRequest.builder() .bucket(sourceBucketName) .bucketLoggingStatus(bucketLoggingStatus) .build()); } }

Recomendamos que cree un bucket de registro dedicado en cada Región de AWS en la que tenga buckets de S3. A continuación, guarde los registros de acceso de Amazon S3 en ese bucket de S3. Para obtener más información y ejemplos, consulte put-bucket-logging en la Referencia de la AWS CLI.

Si el bucket de destino utiliza la configuración de propietario del bucket obligatorio de Propiedad de objetos, no se pueden configurar ACL de bucket u objeto. Tampoco puede incluir concesiones de destino en la configuración PutBucketLogging. Debe utilizar una política de bucket para conceder acceso a la entidad principal del servicio de registro (logging.s3.amazonaws.com). Para obtener más información, consulte Permisos para entrega de registros.

ejemplo — Habilitar registros de acceso con cinco buckets en dos regiones

Para este ejemplo, suponga que tiene los cinco buckets siguientes:

  • 1-DOC-EXAMPLE-BUCKET1-us-east-1

  • 2-DOC-EXAMPLE-BUCKET1-us-east-1

  • 3-DOC-EXAMPLE-BUCKET1-us-east-1

  • 1-DOC-EXAMPLE-BUCKET1-us-west-2

  • 2-DOC-EXAMPLE-BUCKET1-us-west-2

nota

El último paso del siguiente procedimiento proporciona ejemplos de scripts bash que puede utilizar para crear sus buckets de registro y habilitar el registro de acceso al servidor en estos buckets. Para usar esos scripts, debe crear los archivos policy.json y logging.json, tal y como se describe en el siguiente procedimiento.

  1. Cree dos bucket de destino de registro en las regiones Oeste de EE. UU. (Oregón) y Este de EE. UU. (Norte de Virginia) y asígneles los siguientes nombres:

    • DOC-EXAMPLE-BUCKET1-logs-us-east-1

    • DOC-EXAMPLE-BUCKET1-logs-us-west-2

  2. Más adelante en estos pasos, habilitará el registro de acceso al servidor de la siguiente manera:

    • 1-DOC-EXAMPLE-BUCKET1-us-east-1 registra en el bucket de S3 DOC-EXAMPLE-BUCKET1-logs-us-east-1 con el prefijo 1-DOC-EXAMPLE-BUCKET1-us-east-1

    • 2-DOC-EXAMPLE-BUCKET1-us-east-1 registra en el bucket de S3 DOC-EXAMPLE-BUCKET1-logs-us-east-1 con el prefijo 2-DOC-EXAMPLE-BUCKET1-us-east-1

    • 3-DOC-EXAMPLE-BUCKET1-us-east-1 registra en el bucket de S3 DOC-EXAMPLE-BUCKET1-logs-us-east-1 con el prefijo 3-DOC-EXAMPLE-BUCKET1-us-east-1

    • 1-DOC-EXAMPLE-BUCKET1-us-west-2 registra en el bucket de S3 DOC-EXAMPLE-BUCKET1-logs-us-west-2 con el prefijo 1-DOC-EXAMPLE-BUCKET1-us-west-2

    • 2-DOC-EXAMPLE-BUCKET1-us-west-2 registra en el bucket de S3 DOC-EXAMPLE-BUCKET1-logs-us-west-2 con el prefijo 2-DOC-EXAMPLE-BUCKET1-us-west-2

  3. Para cada bucket de registro de destino, conceda permisos para la entrega de registros de acceso al servidor mediante una ACL de bucket o una política de bucket:

    • Actualizar la política de bucket (recomendado): para conceder permisos a la entidad principal del servicio de registro, utilice el siguiente comando put-bucket-policy. Reemplace DOC-EXAMPLE-DESTINATION-BUCKET-logs con el nombre del bucket de destino.

      aws s3api put-bucket-policy --bucket DOC-EXAMPLE-DESTINATION-BUCKET-logs --policy file://policy.json

      Policy.json es un documento JSON en la carpeta actual que contiene la siguiente política de bucket. Para utilizar esta política de bucket, reemplace user input placeholders por su propia información. En la siguiente política, DOC-EXAMPLE-DESTINATION-BUCKET-logs es el bucket de destino donde se entregarán los registros de acceso al servidor y DOC-EXAMPLE-SOURCE-BUCKET es el bucket de origen. SOURCE-ACCOUNT-ID es la Cuenta de AWS que posee el bucket de origen.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "S3ServerAccessLogsPolicy", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET-logs/*", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" }, "StringEquals": { "aws:SourceAccount": "SOURCE-ACCOUNT-ID" } } } ] }
    • Actualizar la ACL del bucket: para conceder permisos al grupo de entrega de registros de S3, utilice el siguiente comando put-bucket-acl. Reemplace DOC-EXAMPLE-DESTINATION-BUCKET-logs con el nombre del bucket de destino.

      aws s3api put-bucket-acl --bucket DOC-EXAMPLE-DESTINATION-BUCKET-logs --grant-write URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://acs.amazonaws.com/groups/s3/LogDelivery
  4. A continuación, cree un archivo logging.json que contenga la configuración de registro (según uno de los tres ejemplos siguientes). Tras crear el archivo logging.json, puede aplicar la configuración de registro mediante el siguiente comando put-bucket-logging. Reemplace DOC-EXAMPLE-DESTINATION-BUCKET-logs con el nombre del bucket de destino.

    aws s3api put-bucket-logging --bucket DOC-EXAMPLE-DESTINATION-BUCKET-logs --bucket-logging-status file://logging.json
    nota

    En lugar de usar este comando put-bucket-logging para aplicar la configuración de registro en cada bucket de destino, puede usar uno de los scripts bash que se proporcionan en el siguiente paso. Para usar esos scripts, debe crear los archivos policy.json y logging.json, tal y como se describe en este procedimiento.

    El archivo logging.json es un documento JSON en la carpeta actual que contiene la configuración de su registro. Si un bucket de destino utiliza la configuración de propietario del bucket obligatorio de Object Ownership, la configuración de registro no puede contener concesiones de destino. Para obtener más información, consulte Permisos para entrega de registros.

    ejemplo – logging.json sin concesiones de destino

    El siguiente archivo logging.json de ejemplo no contiene concesiones de destino. Por lo tanto, puede aplicar esta configuración a un bucket de destino que utilice la configuración Aplicada al propietario del bucket para Propiedad de objetos.

    { "LoggingEnabled": { "TargetBucket": "DOC-EXAMPLE-DESTINATION-BUCKET-logs", "TargetPrefix": "DOC-EXAMPLE-DESTINATION-BUCKET/" } }
    ejemplo – logging.json con subvenciones de destino

    El siguiente archivo logging.json de ejemplo contiene concesiones de destino.

    Si el bucket de destino utiliza la configuración de propietario del bucket obligatorio de propiedad de objetos, no puede incluir las concesiones de destino en la configuración PutBucketLogging. Para obtener más información, consulte Permisos para entrega de registros.

    { "LoggingEnabled": { "TargetBucket": "DOC-EXAMPLE-DESTINATION-BUCKET-logs", "TargetPrefix": "DOC-EXAMPLE-DESTINATION-BUCKET/", "TargetGrants": [ { "Grantee": { "Type": "AmazonCustomerByEmail", "EmailAddress": "user@example.com" }, "Permission": "FULL_CONTROL" } ] } }
    ejemplo – logging.json con el formato de clave del objeto de registro establecido en la hora del evento de S3

    El siguiente archivo logging.json cambia el formato de clave del objeto de registro a la hora del evento de S3. Para obtener más información acerca de la configuración del formato de clave de objeto de registro, consulte ¿Cómo habilito la entrega de registros?.

    { "LoggingEnabled": { "TargetBucket": "DOC-EXAMPLE-DESTINATION-BUCKET-logs", "TargetPrefix": "DOC-EXAMPLE-DESTINATION-BUCKET/", "TargetObjectKeyFormat": { "PartitionedPrefix": { "PartitionDateSource": "EventTime" } } } }
  5. Utilice uno de los siguientes scripts bash para agregar el registro de acceso a todos los buckets de la cuenta. Sustituya DOC-EXAMPLE-DESTINATION-BUCKET-logs por el nombre de su bucket de destino y sustituya us-west-2 por el nombre de la región en la que se encuentran sus buckets.

    nota

    Este script solo funciona si todos los buckets están en la misma región. Si tiene buckets en multirregiones, debe ajustar el script.

    ejemplo – Conceder acceso con políticas de bucket y agregar registros para los buckets de la cuenta
    loggingBucket='DOC-EXAMPLE-DESTINATION-BUCKET-logs' region='us-west-2' # Create the logging bucket. aws s3 mb s3://$loggingBucket --region $region aws s3api put-bucket-policy --bucket $loggingBucket --policy file://policy.json # List the buckets in this account. buckets="$(aws s3 ls | awk '{print $3}')" # Put a bucket logging configuration on each bucket. for bucket in $buckets do # This if statement excludes the logging bucket. if [ "$bucket" != "$loggingBucket" ] ; then continue; fi printf '{ "LoggingEnabled": { "TargetBucket": "%s", "TargetPrefix": "%s/" } }' "$loggingBucket" "$bucket" > logging.json aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status file://logging.json echo "$bucket done" done rm logging.json echo "Complete"
    ejemplo – Conceder acceso con ACL de bucket y agregar registros para los buckets de la cuenta
    loggingBucket='DOC-EXAMPLE-DESTINATION-BUCKET-logs' region='us-west-2' # Create the logging bucket. aws s3 mb s3://$loggingBucket --region $region aws s3api put-bucket-acl --bucket $loggingBucket --grant-write URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://acs.amazonaws.com/groups/s3/LogDelivery # List the buckets in this account. buckets="$(aws s3 ls | awk '{print $3}')" # Put a bucket logging configuration on each bucket. for bucket in $buckets do # This if statement excludes the logging bucket. if [ "$bucket" != "$loggingBucket" ] ; then continue; fi printf '{ "LoggingEnabled": { "TargetBucket": "%s", "TargetPrefix": "%s/" } }' "$loggingBucket" "$bucket" > logging.json aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status file://logging.json echo "$bucket done" done rm logging.json echo "Complete"

Verificación de la configuración de los registros de acceso al servidor

Después de habilitar el registro de acceso al servidor, siga los pasos siguientes:

  • Acceda al bucket de destino y compruebe que se están entregando los archivos de registro. Después de configurar los registros de acceso, es posible que todas las solicitudes tarden más de una hora en registrarse y entregarse correctamente. También puede verificar automáticamente la entrega de registros mediante las métricas de solicitud de Amazon S3 y configurar las alarmas de Amazon CloudWatch para estas métricas. Para obtener más información, consulte Monitorización de métricas con Amazon CloudWatch.

  • Compruebe que puede abrir y leer el contenido de los archivos de registro.

Para obtener información sobre la solución de problemas del registro de acceso al servidor, consulte Solucionar problemas de registro de acceso al servidor.