

# Retención de varias versiones de objetos con Control de versiones de S3
<a name="Versioning"></a>

El control de versiones de Amazon S3 es una forma de conservar diversas variantes de un objeto en el mismo bucket. Puede utilizar S3 Versioning para conservar, recuperar y restaurar todas las versiones de los objetos almacenados en sus buckets. Con el control de versiones, se puede recuperar fácilmente de acciones no deseadas del usuario y de errores de la aplicación. Luego de habilitar el control de versiones para un bucket, si Amazon S3 recibe varias solicitudes de escritura para el mismo objeto simultáneamente, almacena todos los objetos.

Los buckets con el control de versiones habilitado le permiten recuperar objetos ante su eliminación o sobrescritura accidental. Por ejemplo, si elimina un objeto, Amazon S3 inserta un marcador de eliminación en lugar de eliminarlo de forma permanente. El marcador de eliminación se convierte en la versión actual del objeto. Si sobrescribe un objeto, se creará una nueva versión del objeto en el bucket. Siempre puede restaurar la versión anterior. Para obtener más información, consulte [Eliminar versiones de objetos de un bucket con control de versiones habilitado](DeletingObjectVersions.md). 

De forma predeterminada, S3 Versioning está deshabilitado en los buckets y debe habilitarlo explícitamente. Para obtener más información, consulte [Habilitar el control de versiones en buckets](manage-versioning-examples.md).

**nota**  
La API SOAP no admite Control de versiones de S3. La compatibilidad con SOAP por HTTP está obsoleta, pero aún se encuentra disponible con HTTPS. Las características nuevas de Amazon S3 no son compatibles con SOAP.
Se aplican tasas normales de Amazon S3 por cada versión de un objeto almacenado y transferido. Cada versión de un objeto es el objeto en sí, no se limita a ser una diferenciación de la versión anterior. Por tanto, si tiene tres versiones de un objeto almacenado, se le cobrará por tres objetos. 

## Buckets sin control de versiones, habilitados para control de versiones y suspendidos para control de versiones
<a name="versioning-states"></a>

Los buckets pueden estar en uno de los tres estados: 
+ No versionado (predeterminado)
+ Control de versiones: habilitado
+ Control de versiones: suspendido

Habilita y suspende el control de versiones en el nivel de bucket. Tras habilitar el control de versiones en un bucket, nunca puede volver a un estado sin control de versiones. Pero puede *suspender* el control de versiones en ese bucket.

El estado del control de versiones se aplica a todos los objetos (nunca solo a una parte) del bucket. Cuando habilita el control de versiones en un bucket, todos los objetos nuevos tienen una versión y se les asigna un identificador de versión único. Los objetos que ya existían en el bucket en el momento en que se habilitó el control de versiones *siempre* tendrán una versión y se les asignará un identificador de versión único cuando sean modificados por futuras solicitudes. Tenga en cuenta lo siguiente: 
+ Los objetos que se almacenan en un bucket antes de establecer el estado del control de versiones tienen el ID de versión `null`. Al habilitar el control de versiones, los objetos existentes en el bucket no cambian. Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Para obtener más información, consulte [Trabajar con objetos en un bucket con control de versiones habilitado](manage-objects-versioned-bucket.md).
+ El propietario del bucket (o cualquier usuario con los permisos adecuados) puede suspender el control de versiones para dejar de acumular versiones de objetos. Al suspender el control de versiones, los objetos existentes en el bucket no cambian. Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Para obtener más información, consulte [Trabajar con objetos en un bucket con control de versiones suspendido](VersionSuspendedBehavior.md).

## Uso de S3 Versioning con S3 Lifecycle
<a name="versioning-lifecycle"></a>

Para personalizar su enfoque de retención de datos y controlar los costos de almacenamiento, utilice el control de versiones de los objetos con S3 Lifecycle. Para obtener más información, consulte [Administración del ciclo de vida de los objetos](object-lifecycle-mgmt.md). Para obtener más información acerca de cómo crear configuraciones de ciclo de vida de S3 mediante la Consola de administración de AWS, la AWS CLI, los SDK de AWS o la API de REST, consulte [Establecimiento de una configuración de S3 Lifecycle en un bucket](how-to-set-lifecycle-configuration-intro.md).

**importante**  
Si cuenta con una configuración de ciclo de vida de vencimiento de objetos en el bucket sin control de versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control de versiones, debe agregar una configuración de vencimiento no actual. La configuración de vencimiento de ciclo de vida no actual administra las eliminaciones de las versiones de objetos no actuales en el bucket habilitado para el control de versiones. (Un bucket habilitado para el control de versiones mantiene una versión actual del objeto y cero o más versiones no actuales del objeto). Para obtener más información, consulte [Establecimiento de una configuración de S3 Lifecycle en un bucket](how-to-set-lifecycle-configuration-intro.md).

Para obtener información sobre cómo trabajar con S3 Versioning, consulte los siguientes temas.

**Topics**
+ [Buckets sin control de versiones, habilitados para control de versiones y suspendidos para control de versiones](#versioning-states)
+ [Uso de S3 Versioning con S3 Lifecycle](#versioning-lifecycle)
+ [Cómo funciona S3 Versioning](versioning-workflows.md)
+ [Habilitar el control de versiones en buckets](manage-versioning-examples.md)
+ [Configurar la eliminación de MFA](MultiFactorAuthenticationDelete.md)
+ [Trabajar con objetos en un bucket con control de versiones habilitado](manage-objects-versioned-bucket.md)
+ [Trabajar con objetos en un bucket con control de versiones suspendido](VersionSuspendedBehavior.md)
+ [Solución de problemas de control de versiones](troubleshooting-versioning.md)

# Cómo funciona S3 Versioning
<a name="versioning-workflows"></a>

Puede utilizar S3 Versioning para mantener varias versiones de un objeto en un bucket para poder restaurar objetos que se eliminan o sobrescriben accidentalmente. Por ejemplo, si aplica el control de versiones de S3 a un bucket, se producen los siguientes cambios: 
+ Si elimina un objeto, en lugar de eliminarlo permanentemente, Amazon S3 inserta un marcador de eliminación, que se convierte en la versión del objeto actual. Luego, puede restaurar la versión anterior. Para obtener más información, consulte [Eliminar versiones de objetos de un bucket con control de versiones habilitado](DeletingObjectVersions.md).
+ Si sobrescribe un objeto, Amazon S3 añade una nueva versión del objeto en el bucket. La versión anterior permanece en el bucket y pasa a ser una versión no actual. Puede restaurar la versión anterior.

**nota**  
Se aplican tasas normales de Amazon S3 por cada versión de un objeto almacenado y transferido. Cada versión de un objeto es el objeto en sí, no se limita a ser una diferenciación de la versión anterior. Por tanto, si tiene tres versiones de un objeto almacenado, se le cobrará por tres objetos.

Cada bucket de S3 que crea cuenta con un subrecurso de *control de versiones* asociado. (Para obtener más información, consulte [Opciones de configuración de buckets de uso general](UsingBucket.md#bucket-config-options-intro).) De forma predeterminada, su bucket *no tendrá control de versiones* y, por tanto, el subrecurso de control de versiones almacena una configuración de control de versiones vacía.

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

Para habilitar el control de versiones, puede enviar una solicitud a Amazon S3 con una configuración de control de versiones que incluya un estado `Enabled`. 

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>
```

Para suspender el control de versiones, puede configurar el valor de estado como `Suspended`.

**nota**  
Al habilitar el control de versiones en un bucket por primera vez, es posible que el cambio se propague por completo en un instante. Mientras este cambio se propaga, es posible que se produzcan errores `HTTP 404 NoSuchKey` intermitentes en las solicitudes de objetos creados o actualizados después de habilitar el control de versiones. Para emitir operaciones de escritura (`PUT` o `DELETE`) en los objetos del bucket, se recomienda que espere 15 minutos después de habilitar el control de versiones. 

El propietario del bucket y todos los usuarios autorizados de AWS Identity and Access Management (IAM) pueden habilitar el control de versiones. El bucket es propiedad de la Cuenta de AWS que creó el bucket. Para obtener más información sobre los permisos, consulte [Administración de identidades y accesos para Amazon S3](security-iam.md).

Para obtener más información acerca de cómo habilitar y desactivar el control de versiones de S3 mediante la Consola de administración de AWS, AWS Command Line Interface (AWS CLI) o la API de REST, consulte [Habilitar el control de versiones en buckets](manage-versioning-examples.md).

**Topics**
+ [ID de versión](#version-ids)
+ [Flujos de trabajo del control de versiones](#versioning-workflows-examples)

## ID de versión
<a name="version-ids"></a>

Si habilita el control de versiones para un bucket, Amazon S3 genera automáticamente un ID de versión único para el objeto que se almacena. En un bucket, por ejemplo, puede tener dos objetos con la misma clave (nombre de objeto) pero ID de versión diferentes, como `photo.gif` (versión 111111) y `photo.gif` (versión 121212).

![\[Diagrama que muestra un bucket con control de versiones habilitado que tiene dos objetos con la misma clave pero diferentes ID de versión.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_Enabled.png)


Cada objeto tiene un ID de versión, independientemente de si S3 Versioning está habilitado o no. Si no ha habilitado S3 Versioning, Amazon S3 configura el valor del ID de versión en `null`. Si S3 Versioning está activado, Amazon S3 asigna un valor de ID de versión para el objeto. Este valor distingue dicho objeto de otras versiones de la misma clave.

Cuando se habilita S3 Versioning en un bucket existente, los objetos que ya están almacenados en el bucket no se modifican. Sus ID de versión (`null`), el contenido y los permisos siguen siendo los mismos. Después de habilitar Control de versiones de S3, cada objeto que se agrega al bucket obtiene un ID de versión, que lo distingue de otras versiones de la misma clave. 

Solo Amazon S3 genera ID de versión y no se pueden editar. Los ID de versión son cadenas opacas unicode, codificadas en UTF-8, listas para URL que no tienen más de 1024 bytes de longitud. A continuación se muestra un ejemplo:

`3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo`

**nota**  
Para mayor simplicidad, los otros ejemplos de este tema utilizan ID mucho más cortos.



## Flujos de trabajo del control de versiones
<a name="versioning-workflows-examples"></a>

Cuando realiza una operación `PUT` para un objeto en un bucket con control de versiones habilitado, la versión no actual no se sobrescribirá. Como se muestra en el siguiente gráfico, cuando una nueva versión de `photo.gif` se somete a una operación `PUT` en un bucket que ya contiene un objeto con el mismo nombre, se produce el siguiente comportamiento:
+ El objeto original (ID = 111111) permanece en el bucket.
+ Amazon S3 genera un nuevo identificador de versión (121212) y agrega esta versión más reciente del objeto al bucket.

![\[Diagrama que muestra cómo funciona el control de versiones de S3 cuando realiza una operación PUT en un objeto en un bucket con control de versiones habilitado.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled3.png)


Con esta funcionalidad, puede recuperar una versión anterior de un objeto si un objeto se ha sobrescrito o eliminado accidentalmente.

Cuando realiza una operación `DELETE` en un objeto, todas las versiones permanecen en el bucket y Amazon S3 inserta un marcador de eliminación, como se muestra en el siguiente gráfico.

![\[Ilustración que muestra la inserción de un marcador de eliminación.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)


El marcador de eliminación se convierte en la versión actual del objeto. De forma predeterminada, las solicitudes `GET` recuperarán la versión almacenada más recientemente. Realizar una solicitud `GET Object` cuando la versión actual es un marcador de eliminación devuelve un error `404 Not Found`, como se muestra en el siguiente gráfico.

![\[Ilustración que muestra una llamada GetObject a un marcador de eliminación que devuelve un error 404 (no encontrado).\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


Sin embargo, puede realizar una operación `GET` en una versión no actual de un objeto especificando su ID de versión. En el siguiente gráfico, se realiza una operación `GET` sobre una versión de objeto específica, 111111. Amazon S3 devuelve la versión del objeto aunque no sea la versión actual.

Para obtener más información, consulte [Recuperar versiones de objetos de un bucket habilitado para el control de versiones](RetrievingObjectVersions.md).

![\[Diagrama que muestra cómo funciona el control de versiones de S3 cuando realiza una operación GET en una versión no actual en un bucket con control de versiones habilitado.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GET_Versioned3.png)


Puede eliminar permanentemente un objeto especificando la versión que quiera eliminar. Solo el propietario de un bucket de Amazon S3 o un usuario de IAM autorizado puede eliminar permanentemente una versión. Si la operación `DELETE` especifica el `versionId`, la versión del objeto se elimina permanentemente y Amazon S3 no inserta un marcador de eliminación.

![\[Diagrama que muestra cómo DELETE versionId elimina permanentemente una versión de objeto específica.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


Se pueden agregar factores adicionales de seguridad al configurar un bucket para habilitar la eliminación de autenticación multifactor (MFA). Cuando habilita la eliminación de MFA en un bucket, el propietario del bucket debe incluir dos formas de autenticación en cualquier solicitud para eliminar una versión o cambiar el estado de control de versiones del bucket. Para obtener más información, consulte [Configurar la eliminación de MFA](MultiFactorAuthenticationDelete.md).

### ¿Cuándo se crean las nuevas versiones de un objeto?
<a name="versioning-workflows-new-versions"></a>

Las nuevas versiones de objetos se crean solo cuando usted `PUT` un nuevo objeto. Tenga en cuenta que ciertas acciones como `CopyObject` funcionan mediante la implementación de una operación `PUT`.

Algunas acciones que modifican el objeto actual no crean una nueva versión ya que no `PUT` un objeto nuevo. Esto incluye acciones como cambiar las etiquetas de un objeto. 

**importante**  
Si detecta un aumento significativo en el número de respuestas de HTTP 503 (Servicio no disponible) recibidas para solicitudes `PUT` o `DELETE` de Amazon S3 a objetos en un bucket de Amazon S3 con Control de versiones de S3 habilitado, puede que tenga uno o varios objetos en el bucket para los que habrá millones de versiones. Para obtener más información, consulte la sección Control de versiones de S3 de [Solución de problemas de control de versiones](troubleshooting-versioning.md).

# Habilitar el control de versiones en buckets
<a name="manage-versioning-examples"></a>

Utilice S3 Versioning para mantener varias versiones de un objeto en un bucket. En esta sección, se proporcionan ejemplos de cómo habilitar el control de versiones en un bucket mediante la consola, la API de REST, los SDK de AWS y AWS Command Line Interface (AWS CLI). 

**nota**  
Después de habilitar el control de versiones en un bucket por primera vez, es posible que el cambio tarde unos 15 minutos en propagarse en todo el sistema de S3. Durante este tiempo, las solicitudes `GET` de objetos creados o actualizados después de habilitar el control de versiones pueden provocar errores `HTTP 404 NoSuchKey`. Recomendamos esperar 15 minutos después de habilitar el control de versiones antes de realizar operaciones de escritura (`PUT` o `DELETE`) en los objetos del bucket. Este periodo de espera ayuda a evitar posibles problemas con la visibilidad de los objetos y el seguimiento de versiones.

Para obtener más información sobre el control de versiones de S3, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md). Para obtener información sobre cómo trabajar con objetos que se encuentran en buckets con control de versiones habilitado, consulte [Trabajar con objetos en un bucket con control de versiones habilitado](manage-objects-versioned-bucket.md).

Para obtener más información sobre cómo utilizar el control de versiones de S3 para proteger los datos, consulte el [Tutorial: Protecting data on Amazon S3 against accidental deletion or application bugs using S3 Versioning, S3 Object Lock, and S3 Replication](https://aws.amazon.com/getting-started/hands-on/protect-data-on-amazon-s3/?ref=docs_gateway/amazons3/manage-versioning-examples.html) (Protección de los datos en Amazon S3 contra la eliminación accidental o los errores en la aplicación mediante el control de versiones de S3, S3 Object Lock y la Replicación de S3).

Cada bucket de S3 que crea cuenta con un subrecurso de *control de versiones* asociado. (Para obtener más información, consulte [Opciones de configuración de buckets de uso general](UsingBucket.md#bucket-config-options-intro).) De forma predeterminada, su bucket *no tendrá control de versiones* y, por tanto, el subrecurso de control de versiones almacena una configuración de control de versiones vacía.

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

Para habilitar el control de versiones, puede enviar una solicitud a Amazon S3 con una configuración de control de versiones que incluya un estado. 

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>Enabled</Status> 
</VersioningConfiguration>
```

Para suspender el control de versiones, puede configurar el valor de estado como `Suspended`.

El propietario del bucket y todos los usuarios autorizados pueden habilitar el control de versiones. El propietario del bucket es la Cuenta de AWS que creó el bucket (la cuenta raíz). Para obtener más información sobre los permisos, consulte [Administración de identidades y accesos para Amazon S3](security-iam.md).

En las siguientes secciones, se proporcionan más detalles sobre cómo habilitar el control de versiones de S3 a través de la consola, la AWS CLI y los SDK de AWS.

## Uso de la consola de S3
<a name="enable-versioning"></a>

Siga estos pasos para utilizar la Consola de administración de AWS a fin de habilitar el control de versiones en un bucket de S3.

**Habilitación o deshabilitación del control de versiones en un bucket de uso general de S3**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de uso general**.

1. En la lista de buckets, elija el nombre del bucket para el que desea activar el control de versiones.

1. Seleccione **Propiedades**.

1. En **Control de versiones del bucket**, elija **Editar**.

1. Elija **Suspender** o **Habilitar** y, a continuación, elija **Guardar cambios**.

**nota**  
Puede utilizar la autenticación multifactor (MFA) de AWS con el control de versiones. Cuando utiliza MFA con el control de versiones, debe proporcionar las claves de acceso de su Cuenta de AWS y un código válido del dispositivo MFA de la cuenta para eliminar de manera permanente una versión de un objeto o suspender o volver a activar el control de versiones.   
Para utilizar la MFA con el control de versiones, habilite `MFA Delete`. Sin embargo, no puede habilitar `MFA Delete` mediante la Consola de administración de AWS. Para ello debe utilizar AWS Command Line Interface (AWS CLI) o la API. Para obtener más información, consulte [Configurar la eliminación de MFA](MultiFactorAuthenticationDelete.md).

## Mediante AWS CLI
<a name="manage-versioning-examples-cli"></a>

En el ejemplo siguiente se habilita el control de versiones en un bucket de uso general de S3. 

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled
```

En el siguiente ejemplo se habilita el control de versiones de S3 y la eliminación de la autenticación multifactor (MFA) en un bucket para un dispositivo MFA físico. En el caso de los dispositivos MFA físicos, en el parámetro `--mfa`, pase una concatenación del número de serie del dispositivo MFA, un carácter de espacio y el valor que se muestra en el dispositivo de autenticación.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"
```

En el siguiente ejemplo se habilita el control de versiones de S3 y la eliminación de la autenticación multifactor (MFA) en un bucket para un dispositivo MFA virtual. En el caso de los dispositivos MFA virtuales, en el parámetro `--mfa`, pase una concatenación del ARN del dispositivo MFA, un carácter de espacio y el valor que se muestra en el dispositivo de autenticación.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
```

**nota**  
El uso de la eliminación de MFA requiere un dispositivo de autenticación física o virtual aprobado. Para obtener más información sobre el uso de eliminación de MFA en Amazon S3, consulte [Configurar la eliminación de MFA](MultiFactorAuthenticationDelete.md).

Para obtener más información sobre cómo habilitar el control de versiones mediante la AWS CLI, consulte [put-bucket-versioning](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-versioning.html) en la *Referencia de comandos de AWS CLI*.

## Uso de los AWS SDK
<a name="manage-versioning-examples-sdk"></a>

Mediante los siguientes ejemplos, se habilita el control de versiones en un bucket y, a continuación, se recupera el estado de control de versiones mediante AWS SDK para Java y AWS SDK para .NET. Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/).

------
#### [ .NET ]

Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte [Introducción al SDK de AWS para .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) en la *Guía para desarrolladores del SDK de AWS para .NET*. 

```
using System;
using Amazon.S3;
using Amazon.S3.Model;

namespace s3.amazon.com.rproxy.goskope.com.docsamples
{
    class BucketVersioningConfiguration
    {
        static string bucketName = "*** bucket name ***";

        public static void Main(string[] args)
        {
            using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
            {
                try
                {
                    EnableVersioningOnBucket(client);
                    string bucketVersioningStatus = RetrieveBucketVersioningConfiguration(client);
                }
                catch (AmazonS3Exception amazonS3Exception)
                {
                    if (amazonS3Exception.ErrorCode != null &&
                        (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                        ||
                        amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
                    {
                        Console.WriteLine("Check the provided AWS Credentials.");
                        Console.WriteLine(
                        "To sign up for service, go to http://aws.amazon.com/s3");
                    }
                    else
                    {
                        Console.WriteLine(
                         "Error occurred. Message:'{0}' when listing objects",
                         amazonS3Exception.Message);
                    }
                }
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }

        static void EnableVersioningOnBucket(IAmazonS3 client)
        {

                PutBucketVersioningRequest request = new PutBucketVersioningRequest
                {
                    BucketName = bucketName,
                    VersioningConfig = new S3BucketVersioningConfig 
                    {
                        Status = VersionStatus.Enabled
                    }
                };

                PutBucketVersioningResponse response = client.PutBucketVersioning(request);
        }


        static string RetrieveBucketVersioningConfiguration(IAmazonS3 client)
        {
                GetBucketVersioningRequest request = new GetBucketVersioningRequest
                {
                    BucketName = bucketName
                };
 
                GetBucketVersioningResponse response = client.GetBucketVersioning(request);
                return response.VersioningConfig.Status;
            }
    }
}
```

------
#### [ Java ]

Para obtener instrucciones sobre cómo crear y probar una muestra funcional, consulte [Introducción](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) en la Guía para desarrolladores de AWS SDK para Java.

```
import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;

public class BucketVersioningConfigurationExample {
    public static String bucketName = "*** bucket name ***"; 
    public static AmazonS3Client s3Client;

    public static void main(String[] args) throws IOException {
        s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
        s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
        try {

            // 1. Enable versioning on the bucket.
        	BucketVersioningConfiguration configuration = 
        			new BucketVersioningConfiguration().withStatus("Enabled");
            
			SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest = 
					new SetBucketVersioningConfigurationRequest(bucketName,configuration);
			
			s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);
			
			// 2. Get bucket versioning configuration information.
			BucketVersioningConfiguration conf = s3Client.getBucketVersioningConfiguration(bucketName);
			 System.out.println("bucket versioning configuration status:    " + conf.getStatus());

        } catch (AmazonS3Exception amazonS3Exception) {
            System.out.format("An Amazon S3 error occurred. Exception: %s", amazonS3Exception.toString());
        } catch (Exception ex) {
            System.out.format("Exception: %s", ex.toString());
        }        
    }
}
```

------
#### [ Python ]

Con el siguiente ejemplo de código de Python, se crea un bucket de Amazon S3, se habilita el control de versiones y se configura un ciclo de vida que establece el vencimiento de las versiones de objetos no actuales después de 7 días.

```
def create_versioned_bucket(bucket_name, prefix):
    """
    Creates an Amazon S3 bucket, enables it for versioning, and configures a lifecycle
    that expires noncurrent object versions after 7 days.

    Adding a lifecycle configuration to a versioned bucket is a best practice.
    It helps prevent objects in the bucket from accumulating a large number of
    noncurrent versions, which can slow down request performance.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket_name: The name of the bucket to create.
    :param prefix: Identifies which objects are automatically expired under the
                   configured lifecycle rules.
    :return: The newly created bucket.
    """
    try:
        bucket = s3.create_bucket(
            Bucket=bucket_name,
            CreateBucketConfiguration={
                "LocationConstraint": s3.meta.client.meta.region_name
            },
        )
        logger.info("Created bucket %s.", bucket.name)
    except ClientError as error:
        if error.response["Error"]["Code"] == "BucketAlreadyOwnedByYou":
            logger.warning("Bucket %s already exists! Using it.", bucket_name)
            bucket = s3.Bucket(bucket_name)
        else:
            logger.exception("Couldn't create bucket %s.", bucket_name)
            raise

    try:
        bucket.Versioning().enable()
        logger.info("Enabled versioning on bucket %s.", bucket.name)
    except ClientError:
        logger.exception("Couldn't enable versioning on bucket %s.", bucket.name)
        raise

    try:
        expiration = 7
        bucket.LifecycleConfiguration().put(
            LifecycleConfiguration={
                "Rules": [
                    {
                        "Status": "Enabled",
                        "Prefix": prefix,
                        "NoncurrentVersionExpiration": {"NoncurrentDays": expiration},
                    }
                ]
            }
        )
        logger.info(
            "Configured lifecycle to expire noncurrent versions after %s days "
            "on bucket %s.",
            expiration,
            bucket.name,
        )
    except ClientError as error:
        logger.warning(
            "Couldn't configure lifecycle on bucket %s because %s. "
            "Continuing anyway.",
            bucket.name,
            error,
        )

    return bucket
```

------

# Configurar la eliminación de MFA
<a name="MultiFactorAuthenticationDelete"></a>

Cuando se trabaja con S3 Versioning en buckets de Amazon S3, puede agregar de forma opcional otra capa de seguridad al configurar un bucket para habilitar la *eliminación con MFA (autenticación multifactor)*. Si lo hace, el propietario del bucket debe incluir dos formas de autenticación en cualquier solicitud para eliminar una versión o cambiar el estado de control de versiones del bucket.

La eliminación de MFA precisa una autenticación adicional para cualquiera de las siguientes operaciones:
+ Cambiar el estado de control de versiones del bucket
+ Eliminar de forma permanente la versión de un objeto

La eliminación MFA requiere dos formas combinadas de autenticación:
+ Sus credenciales de seguridad
+ La concatenación de un número de serie válido, un espacio y el código de seis dígitos que se muestra en un dispositivo de autenticación autorizado

La eliminación de MFA refuerza la seguridad en caso de que, por ejemplo, sus credenciales de seguridad estén en riesgo. La eliminación de MFA puede ayudar a prevenir las eliminaciones accidentales de buckets ya que requiere que el usuario que inicia la acción de eliminación pruebe la posesión física de un dispositivo MFA con un código MFA y agregue una capa adicional de fricción y seguridad a la acción de eliminación.

Para identificar buckets que tienen habilitada la eliminación de MFA, puede utilizar las métricas de Lente de almacenamiento de S3. Lente de almacenamiento de S3 es una función de análisis de almacenamiento en la nube que puede utilizar para obtener visibilidad en toda la organización sobre el uso y la actividad del almacenamiento de objetos. Para obtener más información, consulte [Evaluación de la actividad y el uso de almacenamiento con S3 Storage Lens](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens?icmpid=docs_s3_user_guide_MultiFactorAuthenticationDelete.html). Para obtener una lista completa de las métricas, consulte el [Glosario de métricas de Lente de almacenamiento de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_MultiFactorAuthenticationDelete.html).

El propietario del bucket, la Cuenta de AWS que creó el bucket (cuenta raíz) y todos los usuarios autorizados pueden habilitar el control de versiones. Sin embargo, solo el propietario del bucket (cuenta raíz) puede habilitar la eliminación de MFA. Para obtener más información, consulte [Protección del acceso a AWS utilizando MFA](https://aws.amazon.com/blogs/security/securing-access-to-aws-using-mfa-part-3/) en el blog de seguridad de AWS.

**nota**  
Para utilizar la eliminación con MFA con el control de versiones, habilite `MFA Delete`. Sin embargo, no puede habilitar `MFA Delete` mediante la Consola de administración de AWS. Para ello debe utilizar AWS Command Line Interface (AWS CLI) o la API.   
Para obtener ejemplos de cómo utilizar la eliminación con MFA con el control de versiones, consulte la sección de ejemplos en el tema [Habilitar el control de versiones en buckets](manage-versioning-examples.md).  
No se puede utilizar la eliminación de MFA con configuraciones del ciclo de vida. Para obtener más información sobre las configuraciones del ciclo de vida y cómo interactúan con otras configuraciones, consulte [Interacción de S3 Lifecycle con otras configuraciones de bucket](lifecycle-and-other-bucket-config.md).

Para habilitar o deshabilitar la eliminación de MFA, utilice la misma API que utiliza para configurar el control de versiones en un bucket. Amazon S3 almacena la configuración de la eliminación de MFA en el mismo subrecurso de *control de versiones* que almacena el estado del control de versiones del bucket.

```
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
  <Status>VersioningState</Status>
  <MfaDelete>MfaDeleteState</MfaDelete>  
</VersioningConfiguration>
```

Para usar la eliminación de MFA, puede usar hardware o un dispositivo virtual de MFA para generar un código de autenticación. En el siguiente ejemplo se muestra un código de autenticación generado en un dispositivo de hardware.

![\[Un ejemplo de un código de autenticación generado en un dispositivo de hardware.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/MFADevice.png)


La eliminación de MFA y el acceso a la API protegido con MFA son características cuyo objetivo es proporcionar protección en distintos escenarios. Puede configurar la eliminación de MFA en un bucket para garantizar que los datos en el bucket no se puedan eliminar por accidente. El acceso a la API protegido por MFA se usa para aplicar otro factor de autenticación (código de MFA) al obtener acceso a recursos de Amazon S3 confidenciales. Se puede requerir que todas las operaciones relacionadas con estos recursos de Amazon S3 se realicen utilizando credenciales temporales creadas con MFA. Para ver un ejemplo, consulte [Exigir MFA](example-bucket-policies.md#example-bucket-policies-MFA). 

Para obtener más información acerca de cómo comprar y activar un dispositivo de autenticación, consulte [Multi-factor authentication](https://aws.amazon.com/iam/details/mfa/).

## Para habilitar el control de versiones de S3 y configurar la eliminación de MFA
<a name="enable-versioning-mfa-delete"></a>

### Uso de AWS CLI
<a name="enable-versioning-mfa-delete-cli"></a>

El número de serie es el número que identifica de forma exclusiva el dispositivo MFA. En el caso de los dispositivos MFA físicos, este es el número de serie exclusivo que se proporciona con el dispositivo. En el caso de los dispositivos MFA virtuales, el número de serie es el ARN del dispositivo. Para utilizar los comandos siguientes, sustituya los *marcadores de posición de entrada del usuario* con su información.

En el siguiente ejemplo se habilita el control de versiones de S3 y la eliminación de la autenticación multifactor (MFA) en un bucket para un dispositivo MFA físico. En el caso de los dispositivos MFA físicos, en el parámetro `--mfa`, pase una concatenación del número de serie del dispositivo MFA, un carácter de espacio y el valor que se muestra en el dispositivo de autenticación.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "SerialNumber 123456"
```

En el siguiente ejemplo se habilita el control de versiones de S3 y la eliminación de la autenticación multifactor (MFA) en un bucket para un dispositivo MFA virtual. En el caso de los dispositivos MFA virtuales, en el parámetro `--mfa`, pase una concatenación del ARN del dispositivo MFA, un carácter de espacio y el valor que se muestra en el dispositivo de autenticación.

```
aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket1 --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa "arn:aws:iam::account-id:mfa/root-account-mfa-device 123789"
```

Para obtener más información, consulte el artículo de AWS rePost [¿Cómo activo la eliminación de MFA en mi bucket de Amazon S3?](https://repost.aws/knowledge-center/s3-bucket-mfa-delete)

### Uso de la API de REST
<a name="enable-versioning-mfa-delete-rest-api"></a>

Para obtener más información sobre la especificación de la eliminación de MFA mediante la API de REST de Amazon S3, consulte la [referencia de la API PutBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html) *de Amazon Simple Storage Service*.

# Trabajar con objetos en un bucket con control de versiones habilitado
<a name="manage-objects-versioned-bucket"></a>

Los objetos que se almacenan en un bucket de Amazon S3 antes de establecer el estado del control de versiones tienen un ID de versión de `null`. Al habilitar el control de versiones, los objetos existentes en el bucket no cambian. Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras.

**Transición de versiones de objetos**  
Puede definir reglas de configuración de ciclo de vida para objetos que tengan un ciclo de vida bien definido para realizar la transición de versiones de un objeto a la clase de almacenamiento S3 Glacier Flexible Retrieval en un momento específico del periodo de vida del objeto. Para obtener más información, consulte [Administración del ciclo de vida de los objetos](object-lifecycle-mgmt.md).

Los temas de esta sección explican varias operaciones con objetos en un bucket con control de versiones habilitado. Para obtener más información sobre el control de versiones, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).

**Topics**
+ [Agregar objetos a buckets con control de versiones habilitado](AddingObjectstoVersioningEnabledBuckets.md)
+ [Mostrar objetos en un bucket con control de versiones habilitado](list-obj-version-enabled-bucket.md)
+ [Recuperar versiones de objetos de un bucket habilitado para el control de versiones](RetrievingObjectVersions.md)
+ [Eliminar versiones de objetos de un bucket con control de versiones habilitado](DeletingObjectVersions.md)
+ [Configurar permisos de objeto con control de versiones](VersionedObjectPermissionsandACLs.md)

# Agregar objetos a buckets con control de versiones habilitado
<a name="AddingObjectstoVersioningEnabledBuckets"></a>

Al habilitar el control de versiones en un bucket, Amazon S3 agrega automáticamente un ID de versión exclusivo a todos los objetos almacenados (con `PUT`, `POST` o `CopyObject`) en el bucket. 

En el siguiente gráfico se muestra que Amazon S3 agrega un ID de versión exclusivo a un objeto cuando se agrega a un bucket con control de versiones activado. 

![\[Ilustración que muestra un ID de versión exclusivo para un objeto cuando se pone en un bucket con control de versiones habilitado.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_PUT_versionEnabled.png)


**nota**  
Los valores del ID de versión que asigna Amazon S3 son seguros para URL (se pueden usar como parte de un URI).

Para obtener más información sobre el control de versiones, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md). Puede agregar versiones de objetos a un bucket habilitado para el control de versiones mediante la consola, los SDK de AWS y la API de REST.

## Uso de la consola de
<a name="add-obj-versioning-enabled-bucket-console"></a>

Para obtener instrucciones, consulte [Carga de objetos](upload-objects.md). 

## Uso de los AWS SDK
<a name="add-obj-versioning-enabled-bucket-sdk"></a>

Para ver ejemplos de cómo cargar objetos con los SDK de AWS para Java, .NET y PHP, consulte [Carga de objetos](upload-objects.md). Los ejemplos para cargar objetos en buckets sin control de versiones y con control de versiones activado son iguales, aunque en el caso de los buckets con control de versiones activado, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor nulo. 

Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/). 

## Uso de la API de REST
<a name="add-obj-versioning-enabled-bucket-rest"></a>

**Agregar objetos a buckets con control de versiones habilitado**

1. Habilite el control de versiones en un bucket con una solicitud `PutBucketVersioning`.

   Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html) en la *Referencia de la API de Amazon Simple Storage Service*.

1. Envíe una solicitud `PUT`, `POST` o `CopyObject` para almacenar un objeto en el bucket.

Al agregar un objeto a un bucket con control de versiones activado, Amazon S3 devuelve el ID de versión del objeto en el `x-amz-version-id` encabezado de respuesta, por ejemplo:

```
1. x-amz-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY
```

# Mostrar objetos en un bucket con control de versiones habilitado
<a name="list-obj-version-enabled-bucket"></a>

En esta sección se presenta un ejemplo de cómo listar versiones de un objeto en un bucket con control de versiones habilitado. Amazon S3 almacena la información de versión de un objeto en el subrecurso de *versiones* asociado con el bucket. Para obtener más información, consulte [Opciones de configuración de buckets de uso general](UsingBucket.md#bucket-config-options-intro). Para enumerar los objetos de un bucket con control de versiones activado, necesita el permiso `ListBucketVersions`.

## Uso de la consola de S3
<a name="view-object-versions"></a>

Siga estos pasos para utilizar la consola de Amazon S3 a fin de ver las diferentes versiones de un objeto.

**Para ver múltiples versiones de un objeto**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En la lista **Buckets** (Buckets), elija el nombre del bucket que contiene el objeto.

1. Para ver una lista de las versiones de los objetos en el bucket, elija el modificador **Show versions** (Mostrar versiones). 

   Para cada versión de objeto, la consola muestra un ID de versión único, la fecha y la hora en que se creó la versión del objeto, y otras propiedades. (Los objetos almacenados en un bucket antes de establecer el estado del control de versiones tienen el ID de versión **null (nulo)**).

   Para listar los objetos sin las versiones, elija el modificador **List versions (Enumerar versiones)** .

También puede ver, descargar y eliminar las versiones de los objetos en el panel de información general de objetos de la consola. Para obtener más información, consulte [Visualización de propiedades de objeto en la consola de Amazon S3](view-object-properties.md).

**nota**  
 Para acceder a versiones de objetos anteriores a 300 versiones, debe usar la AWS CLI o la URL del objeto.

**importante**  
Solo puede anular la eliminación de un objeto si se ha eliminado en su última versión (la más reciente). No puede anular la eliminación de una versión anterior de un objeto que se haya eliminado. Para obtener más información, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).

## Uso de los AWS SDK
<a name="list-obj-version-enabled-bucket-sdk-examples"></a>

Los ejemplos en esta sección muestran cómo recuperar un listado de objetos de un bucket con control de versiones habilitado. Cada solicitud devuelve hasta 1000 versiones, a menos que especifique un número más bajo. Si el bucket tiene más versiones que ese límite, tendrá que enviar varias solicitudes para recuperar la lista de todas las versiones. Este proceso de devolución de resultados en "páginas" se llama *paginación*.

Para mostrar cómo funciona la paginación, los ejemplos limitan cada respuesta a dos versiones de objetos. Después de recuperar la primera página de resultados, cada ejemplo realiza una comprobación para determinar si se truncó la lista de la versión. Si fue así, el ejemplo continúa recuperando páginas hasta que se hayan recuperado todas las versiones. 

**nota**  
El siguiente ejemplo también funciona con un bucket que no tiene habilitado el control de versiones u objetos que no tienen versiones individuales. En esos casos, Amazon S3 devuelve un listado de objetos con un ID de versión `null`.

 Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/). 

------
#### [ Java ]

Para obtener instrucciones sobre cómo crear y probar una muestra funcional, consulte [Introducción](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) en la Guía para desarrolladores de AWS SDK para Java.

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListVersionsRequest;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;

public class ListKeysVersioningEnabledBucket {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Retrieve the list of versions. If the bucket contains more versions
            // than the specified maximum number of results, Amazon S3 returns
            // one page of results per request.
            ListVersionsRequest request = new ListVersionsRequest()
                    .withBucketName(bucketName)
                    .withMaxResults(2);
            VersionListing versionListing = s3Client.listVersions(request);
            int numVersions = 0, numPages = 0;
            while (true) {
                numPages++;
                for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) {
                    System.out.printf("Retrieved object %s, version %s\n",
                            objectSummary.getKey(),
                            objectSummary.getVersionId());
                    numVersions++;
                }
                // Check whether there are more pages of versions to retrieve. If
                // there are, retrieve them. Otherwise, exit the loop.
                if (versionListing.isTruncated()) {
                    versionListing = s3Client.listNextBatchOfVersions(versionListing);
                } else {
                    break;
                }
            }
            System.out.println(numVersions + " object versions retrieved in " + numPages + " pages");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte [Introducción al SDK de AWS para .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) en la *Guía para desarrolladores del SDK de AWS para .NET*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ListObjectsVersioningEnabledBucketTest
    {
        static string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main(string[] args)
        {
            s3Client = new AmazonS3Client(bucketRegion);
            GetObjectListWithAllVersionsAsync().Wait();
        }

        static async Task GetObjectListWithAllVersionsAsync()
        {
            try
            {
                ListVersionsRequest request = new ListVersionsRequest()
                {
                    BucketName = bucketName,
                    // You can optionally specify key name prefix in the request
                    // if you want list of object versions of a specific object.

                    // For this example we limit response to return list of 2 versions.
                    MaxKeys = 2
                };
                do
                {
                    ListVersionsResponse response = await s3Client.ListVersionsAsync(request); 
                    // Process response.
                    foreach (S3ObjectVersion entry in response.Versions)
                    {
                        Console.WriteLine("key = {0} size = {1}",
                            entry.Key, entry.Size);
                    }

                    // If response is truncated, set the marker to get the next 
                    // set of keys.
                    if (response.IsTruncated)
                    {
                        request.KeyMarker = response.NextKeyMarker;
                        request.VersionIdMarker = response.NextVersionIdMarker;
                    }
                    else
                    {
                        request = null;
                    }
                } while (request != null);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------

## Uso de la API de REST
<a name="ListingtheObjectsinaVersioningEnabledBucket"></a>

**Example — Listar todas las versiones de objetos en un bucket**  
Para enumerar todas las versiones de todos los objetos de un bucket, use el subrecurso `versions` en una solicitud `GET Bucket`. Amazon S3 solo puede recuperar un máximo de 1000 objetos, y cada versión del objeto cuenta como un objeto. Por tanto, si un bucket contiene dos claves (por ejemplo: `photo.gif` y `picture.jpg`), la primera clave tiene 990 versiones y la segunda tiene 400 versiones, una única solicitud recuperaría las 990 versiones de `photo.gif` y solo las 10 versiones más recientes de `picture.jpg`.  
Amazon S3 devuelve las versiones de objetos en el orden en el que se almacenaron y devuelve las almacenadas más recientemente primero.  
En una solicitud `GET Bucket`, incluya el subrecurso `versions`.  

```
1. GET /?versions HTTP/1.1
2. Host: bucketName.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 +0000
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

**Example — Recuperar todas las versiones de una clave**  
 Para recuperar un subconjunto de las versiones de un objeto, use los parámetros de la solicitud Bucket `GET Bucket`. Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html).   

1. Establezca el `prefix` parámetro en la clave del objeto que quiera recuperar.

1. Envíe una solicitud `GET Bucket` con el subrecurso `versions` y `prefix`.

   `GET /?versions&prefix=objectName HTTP/1.1`

**Example — Recuperar objetos mediante un prefijo**  
En el siguiente ejemplo se recuperan objetos cuya clave es o comienza por `myObject`.  

```
1. GET /?versions&prefix=myObject HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```
Puede usar los otros parámetros de solicitud para recuperar un subconjunto de todas las versiones del objeto. Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) en la *Referencia de la API de Amazon Simple Storage Service*.

**Example — Recuperar un listado de objetos adicionales si la respuesta está truncada**  
Si el número de objetos que se pueden devolver con una solicitud `GET` supera el valor de `max-keys`, la respuesta contendrá `<isTruncated>true</isTruncated>` e incluirá la primera clave (en `NextKeyMarker`) y el primer ID de versión (en `NextVersionIdMarker`) que se ajusten a la solicitud, pero no se hayan devuelto. Puede usar esos valores como posición de inicio en una solicitud subsiguiente para recuperar los objetos adicionales que se ajusten a la solicitud `GET`.   
Puede usar el siguiente proceso para recuperar objetos adicionales que se ajusten a la solicitud `GET Bucket versions` original desde un bucket. Para obtener más información sobre `key-marker`, `version-id-marker`, `NextKeyMarker` y `NextVersionIdMarker`, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) en la *Referencia de la API de Amazon Simple Storage Service*.  
Las siguientes son respuestas adicionales que satisfacen la solicitud `GET` original:  
+ Establezca el valor de `key-marker` de acuerdo con la clave devuelta en `NextKeyMarker` en la respuesta anterior.
+ Establezca el valor de `version-id-marker` de acuerdo con el ID de versión devuelto en `NextVersionIdMarker` en la respuesta anterior.
+ Envíe una solicitud `GET Bucket versions` con el subrecurso `key-marker` y `version-id-marker`.

**Example — Recuperar objetos que comienzan con una clave y un ID de versión específicos**  

```
1. GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

## Uso de AWS CLI
<a name="list-obj-version-enabled-bucket-cli"></a>

El siguiente comando devuelve los metadatos de todas las versiones de los objetos de un bucket. 

```
aws s3api list-object-versions --bucket amzn-s3-demo-bucket1
```

Para obtener más información sobre `list-object-versions`, consulte [https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html) en la *Referencia de los comandos de AWS CLI*.

# Recuperar versiones de objetos de un bucket habilitado para el control de versiones
<a name="RetrievingObjectVersions"></a>

El control de versiones en Amazon S3 es una forma de mantener varias variantes de un objeto en el mismo bucket. Una solicitud `GET` sencilla recupera la versión actual de un objeto. El siguiente gráfico muestra cómo `GET` devuelve la versión actual del objeto, `photo.gif`.

![\[Ilustración que muestra cómo GET devuelve la versión actual del objeto.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


Para recuperar una versión específica, debe especificar su ID de versión. El siguiente gráfico muestra cómo una solicitud `GET versionId` devuelve la versión especificada del objeto (no necesariamente la actual).

![\[Ilustración que muestra cómo una solicitud GET versionId devuelve la versión especificada del objeto.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


Puede recuperar versiones de objetos en Amazon S3 mediante la consola, los SDK de AWS o la API de REST.

**nota**  
 Para acceder a versiones de objetos anteriores a 300 versiones, debe usar la CLI de AWS o la URL del objeto.

## Uso de la consola de S3
<a name="retrieving-object-versions"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En la lista **Buckets (Buckets)**, elija el nombre del bucket que contiene el objeto.

1. En la lista **Objects (Objetos)**, elija el nombre del objeto.

1. Elija **Versions (Versiones)**.

   Amazon S3 muestra todas las versiones del objeto.

1. Active la casilla de verificación situada junto al **ID de versión** de las versiones que desea recuperar.

1. Elija **(Actions) Acciones**, elija **Download (Descargar)** y guarde el objeto.

También puede ver, descargar y eliminar las versiones de los objetos en el panel de información general de objetos. Para obtener más información, consulte [Visualización de propiedades de objeto en la consola de Amazon S3](view-object-properties.md).

**importante**  
Solo puede anular la eliminación de un objeto si se ha eliminado en su última versión (la más reciente). No puede anular la eliminación de una versión anterior de un objeto que se haya eliminado. Para obtener más información, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).

## Uso de los AWS SDK
<a name="retrieve-obj-version-sdks"></a>

Los ejemplos para cargar objetos en buckets sin control de versiones y habilitados para el control de versiones son los mismos. Sin embargo, para los buckets habilitados para el control de versiones, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor nulo.

Para obtener ejemplos de la descarga de objetos mediante los SDK de AWS para Java, .NET y PHP, consulte [Descarga de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html).

Para ver ejemplos de cómo mostrar la versión de los objetos mediante los SDK de AWS para .NET y Rust, consulte [Listar la versión de los objetos en un bucket de Amazon S3](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html).

## Uso de la API de REST
<a name="retrieve-obj-version-rest"></a>

**Para recuperar una versión de objeto específica:**

1. Establezca el parámetro `versionId` según el ID de la versión del objeto que quiera recuperar.

1. Envíe una solicitud `GET Object versionId`.

**Example — Recuperar un objeto con control de versiones**  
La siguiente solicitud recupera la versión `L4kqtJlcpXroDTDmpUMLUo` de `my-image.jpg`.  

```
1. GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Solo se pueden recuperar los metadatos de un objeto (no el contenido). Para obtener información, consulte [Recuperar los metadatos de una versión de un objeto](RetMetaOfObjVersion.md).

Para obtener información sobre cómo restaurar una versión de objeto anterior, consulte [Restaurar versiones anteriores](RestoringPreviousVersions.md).

# Recuperar los metadatos de una versión de un objeto
<a name="RetMetaOfObjVersion"></a>

Si solo quiere recuperar los metadatos de un objeto (y no su contenido), puede usar la operación `HEAD`. De forma predeterminada, obtendrá los metadatos de la versión más reciente. Para recuperar los metadatos de una versión de objeto específica, debe especificar su ID de versión.

**Para recuperar los metadatos de una versión de objeto:**

1. Establezca el parámetro `versionId` según el ID de la versión del objeto cuyos metadatos quiera recuperar.

1. Envíe una solicitud `HEAD Object versionId`.

**Example — Recuperar los metadatos de un objeto con control de versiones**  
La siguiente solicitud recupera los metadatos de la versión `3HL4kqCxf3vjVBH40Nrjfkd` de `my-image.jpg`.  

```
1. HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

A continuación se muestra una respuesta de ejemplo.

```
 1. HTTP/1.1 200 OK
 2. x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
 3. x-amz-request-id: 318BC8BC143432E5
 4. x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
 5. Date: Wed, 28 Oct 2009 22:32:00 GMT
 6. Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
 7. ETag: "fba9dede5f27731c9771645a39863328"
 8. Content-Length: 434234
 9. Content-Type: text/plain
10. Connection: close
11. Server: AmazonS3
```

# Restaurar versiones anteriores
<a name="RestoringPreviousVersions"></a>

Se puede utilizar el control de versiones para recuperar versiones anteriores de un objeto. Existen dos enfoques para hacerlo:
+ Copie una versión anterior del objeto en el mismo bucket.

  El objeto copiado se convierte en la versión actual del mismo, y se conservan todas las versiones del objeto.
+ Elimine permanentemente la versión actual del objeto.

  Al eliminar la versión actual del objeto, en efecto, estará convirtiendo la versión anterior en la versión actual del mismo.

Dado que se conservan todas las versiones de los objetos, puede hacer que cualquier versión sea la versión actual copiando una versión específica del objeto en el mismo bucket. En el siguiente gráfico, el objeto de origen (ID=111111) se copia en el mismo bucket. Amazon S3 facilita un nuevo ID (88778877) y se convierte en la versión actual del objeto. Por tanto, el bucket contendrá tanto la versión original del objeto (111111) como su copia (88778877). Para obtener más información acerca de cómo obtener una versión anterior y, a continuación, cargarla para convertirla en la versión actual, consulte [Recuperación de versiones de objetos de un bucket habilitado para el control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html) y [Cargar objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html).

![\[Ilustración que muestra la copia de una versión específica de un objeto en el mismo bucket para convertirla en la versión actual.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_COPY2.png)


Un subsiguiente `GET` recupera la versión 88778877.

En el siguiente gráfico se muestra cómo eliminar la versión actual (121212) de un objeto, lo que deja la versión anterior (111111) como objeto actual. Para obtener más información acerca de cómo eliminar un objeto, consulte [Supresión de un solo objeto](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html).

![\[Ilustración que muestra cómo al eliminar la versión actual de un objeto se deja la versión anterior como objeto actual.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


Un subsiguiente `GET` recupera la versión 111111.

**nota**  
Para restaurar las versiones de los objetos en lotes, puede [utilizar la operación `CopyObject`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html). Mediante la operación `CopyObject`, se copia cada objeto especificado en el manifiesto. Sin embargo, tenga en cuenta que los objetos no se copian necesariamente en el mismo orden en el que aparecen en el manifiesto. Para los buckets con versiones, si es importante conservar el orden de versiones actual/no actual, primero debe copiar todas las versiones no actuales. Luego, una vez finalizado el primer trabajo, copie las versiones actuales en un trabajo posterior.

## Restaurar versiones anteriores de objetos
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

Para obtener más orientación sobre la restauración de objetos eliminados, consulte [How can I retrieve an Amazon S3 object that was deleted in a versioning-enabled bucket?](https://repost.aws/knowledge-center/s3-undelete-configuration) en el Centro de conocimientos de AWS re:Post.

### Uso de la consola de S3
<a name="retrieving-object-versions"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En la lista **Buckets (Buckets)**, elija el nombre del bucket que contiene el objeto.

1. En la lista **Objects (Objetos)**, elija el nombre del objeto.

1. Elija **Versions (Versiones)**.

   Amazon S3 muestra todas las versiones del objeto.

1. Active la casilla de verificación situada junto al **ID de versión** de las versiones que desea recuperar.

1. Elija **(Actions) Acciones**, elija **Download (Descargar)** y guarde el objeto.

También puede ver, descargar y eliminar las versiones de los objetos en el panel de información general de objetos. Para obtener más información, consulte [Visualización de propiedades de objeto en la consola de Amazon S3](view-object-properties.md).

**importante**  
Solo puede anular la eliminación de un objeto si se ha eliminado en su última versión (la más reciente). No puede anular la eliminación de una versión anterior de un objeto que se haya eliminado. Para obtener más información, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).

### Uso de los AWS SDK
<a name="restoring-obj-version-version-enabled-bucket-sdks"></a>

Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/). 

------
#### [ Python ]

En el siguiente ejemplo de código de Python, se restaura la versión anterior de un objeto versionado; para ello, se eliminan todas las versiones que se produjeron después de la versión de restauración especificada.

```
def rollback_object(bucket, object_key, version_id):
    """
    Rolls back an object to an earlier version by deleting all versions that
    occurred after the specified rollback version.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that holds the object to roll back.
    :param object_key: The object to roll back.
    :param version_id: The version ID to roll back to.
    """
    # Versions must be sorted by last_modified date because delete markers are
    # at the end of the list even when they are interspersed in time.
    versions = sorted(
        bucket.object_versions.filter(Prefix=object_key),
        key=attrgetter("last_modified"),
        reverse=True,
    )

    logger.debug(
        "Got versions:\n%s",
        "\n".join(
            [
                f"\t{version.version_id}, last modified {version.last_modified}"
                for version in versions
            ]
        ),
    )

    if version_id in [ver.version_id for ver in versions]:
        print(f"Rolling back to version {version_id}")
        for version in versions:
            if version.version_id != version_id:
                version.delete()
                print(f"Deleted version {version.version_id}")
            else:
                break

        print(f"Active version is now {bucket.Object(object_key).version_id}")
    else:
        raise KeyError(
            f"{version_id} was not found in the list of versions for " f"{object_key}."
        )
```

------

# Eliminar versiones de objetos de un bucket con control de versiones habilitado
<a name="DeletingObjectVersions"></a>

Puede eliminar versiones de objetos de los buckets de Amazon S3 siempre que lo desee. Además, también puede definir normas de configuración de ciclo de vida para objetos que tengan un ciclo de vida bien definido, de modo que solicite a Amazon S3 expirar versiones de objetos actuales o eliminar permanentemente versiones de objetos no actuales. Cuando en su bucket está habilitado o suspendido el control de versiones, las acciones de configuración de ciclo de vida funcionan así:
+ La `Expiration` acción se aplica a la versión actual del objeto. En lugar de eliminar la versión actual, Amazon S3 conserva la versión actual como versión no actual agregándole un *marcador de eliminación*, con lo cual se convierte en la versión actual.
+ La acción `NoncurrentVersionExpiration` se aplica a las versiones no actuales del objeto, y Amazon S3 elimina permanentemente estas versiones de objeto. No puede recuperar objetos eliminados permanentemente.

Para obtener más información acerca del ciclo de vida de S3, consulte [Administración del ciclo de vida de los objetos](object-lifecycle-mgmt.md) y [Ejemplos de configuraciones de S3 Lifecycle](lifecycle-configuration-examples.md).

Para ver cuántas versiones de objetos actuales y no actuales tienen los buckets, puede usar las métricas de Lente de almacenamiento de Amazon S3. Lente de almacenamiento de S3 es una función de análisis de almacenamiento en la nube que puede utilizar para obtener visibilidad en toda la organización sobre el uso y la actividad del almacenamiento de objetos. Para obtener más información, consulte [Uso de Lente de almacenamiento de S3 para optimizar los costos de almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-optimize-storage.html?icmpid=docs_s3_user_guide_DeletingObjectVersions.html). Para obtener una lista completa de las métricas, consulte el [Glosario de métricas de Lente de almacenamiento de S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_replication.html).

**nota**  
 Se aplican tasas normales de Amazon S3 por cada versión de un objeto almacenado y transferido, incluidas las versiones de objetos no actuales. Para obtener más información, consulte [Precios de Amazon S3](https://aws.amazon.com/s3/pricing/). 

## Eliminar casos de uso de solicitudes
<a name="delete-request-use-cases"></a>

Una solicitud `DELETE` presenta los siguientes casos de uso:
+ Cuando está habilitado el control de versiones, un `DELETE` simple no puede eliminar permanentemente un objeto. (Una solicitud `DELETE` simple es una solicitud que no especifica un ID de versión). En su lugar, Amazon S3 inserta un marcador de eliminación en el bucket, y ese marcador se convierte en la versión actual del objeto con un nuevo ID. 

  Cuando intenta `GET` un objeto cuya versión actual es un marcador de eliminación, Amazon S3 se comporta como si el objeto se hubiera eliminado (aunque no sea el caso) y devuelve un error 404. Para obtener más información, consulte [Trabajar con marcadores de eliminación](DeleteMarker.md).

  El siguiente gráfico muestra cómo una solicitud `DELETE` simple no elimina realmente el objeto especificado. En su lugar, Amazon S3 inserta un marcador de eliminación.  
![\[Ilustración que muestra la inserción de un marcador de eliminación.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)
+ Para eliminar de forma permanente objetos con control de versiones, debe usar `DELETE Object versionId`.

  El siguiente gráfico muestra cómo la eliminación de una versión de objeto específica elimina permanentemente el objeto.  
![\[Diagrama que muestra cómo DELETE Object versionId elimina permanentemente una versión de objeto específica.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)

## Para eliminar versiones de objetos
<a name="delete-object-version"></a>

Puede eliminar versiones de objetos en Amazon S3 mediante la consola, los SDK de AWS, la API de REST o AWS Command Line Interface.

### Uso de la consola de S3
<a name="deleting-object-versions"></a>

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En la lista **Buckets (Buckets)**, elija el nombre del bucket que contiene el objeto.

1. En la lista **Objects (Objetos)**, elija el nombre del objeto.

1. Elija **Versions (Versiones)**.

   Amazon S3 muestra todas las versiones del objeto.

1. Active la casilla de verificación situada junto al **ID de versión** de las versiones que desea eliminar de manera permanente.

1. Elija **Eliminar**.

1. En **Permanently delete objects? (¿Eliminar objetos de forma permanente?) **, ingrese **permanently delete**.
**aviso**  
Cuando elimina de forma permanente una versión de un objeto, la acción no se puede deshacer.

1. Elija **Eliminar objetos**.

   Amazon S3 elimina la versión del objeto.

### Uso de los AWS SDK
<a name="delete-obj-version-version-enabled-bucket-sdks"></a>

Para ver ejemplos de cómo eliminar objetos con los SDK de AWS para Java, .NET y PHP, consulte [Eliminación de objetos de Amazon S3](DeletingObjects.md). Los ejemplos para eliminar objetos en buckets sin control de versiones y habilitados para la control de versiones son los mismos. Sin embargo, para los buckets habilitados para el control de versiones, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor nulo. 

Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/). 

------
#### [ Python ]

En el siguiente ejemplo de código de Python, se elimina permanente un objeto con control de versiones mediante la eliminación de todas sus versiones.

```
def permanently_delete_object(bucket, object_key):
    """
    Permanently deletes a versioned object by deleting all of its versions.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to delete.
    """
    try:
        bucket.object_versions.filter(Prefix=object_key).delete()
        logger.info("Permanently deleted all versions of object %s.", object_key)
    except ClientError:
        logger.exception("Couldn't delete all versions of %s.", object_key)
        raise
```

------

### Uso de la API de REST
<a name="delete-obj-version-enabled-bucket-rest"></a>

**Para eliminar una versión específica de un objeto**
+ En un `DELETE`, especifique un ID de versión.

**Example — Eliminar una versión específica**  
En el ejemplo siguiente se elimina la versión `UIORUnfnd89493jJFJ` de `photo.gif`.  

```
1. DELETE /photo.gif?versionId=UIORUnfnd89493jJFJ HTTP/1.1 
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 12 Oct 2009 17:50:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
5. Content-Type: text/plain
6. Content-Length: 0
```

### Uso de AWS CLI
<a name="delete-obj-version-enabled-bucket-cli"></a>

El comando siguiente elimina un objeto denominado test.txt de un bucket denominado `amzn-s3-demo-bucket1`. Para quitar una versión específica de un objeto, debe ser el propietario del bucket y debe utilizar el subrecurso de del identificador de versión.

```
aws s3api delete-object --bucket amzn-s3-demo-bucket1 --key test.txt --version-id versionID
```

Para obtener más información sobre `delete-object`, consulte [https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) en la *Referencia de los comandos de AWS CLI*.

Para obtener más información sobre cómo eliminar versiones de objetos, consulte los siguientes temas:
+ [Trabajar con marcadores de eliminación](DeleteMarker.md)
+ [Borre marcadores de eliminación para convertir una versión anterior en una actual](ManagingDelMarkers.md#RemDelMarker)
+ [Eliminar un objeto de un bucket habilitado para la eliminación de MFA](UsingMFADelete.md)

# Trabajar con marcadores de eliminación
<a name="DeleteMarker"></a>

Un *marcador de eliminación* en Amazon S3 es un marcador de posición (o marcador) para un objeto con control de versiones que se ha especificado en una solicitud `DELETE` simple. Una solicitud `DELETE` simple es una solicitud que no especifica un ID de versión. Dado que el objeto estaba en un bucket con control de versiones habilitado, el objeto no se elimina. Sin embargo, el marcador de eliminación hace que Amazon S3 se comporte como si el objeto se hubiese eliminado. Puede utilizar una llamada `DELETE` a la API de Amazon S3 en un marcador de eliminación. Para ello, deberá realizar la solicitud `DELETE` mediante un usuario o rol de AWS Identity and Access Management (IAM) que tenga los permisos apropiados.

Un marcador de eliminación tiene un *nombre de clave* (o *clave*) y un ID de versión al igual que cualquier otro objeto. Sin embargo, un marcador de eliminación se diferencia de otros objetos en los siguientes aspectos:
+ Un marcador de eliminación no tiene datos asociados.
+ Un marcador de eliminación no está asociado a un valor de lista de control de acceso (ACL).
+ Si emite una solicitud `GET` para eliminar un marcador, la solicitud `GET` no recupera nada porque el marcador de eliminación no contiene datos. En concreto, si su solicitud `GET` no especifica un `versionId`, aparece un error 404 (no encontrado).

Los marcadores de eliminación acumulan un cargo mínimo por almacenamiento en Amazon S3. El tamaño de almacenamiento de un marcador de eliminación es igual al tamaño del nombre de clave del marcador de eliminación. Un nombre de clave es una secuencia de caracteres Unicode. La codificación UTF-8 del nombre de la clave añade entre 1 y 4 bytes de almacenamiento al bucket para cada carácter del nombre. Los marcadores de eliminación se almacenan en la clase de almacenamiento S3 Standard. 

Si desea saber cuántos marcadores de eliminación tiene y en qué clase de almacenamiento están almacenados, puede usar la Lente de almacenamiento de Amazon S3. Para obtener más información, consulte [Supervisión de la actividad y el uso de almacenamiento con Lente de almacenamiento de Amazon S3](storage_lens.md) y [Glosario de métricas de Amazon S3 Storage Lens](storage_lens_metrics_glossary.md).

Para obtener más información sobre nombres de clave, consulte [Denominación de objetos de Amazon S3](object-keys.md). Para obtener información acerca de cómo eliminar marcadores de eliminación, consulte [Gestión de marcadores de eliminación](ManagingDelMarkers.md). 

Solo Amazon S3 puede crear un marcador de eliminación, y lo hace cuando envía una solicitud `DeleteObject` a un objeto en un bucket con control de versiones habilitado o suspendido. El objeto especificado en la solicitud `DELETE` no se elimina realmente. Por el contrario, el marcador de eliminación se convierte en la versión actual del objeto. El nombre de la clave del objeto (o clave) se convierte en la clave del marcador de eliminación. 

Cuando obtiene un objeto sin especificar un `versionId` en su solicitud, si su versión actual es un marcador de eliminación, Amazon S3 responde con lo siguiente:
+ Un error 404 (No encontrado)
+ Un encabezado de respuesta, `x-amz-delete-marker: true`

Cuando obtiene un objeto especificando un `versionId` en su solicitud, si la versión especificada es un marcador de eliminación, Amazon S3 responde con lo siguiente:
+ Un error 405 (Método no permitido)
+ Un encabezado de respuesta, `x-amz-delete-marker: true`
+ Un encabezado de respuesta, `Last-Modified: timestamp` (solo cuando se utilizan las operaciones de la API [HeadObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html) o [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html))

El encabezado de respuesta `x-amz-delete-marker: true` le indica que el objeto al que se ha obtenido acceso era un marcador de eliminación. Este encabezado de respuesta nunca devuelve `false`, porque cuando el valor es `false`, la versión actual o especificada del objeto no es un marcador de eliminación.

El encabezado de respuesta `Last-Modified` indica la hora de creación de los marcadores de eliminación.

En el siguiente gráfico, se muestra cómo una llamada a la API `GetObject` en un objeto cuya versión actual es un marcador de eliminación responde con un error 404 (no encontrado) y en el encabezado de respuesta se incluye `x-amz-delete-marker: true`.

![\[Ilustración que muestra una llamada GetObject a un marcador de eliminación que devuelve un error 404 (no encontrado).\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound.png)


Si realiza una llamada `GetObject` a un objeto especificando un `versionId` en su solicitud y si la versión especificada es un marcador de eliminación, Amazon S3 responde con un error 405 (método no permitido) y los encabezados de respuesta incluyen `x-amz-delete-marker: true` y `Last-Modified: timestamp`.

![\[Ilustración que muestra una llamada GetObject a un marcador de eliminación que devuelve un error 405 (método no permitido).\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_NoObjectFound_405.png)


Incluso si se sobrescriben, los marcadores de eliminación permanecen en las versiones de objeto. La única forma de enumerar los marcadores de eliminación (y otras versiones de un objeto) es hacerlo mediante una solicitud [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html). Puede realizar esta solicitud en la Consola de administración de AWS mediante la enumeración de los objetos en un bucket de uso general y la selección de **Mostrar versiones**. Para obtener más información, consulte [Mostrar objetos en un bucket con control de versiones habilitado](list-obj-version-enabled-bucket.md).

La siguiente figura muestra que una solicitud [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) o [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html) no devuelve objetos cuya versión actual sea un marcador de eliminación.

![\[Ilustración que muestra cómo una llamada ListObjectsV2 o ListObjects no devuelve ningún marcador de eliminación.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GETBucketwithDeleteMarkers.png)


# Gestión de marcadores de eliminación
<a name="ManagingDelMarkers"></a>

## Configuración del ciclo de vida para limpiar automáticamente los marcadores de eliminación vencidos
<a name="LifecycleDelMarker"></a>

Un marcador de eliminación de objetos vencido es aquel en el que se eliminan todas las versiones de objetos y solo queda un único marcador de eliminación. Si la configuración de ciclo de vida está definida para eliminar las versiones actuales, o la acción `ExpiredObjectDeleteMarker` se ha establecido explícitamente, Amazon S3 borra el marcador de eliminación del objeto vencido. Para ver un ejemplo, consulte [Eliminación de marcadores de eliminación de objetos vencidos en un bucket con control de versiones habilitado](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7). 

## Borre marcadores de eliminación para convertir una versión anterior en una actual
<a name="RemDelMarker"></a>

Cuando se elimina un objeto en un bucket con control de versiones activado, todas las versiones permanecen en el bucket y Amazon S3 crea un marcador de eliminación para el objeto. Para anular la eliminación del objeto, debe eliminar este marcador de eliminación. Para obtener más información acerca del control de versiones y los marcadores de eliminación, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md).

Para eliminar permanentemente un marcador de eliminación, se debe incluir el ID de versión en una solicitud `DeleteObject versionId`. En el siguiente gráfico se muestra cómo una solicitud `DeleteObject versionId` elimina permanentemente un marcador de eliminación.

![\[Ilustración que muestra la eliminación de un marcador de eliminación utilizando su ID de versión.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarkerVersioned.png)


Al borrar el marcador de eliminación, ahora una solicitud `GET` simple devuelve el ID de versión actual (121212) del objeto. 

**nota**  
Si usa una solicitud `DeleteObject` para borrar un marcador de eliminación (sin especificar el ID de versión del marcador de eliminación), Amazon S3 no borra el marcador de eliminación, sino que `PUTs` (inserta) un nuevo marcador de eliminación.

Para borrar un marcador de eliminación con un ID de versión `NULL`, se debe pasar el `NULL` como el ID de versión en la solicitud `DeleteObject`. En la siguiente figura, se muestra cómo una solicitud `DeleteObject` simple realizada sin un ID de versión donde la versión actual es un marcador de eliminación, no elimina nada, sino que agrega un marcador de eliminación adicional con un ID de versión único (7498372).

![\[Ilustración que muestra la eliminación de un marcador de eliminación utilizando su ID de versión NULO.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarker.png)


## Uso de la consola de S3
<a name="undelete-objects"></a>

Siga los pasos siguientes para recuperar objetos eliminados que no son carpetas del bucket de S3, incluidos los objetos que se encuentran dentro de esas carpetas. 

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En la lista **Buckets (Buckets)**, elija el nombre del bucket en cuestión.

1. Para ver una lista de las **versiones** de los objetos en el bucket, elija el modificador **List versions (Listar versiones)**. Podrá ver los marcadores de eliminación de los objetos eliminados. 

   

1. Para anular la eliminación de un objeto, debe eliminar su marcador de eliminación. Marque la casilla de verificación que aparece junto al **delete marker** (marcador de eliminación) del objeto que desee recuperar y, a continuación, elija **Delete** (Eliminar).

1. Confirme la eliminación en la página **Delete objects (Eliminar objetos)** .

   1. Para **Permanently delete objects?** (¿Eliminar objetos de forma permanente?), ingrese **permanently delete**.

   1. Elija **Delete objects (Eliminar objetos)**.

**nota**  
No puede usar la consola de Amazon S3 para anular la eliminación de carpetas. Debe utilizar la AWS CLI o el SDK. Para ver ejemplos, consulte [¿Cómo puedo recuperar un objeto de Amazon S3 que se eliminó en un bucket con control de versiones habilitado?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/) en el Centro de conocimientos de AWS.

## Uso de la API de REST
<a name="delete-marker-rest-api"></a>

**Para eliminar permanentemente un marcador de eliminación:**

1. Establezca el parámetro `versionId` según el ID de la versión del marcador de eliminación que quiera eliminar.

1. Envíe una solicitud `DELETE Object versionId`.

**Example — Eliminar un marcador de eliminación**  
En el siguiente ejemplo se elimina el marcador de eliminación para la versión 4857693 de `photo.gif`.  

```
1. DELETE /photo.gif?versionId=4857693 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Al eliminar un marcador de eliminación, Amazon S3 incluye en la respuesta:

```
1. 204 NoContent 
2. x-amz-version-id: versionID 
3. x-amz-delete-marker: true
```

## Uso de los AWS SDK
<a name="remove-delete-marker-examples-sdk"></a>

Para obtener información acerca del uso de otros SDK de AWS, consulte el [Centro de desarrolladores de AWS](https://aws.amazon.com/code/).

------
#### [ Python ]

En el siguiente ejemplo de código de Python, se muestra cómo quitar un marcador de eliminación de un objeto y, por lo tanto, hacer que la versión no actual más reciente sea la versión actual del objeto.

```
def revive_object(bucket, object_key):
    """
    Revives a versioned object that was deleted by removing the object's active
    delete marker.
    A versioned object presents as deleted when its latest version is a delete marker.
    By removing the delete marker, we make the previous version the latest version
    and the object then presents as *not* deleted.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to revive.
    """
    # Get the latest version for the object.
    response = s3.meta.client.list_object_versions(
        Bucket=bucket.name, Prefix=object_key, MaxKeys=1
    )

    if "DeleteMarkers" in response:
        latest_version = response["DeleteMarkers"][0]
        if latest_version["IsLatest"]:
            logger.info(
                "Object %s was indeed deleted on %s. Let's revive it.",
                object_key,
                latest_version["LastModified"],
            )
            obj = bucket.Object(object_key)
            obj.Version(latest_version["VersionId"]).delete()
            logger.info(
                "Revived %s, active version is now %s  with body '%s'",
                object_key,
                obj.version_id,
                obj.get()["Body"].read(),
            )
        else:
            logger.warning(
                "Delete marker is not the latest version for %s!", object_key
            )
    elif "Versions" in response:
        logger.warning("Got an active version for %s, nothing to do.", object_key)
    else:
        logger.error("Couldn't get any version info for %s.", object_key)
```

------

# Eliminar un objeto de un bucket habilitado para la eliminación de MFA
<a name="UsingMFADelete"></a>

Al configurar la eliminación de MFA, solo el usuario raíz puede eliminar permanentemente las versiones de los objetos o cambiar la configuración del control de versiones en el bucket de S3. Debe usar un dispositivo MFA para autenticar al usuario raíz y realizar la acción de eliminación.

Si la configuración del control de versiones de un bucket tiene la eliminación de MFA habilitada, el propietario del bucket debe incluir el encabezado de solicitud `x-amz-mfa` en las solicitudes para eliminar de forma permanente una versión de objeto o cambiar el estado del control de versiones del bucket. Las solicitudes que incluyen `x-amz-mfa` deben usar HTTPS.

El valor del encabezado es la concatenación del número de serie de su dispositivo de autenticación, un espacio y el código de autenticación que se muestra en él. Si no incluye este encabezado de solicitud, la solicitud producirá un error.

Cuando se utilice la AWS CLI, incluya la misma información que el valor del parámetro de `mfa`.

Para obtener más información acerca de los dispositivos de autenticación, consulte [Multi-factor Authentication (Autenticación multifactor)](https://aws.amazon.com/iam/details/mfa/).

Para obtener más información acerca de la habilitación de la eliminación con MFA, consulte [Configurar la eliminación de MFA](MultiFactorAuthenticationDelete.md).

**nota**  
Eliminar un objeto en un bucket con control de versiones habilitado que tiene la eliminación de MFA habilitada no está disponible a través de la Consola de administración de AWS.

## Uso de AWS CLI
<a name="MFADeleteCLI"></a>

Para eliminar un objeto en un bucket con control de versiones habilitado que tiene la eliminación de MFA habilitada, use el siguiente comando. Al utilizar el comando de ejemplo siguiente, sustituya `user input placeholders` con su información.

```
 aws s3api delete-object --bucket amzn-s3-demo-bucket --key OBJECT-KEY --version-id "VERSION ID" --mfa "MFA_DEVICE_SERIAL_NUMBER MFA_DEVICE_CODE"						
```

## Uso de la API de REST
<a name="MFADeleteAPI"></a>

El siguiente ejemplo elimina `my-image.jpg` (con la versión especificada), que se encuentra en un bucket configurado con la eliminación con MFA habilitada. 

Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html) en la referencia de la API de Amazon Simple Storage Service

```
1. DELETE /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTPS/1.1
2. Host: bucketName.s3.amazonaws.com
3. x-amz-mfa: 20899872 301749
4. Date: Wed, 28 Oct 2009 22:32:00 GMT
5. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

# Configurar permisos de objeto con control de versiones
<a name="VersionedObjectPermissionsandACLs"></a>

Los permisos para los objetos de Amazon S3 se establecen en el nivel de versión. Cada versión tiene su propio propietario de objeto. La Cuenta de AWS que crea la versión del objeto es la propietaria. Así, puede establecer distintos permisos para diferentes versiones del mismo objeto. Para hacerlo, debe especificar el ID de la versión del objeto cuyos permisos quiera establecer en una solicitud `PUT Object versionId acl`. Para obtener una descripción detallada e instrucciones sobre cómo usar las ACL, consulte [Administración de identidades y accesos para Amazon S3](security-iam.md).

**Example — Establecer permisos para una versión de objeto**  
La siguiente solicitud establece el permiso del concesionario con el ID de usuario canónico *b4bf1b36f9716f094c3079dcf5ac9982d4f2847de46204d47448bc557fb5ac2a*, en `FULL_CONTROL` en la clave, `my-image.jpg`, el ID de versión, `3HL4kqtJvjVBH40Nrjfkd`.  

```
 1. PUT /my-image.jpg?acl&versionId=3HL4kqtJvjVBH40Nrjfkd HTTP/1.1
 2. Host: bucket.s3.amazonaws.com
 3. Date: Wed, 28 Oct 2009 22:32:00 GMT
 4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
 5. Content-Length: 124
 6.  
 7. <AccessControlPolicy>
 8.   <Owner>
 9.     <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
10.   </Owner>
11.   <AccessControlList>
12.     <Grant>
13.       <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
14.         <ID>a9a7b886d6fd24a52fe8ca5bef65f89a64e0193f23000e241bf9b1c61be666e9</ID>
15.       </Grantee>
16.       <Permission>FULL_CONTROL</Permission>
17.     </Grant>
18.   </AccessControlList>
19.   </AccessControlPolicy>
```

Del mismo modo, para obtener permisos para una versión de objeto específica, debe facilitar su ID de versión en una solicitud `GET Object versionId acl`. Debe incluir el ID de versión porque, de forma predeterminada, `GET Object acl` devuelve los permisos de la versión actual del objeto. 

**Example — Recuperar los permisos para una versión de objeto especificada**  
En el siguiente ejemplo, Amazon S3 devuelve los permisos para la clave, `my-image.jpg`, ID de versión, `DVBH40Nr8X8gUMLUo`.  

```
1. GET /my-image.jpg?versionId=DVBH40Nr8X8gUMLUo&acl HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU
```

Para obtener más información, consulte [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETacl.html) en la *Referencia de la API de Amazon Simple Storage Service*.

# Trabajar con objetos en un bucket con control de versiones suspendido
<a name="VersionSuspendedBehavior"></a>

En Amazon S3, puede suspender el control de versiones para evitar que se acumulen nuevas versiones del mismo objeto en un bucket. Puede hacer esto porque solo desea una sola versión de un objeto en un bucket. O bien, es posible que no desee acumular cargos para varias versiones. 

Al suspender el control de versiones, los objetos existentes en el bucket no cambian. Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Los temas de esta sección explican varias operaciones de objetos en un bucket con control de versiones suspendido, incluida la adición, recuperación y eliminación de objetos.

Para obtener más información sobre el control de versiones de S3, consulte [Retención de varias versiones de objetos con Control de versiones de S3](Versioning.md). Para obtener más información sobre la recuperación de versiones de objetos, consulte [Recuperar versiones de objetos de un bucket habilitado para el control de versiones](RetrievingObjectVersions.md).

**Topics**
+ [Agregar objetos a buckets con control de versiones suspendido](AddingObjectstoVersionSuspendedBuckets.md)
+ [Recuperar objetos desde buckets con control de versiones suspendido](RetrievingObjectsfromVersioningSuspendedBuckets.md)
+ [Eliminar objetos de buckets con control de versiones suspendido](DeletingObjectsfromVersioningSuspendedBuckets.md)

# Agregar objetos a buckets con control de versiones suspendido
<a name="AddingObjectstoVersionSuspendedBuckets"></a>

En Amazon S3 se pueden agregar objetos a buckets con control de versiones suspendido para crear el objeto con un ID de versión nulo o para sobrescribir las versiones del objeto con un ID de versión que coincida.

Al suspender el control de versiones en un bucket, Amazon S3 agrega automáticamente un `null` ID de versión a todos los objetos almacenados de forma subsecuente (con `PUT`, `POST` o `CopyObject`) en ese bucket.

En el siguiente gráfico se muestra cómo Amazon S3 agrega un ID de versión `null` a un objeto cuando se agrega a un bucket con control de versiones suspendido.

![\[Amazon S3 añade el ID de versión nulo a un gráfico de objetos.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended.png)


Si ya existe una versión nula en el bucket y agrega otro objeto con la misma clave, el objeto agregado sobrescribe la versión nula original. 

Si hay objetos versionados en el bucket, la versión que someta a la operación `PUT` se convertirá en la versión actual del objeto. En el siguiente gráfico se muestra cómo agregar un objeto a un bucket que contiene objetos versionados no sobrescribe el objeto ya presente en el bucket. 

En esta caso, la versión 111111 ya estaba en el bucket. Amazon S3 adjunta un ID de versión nulo al objeto que se agrega, y lo almacena en el bucket. La versión 111111 no se sobrescribe.

![\[Amazon S3 añade el ID de versión nulo a un objeto sin sobrescribir el gráfico 111111 de la versión.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended3.png)


Si ya existe una versión nula en un bucket, la versión nula se sobrescribe, como se muestra en el siguiente gráfico.

![\[Amazon S3 añade el ID de versión nulo a un objeto y mientras sobrescribe el gráfico de contenido original.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended4.png)


Tenga en cuenta que aunque la clave y el ID de versión (`null`) de la versión nula son los mismos antes y después de la operación `PUT`, los contenidos de la versión nula almacenados en primer lugar en el bucket se sustituyen por los contenidos del objeto `PUT` en el bucket.

# Recuperar objetos desde buckets con control de versiones suspendido
<a name="RetrievingObjectsfromVersioningSuspendedBuckets"></a>

Una solicitud `GET Object` devuelve la versión actual de un objeto, haya activado el control de versiones en un bucket o no. El siguiente gráfico muestra cómo una solicitud `GET` sencilla devuelve la versión actual de un objeto.

![\[Ilustración que muestra cómo un simple GET devuelve la versión actual de un objeto.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_GET_suspended.png)


# Eliminar objetos de buckets con control de versiones suspendido
<a name="DeletingObjectsfromVersioningSuspendedBuckets"></a>

Puede eliminar objetos de buckets con control de versiones suspendido para eliminar un objeto con ID de versión nulo.

Si el control de versiones se suspende para un bucket, `DELETE` solicitará:
+ Solo puede eliminar un objeto cuyo ID de versión sea `null`.
+ No elimina ningún elemento si no hay una versión nula del objeto en el bucket.
+ Inserta un marcador de eliminación en el bucket.

Si se suspende el control de versiones de un bucket, la operación elimina el objeto que tiene un `versionId` nulo. Si existe un ID de versión, Amazon S3 inserta un marcador de eliminación que se convierte en la versión actual del objeto. En el siguiente gráfico se muestra cómo un sencillo comando `DELETE` elimina una versión nula y Amazon S3 inserta un marcador de eliminación en su lugar con un ID de versión `null`.

![\[Ilustración que muestra una eliminación sencilla para eliminar un objeto con ID de versión NULO.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspended.png)


Para eliminar permanentemente un objeto que tiene un `versionId`, debe incluir el `versionId` del objeto en la solicitud. Como un marcador de eliminación no contiene ningún contenido, perderá el contenido de la versión `null` cuando un marcador de eliminación la sustituya.

El siguiente gráfico muestra un bucket que no tiene una versión nula. En este caso, `DELETE` no elimina nada. En su lugar, Amazon S3 inserta un marcador de eliminación.

![\[Ilustración que muestra la inserción de un marcador de eliminación.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspendedNoNull.png)


Incluso en un bucket con control de versiones suspendido, el propietario del bucket puede eliminar permanentemente una versión específica incluyendo el ID de versión en la solicitud de `DELETE`, a menos que los permisos para la solicitud de `DELETE` se hayan rechazado explícitamente. Por ejemplo, para denegar la eliminación de cualquier objeto que tenga un ID de versión `null`, debe denegar de forma explícita los permisos `s3:DeleteObject` y `s3:DeleteObjectVersions`.

En el siguiente gráfico, se muestra cómo la eliminación de una versión de objeto específica elimina el objeto de forma permanente. Solo el propietario de un bucket puede eliminar una versión de objeto específica.

![\[Ilustración que muestra la eliminación permanente de un objeto mediante un ID de versión especificado.\]](http://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)


# Solución de problemas de control de versiones
<a name="troubleshooting-versioning"></a>

Los siguientes temas pueden ayudarlo a solucionar problemas habituales de control de versiones de Amazon S3.

**Topics**
+ [Quiero recuperar objetos que se han eliminado por error en un bucket con el control de versiones activado](#recover-objects)
+ [Quiero eliminar los objetos versionados de forma permanente](#delete-objects-permanent)
+ [Estoy experimentando una bajada del rendimiento después de habilitar el control de versiones de buckets](#performance-degradation)

## Quiero recuperar objetos que se han eliminado por error en un bucket con el control de versiones activado
<a name="recover-objects"></a>

En general, cuando se eliminan versiones de objetos de los buckets de S3, Amazon S3 no puede recuperarlas. Sin embargo, si has activado el control de versiones de S3 en el bucket de S3, una solicitud `DELETE` que no especifique un ID de versión no puede eliminar un objeto de forma permanente. En su lugar, se añade un marcador de eliminación como marcador de posición. El marcador de eliminación se convierte en la versión actual del objeto. 

Para comprobar si los objetos eliminados se eliminan de forma permanente o temporal (con un marcador de eliminación en su lugar), haga lo siguiente: 

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets**.

1. En la lista **Buckets**, elija el nombre del bucket que contiene el objeto.

1. En la lista **Objetos**, active la opción **Mostrar versiones** a la derecha de la barra de búsqueda y, a continuación, busque el objeto eliminado en la barra de búsqueda. Esta opción solo está disponible si el control de versiones ya estaba activado anteriormente en el bucket.

   También puede usar [Inventario de S3 para buscar objetos eliminados](storage-inventory.md#storage-inventory-contents).

1. Si no encuentra el objeto después de seleccionar **Mostrar versiones** o crear un informe de inventario, y tampoco encuentra un [marcador de eliminación](DeleteMarker.md) del objeto, la eliminación será permanente y no podrá recuperar el objeto.



También puede verificar el estado de un objeto eliminado mediante la operación de la API `HeadObject` de la AWS Command Line Interface (AWS CLI). Para ello, el comando `head-object` siguiente y sustituya `user input placeholders` con su información: 

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html`

Si ejecuta el comando `head-object` en un objeto versionado cuya versión actual es un marcador de eliminación, aparecerá un error 404 No encontrado. Por ejemplo: 

Se ha producido un error (404) al llamar a la operación HeadObject: No encontrada

Si ejecuta el comando `head-object` en un objeto versionado y proporciona el ID de versión del objeto, Amazon S3 recupera los metadatos del objeto y confirma que el objeto sigue existiendo y no se ha eliminado de forma permanente.

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

```
{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}
```

Si encuentra el objeto y la versión más reciente es un marcador de eliminación, la versión anterior del objeto seguirá existiendo. Como el marcador de eliminación es la versión actual del objeto, puede recuperarlo borrando el marcador de eliminación. 

Tras eliminar permanentemente el marcador de eliminación, la segunda versión más reciente del objeto pasa a ser la versión actual del objeto, lo que hace que el objeto vuelva a estar disponible. Para obtener una representación visual de cómo se recuperan los objetos, consulte [Borrar marcadores de eliminación](ManagingDelMarkers.md#RemDelMarker).

Para quitar una versión específica de un objeto, debe ser el propietario del bucket. Para eliminar permanentemente un marcador de eliminación, se debe incluir el ID de versión en una solicitud `DeleteObject`. Para borrar el marcador de eliminación, use el siguiente comando y sustituya `user input placeholders` con su información: 

****  
`aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

Para obtener más información sobre el comando `delete-object`, consulte [https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html) en la *Referencia de comandos de la AWS CLI*. Para obtener más información acerca de cómo eliminar marcadores de eliminación de forma permanente, consulte [Gestión de marcadores de eliminación](ManagingDelMarkers.md).

## Quiero eliminar los objetos versionados de forma permanente
<a name="delete-objects-permanent"></a>

En un bucket con control de versiones, una solicitud `DELETE` sin un ID de versión no puede eliminar un objeto de forma permanente. En cambio, dicha solicitud inserta un marcador de eliminación.

Para eliminar objetos versionados de forma permanente, puede elegir entre los siguientes métodos:
+ Crear una regla de ciclo de vida de S3 para eliminar las versiones no actuales de forma permanente. Para eliminar versiones anteriores de objetos de manera permanente, seleccione **Eliminar definitivamente versiones de objetos no actuales** y, a continuación, escriba un número en **Días tras los que los objetos dejan de ser actuales**. Puede especificar opcionalmente el número de versiones más recientes que desea retener introduciendo un valor en **Number of newer versions to retain** (Número de versiones más recientes que se deben retener). Para obtener más información sobre la creación de esta regla, consulte [Configurar un ciclo de vida de S3](how-to-set-lifecycle-configuration-intro.md).
+ Eliminar una versión especificada al incluir el ID de la versión en la solicitud `DELETE`. Para obtener más información, consulte [Eliminar versiones de objetos definitivamente](DeletingObjectVersions.md#delete-request-use-cases).
+ Crear una regla de ciclo de vida para que caduquen las versiones actuales. Para que caduquen las versiones actuales de los objetos, seleccione **Hacer que venzan las versiones actuales de los objetos** y escriba un número en **Días después de la creación del objeto**. Para obtener más información sobre la creación de esta regla de ciclo de vida, consulte [Configurar un ciclo de vida de S3](how-to-set-lifecycle-configuration-intro.md).
+ Para eliminar definitivamente todos los objetos versionados y los marcadores de eliminación, cree dos reglas de ciclo de vida: una para que venzan las versiones actuales y eliminar las versiones no actuales de los objetos definitivamente y otra para borrar los marcadores de eliminación de los objetos caducados.

En un bucket con control de versiones activado, una solicitud `DELETE` que no especifique un ID de versión solo puede eliminar objetos con un ID de versión `NULL`. Si el objeto se cargó cuando se activó el control de versiones, una solicitud `DELETE` que no especifique un ID de versión creará un marcador de eliminación de ese objeto.

**nota**  
En el caso de los buckets con bloqueo de objetos de S3 activado, una solicitud de objeto `DELETE` con un ID de versión de objeto protegido genera un error 403 Acceso denegado. Una solicitud de objeto `DELETE` sin un ID de versión añade un marcador de eliminación como la versión más reciente del objeto con una respuesta 200 OK. Los objetos protegidos por bloqueo de objetos no se pueden eliminar definitivamente hasta que se eliminen sus periodos de retención y retenciones legales correspondientes. Para obtener más información, consulte [Cómo funciona Bloqueo de objetos de S3](object-lock.md#object-lock-overview).

## Estoy experimentando una bajada del rendimiento después de habilitar el control de versiones de buckets
<a name="performance-degradation"></a>

Si hay demasiados marcadores de eliminación u objetos versionados y si no se siguen las prácticas recomendadas, se puede producir una bajada del rendimiento en los buckets habilitados para el control de versiones.

**Demasiados marcadores de eliminación**  
Al activar el control de versiones en un bucket, una solicitud `DELETE` sin ID de versión realizada a un objeto crea un marcador de eliminación con un ID de versión exclusivo. Las configuraciones del ciclo de vida con la regla **Hacer que venzan las versiones actuales de los objetos** añaden un marcador de eliminación con un ID de versión único a cada objeto. El exceso de marcadores de eliminación puede reducir el rendimiento del bucket.

Cuando se suspende control de versiones en un bucket, Amazon S3 marca el ID de versión como `NULL` en los objetos que se acaban de crear. Una acción de vencimiento en un bucket con el control de versiones suspendido provoca que Amazon S3 cree un marcador de eliminación con un ID de versión `NULL`. En un bucket con control de versiones suspendido, se crea un marcador de eliminación `NULL` para cualquier solicitud de eliminación. Estos marcadores de eliminación `NULL` también se denominan marcadores de eliminación objetos vencidos cuando se eliminan todas las versiones de objetos y solo queda un único marcador de eliminación. Si se acumulan demasiados marcadores de eliminación `NULL`, el rendimiento en el bucket se ve afectado.

**Demasiados objetos versionados**  
Si un bucket con control de versiones habilitado contiene objetos con millones de versiones, puede producirse un aumento de los errores 503 Servicio no disponible. Si detecta un aumento significativo en el número de respuestas de HTTP 503 Servicio no disponible recibidas para solicitudes de objeto `PUT` o `DELETE` en un bucket de Amazon S3 con el control de versiones habilitado, puede que tenga uno o varios objetos en el bucket con millones de versiones. Si tiene objetos con millones de versiones, Amazon S3 limita automáticamente las solicitudes al bucket. Las solicitudes de limitación protegen al bucket de una cantidad excesiva de tráfico de solicitudes, lo que podría impedir que se realicen otras solicitudes al mismo bucket. 

Para determinar qué objetos tienen millones de versiones, utilice el inventario de S3. El inventario de S3 genera un informe que crea una lista de archivos sin formato de los objetos de un bucket. Para obtener más información, consulte [Catálogo y análisis de sus datos con Inventario de S3](storage-inventory.md).

Para comprobar si hay un número elevado de objetos versionados en el bucket, utilice las métricas de Lente de almacenamiento de S3 para ver el **Recuento de objetos de la versión actual**, **Recuento de objetos de la versión no actual** de **Recuento de objetos de marcador de eliminación**. Para obtener más información acerca de las métricas de la lente de almacenamiento, consulte [Glosario de métricas de Amazon S3 Storage Lens](storage_lens_metrics_glossary.md).

El equipo de Amazon S3 insta a los clientes a investigar las aplicaciones que sobrescriben repetidamente el mismo objeto y pueden llegar a generar millones de versiones de ese objeto para determinar si la aplicación funciona según lo previsto. Por ejemplo, una aplicación que sobrescriba el mismo objeto cada minuto durante una semana puede crear más de diez mil versiones. Recomendamos almacenar menos de cien mil versiones para cada objeto. Si tiene un caso de uso que requiere millones de versiones para uno o más objetos, contacte con el equipo de AWS Support para solicitar ayudar para buscar una solución mejor.

**Prácticas recomendadas**  
Se recomienda aplicar las siguientes prácticas recomendadas para evitar problemas de reducción del rendimiento relacionados con el control de versiones:
+ Habilite una regla de ciclo de vida para que haga que venzan las versiones anteriores de los objetos. Por ejemplo, puede crear una regla de ciclo de vida para que caduquen las versiones no actuales transcurridos 30 días desde la última actualización del objeto. También puede conservar varias versiones no actuales si no quiere eliminarlas todas. Para obtener más información, consulte [Configurar un ciclo de vida de S3](how-to-set-lifecycle-configuration-intro.md).
+ Habilite una regla de ciclo de vida para eliminar los marcadores de eliminación de objetos caducados que no tengan objetos de datos asociados en el bucket. Para obtener más información, consulte [Eliminar marcadores de eliminación de objetos que vencieron](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7).

Para obtener más información sobre las prácticas recomendadas de optimización del rendimiento de S3, consulte [Prácticas recomendadas para patrones de diseño](optimizing-performance.md).