

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Migración del cliente de cifrado Amazon S3 (V1 a V2)
<a name="s3-encryption-migration-v1-v2"></a>

**nota**  
Si utiliza la versión 2 del cliente de cifrado S3 y desea migrar a la versión 3, consulte[Migración del cliente de cifrado Amazon S3 (V2 a V3)](s3-encryption-migration-v2-v3.md).

En este tema se muestra cómo migrar las aplicaciones de la versión 1 (V1) del cliente de cifrado Amazon Simple Storage Service (Amazon S3) a la versión 2 (V2) y cómo garantizar la disponibilidad de las aplicaciones durante todo el proceso de migración.

## Información general sobre la migración
<a name="migration-overview-v1-v2"></a>

Esta migración se produce en dos fases:

1. **Actualice los clientes existentes para leer nuevos formatos.** Primero, implementa una versión actualizada del AWS SDK for Ruby en tu aplicación. Así, permitirá a los clientes de cifrado de la versión V1 descifrar los objetos escritos por los nuevos clientes de la versión V2. Si tu aplicación usa varios AWS SDKs, debes actualizar cada SDK por separado.

2. **Migue los clientes de cifrado y descifrado a la versión V2.** Una vez que todos sus clientes de cifrado de la versión 1 puedan leer los nuevos formatos, puede migrar los clientes de cifrado y descifrado existentes a sus respectivas versiones de la versión 2.

## Actualizar los clientes existentes para leer nuevos formatos
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

El cliente de cifrado de la versión V2 utiliza algoritmos de cifrado que las versiones anteriores del cliente no admiten. El primer paso de la migración consiste en actualizar los clientes de descifrado de la versión V1 a la versión más reciente del SDK. Tras completar este paso, los clientes de la versión V1 de su aplicación podrán descifrar los objetos cifrados por los clientes de cifrado de la versión V2. Consulta los detalles de cada versión principal del AWS SDK for Ruby a continuación.

### Actualización AWS del SDK para Ruby versión 3
<a name="update-aws-sdk-for-ruby-version-3-v1-v2"></a>

La versión 3 es la última versión del AWS SDK para Ruby. Para completar la migración, debe utilizar la versión 1.76.0 o una posterior de la gema `aws-sdk-s3`.

 **Instalación desde la línea de comandos** 

Para los proyectos que instalan la gema `aws-sdk-s3`, utilice la opción de versión para comprobar que está instalada la versión mínima de 1.76.0.

```
gem install aws-sdk-s3 -v '>= 1.76.0'
```

 **Uso de archivos Gemfile** 

Establezca la versión mínima de la gema `aws-sdk-s3` en 1.76.0 para los proyectos que utilizan un archivo Gemfile para gestionar las dependencias. Por ejemplo:

```
gem 'aws-sdk-s3', '>= 1.76.0'
```

1. Modifique su archivo Gemfile.

1. Ejecute `bundle update aws-sdk-s3`. Para comprobar su versión, ejecute `bundle info aws-sdk-s3`.

### Actualización AWS del SDK para Ruby versión 2
<a name="upgdate-aws-sdk-for-ruby-version-2-v1-v2"></a>

La versión 2 del AWS SDK for Ruby entrará en [modo de mantenimiento](https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/) el 21 de noviembre de 2021. Para completar la migración, debe utilizar la versión 2.11.562 o una posterior de la gema aws-sdk.

 **Instalación desde la línea de comandos** 

Para los proyectos que instalan la gema `aws-sdk`, utilice la opción de versión para comprobar que está instalada la versión mínima de 2.11.562.

```
gem install aws-sdk -v '>= 2.11.562'
```

 **Uso de archivos Gemfile** 

Establezca la versión mínima de la gema `aws-sdk` en 2.11.562 para los proyectos que utilizan un archivo Gemfile para gestionar las dependencias. Por ejemplo:

```
gem 'aws-sdk', '>= 2.11.562'
```

1. Modifique su archivo Gemfile. Si tiene un archivo Gemfile.lock, elimínelo o actualícelo.

1. Ejecute `bundle update aws-sdk`. Para comprobar su versión, ejecute `bundle info aws-sdk`.

## Migrar clientes de cifrado y descifrado a la versión V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

Después de actualizar sus clientes para leer los nuevos formatos de cifrado, puede actualizar sus aplicaciones a la versión V2 de los clientes de cifrado y descifrado. En los siguientes pasos, se muestra cómo migrar correctamente el código de la versión V1 a la V2.

Antes de actualizar el código para usar el cliente de cifrado V2, siga los pasos anteriores y utilice la gema `aws-sdk-s3` en la versión 2.11.562 o posterior.

**nota**  
Al descifrar con AES-GCM, lea todo el objeto hasta el final antes de empezar a utilizar los datos descifrados. Esto se hacer para verificar que el objeto no se ha modificado desde que se cifró.

### Configuración de clientes de cifrado de la versión V2
<a name="configuring-v2-encryption-clients-v1-v2"></a>

El *EncryptionV2::Client* requiere una configuración adicional. Para obtener información de configuración detallada, consulte la [documentación de EncryptionV2::Client](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/EncryptionV2/Client.html#initialize-instance_method) o los ejemplos que se proporcionan más adelante en este tema.

1. **El método de encapsulación de clave y el algoritmo de cifrado del contenido deben especificarse al construir el cliente.** Al crear un `EncryptionV2::Client` nuevo, debe proporcionar valores para `key_wrap_schema` y `content_encryption_schema`.

 `key_wrap_schema`- Si lo está utilizando AWS KMS, debe estar configurado en`:kms_context`. Si utiliza una clave simétrica (AES), esta se debe establecer en `:aes_gcm`. Si utiliza una clave simétrica (AES), esta se debe establecer en `:rsa_oaep_sha1`.

 `content_encryption_schema` - Este se debe establecer en *aes\_gcm\_no\_padding*.

2. **security\_profile debe especificarse en la construcción del cliente.** Al crear un `EncryptionV2::Client` nuevo, debe proporcionar un valor para `security_profile`. El parámetro *security\_profile* determina la compatibilidad para los objetos de lectura escritos con la versión V1 de `Encryption::Client` anterior. Hay dos valores: *:v2* y *:v2\_and\_legacy*. Para admitir la migración, establezca el `security_profile` en *:v2\_and\_legacy*. Use *:v2* solo para el desarrollo de nuevas aplicaciones.

3. **AWS KMS key se aplica de forma predeterminada.** En la `kms_key_id` versión 1`Encryption::Client`, no se proporcionó al AWS KMS `Decrypt call`. AWS KMS puede obtener esta información de los metadatos y añadirla al blob simétrico de texto cifrado. En la versión 2, e`EncryptionV2: :Client`, el *kms\_key\_id* se pasa a la llamada Decrypt y la llamada falla si no coincide con la clave utilizada para AWS KMS cifrar el objeto. Si anteriormente no estableció un `kms_key_id` específico para su código, establezca `kms_key_id: :kms_allow_decrypt_with_any_cmk` en la creación del cliente o establezca `kms_allow_decrypt_with_any_cmk: true` en llamadas de `get_object`.

### Ejemplo: Uso de una clave simétrica (AES)
<a name="example-using-a-symmetric-aes-key-v1-v2"></a>

 **Antes de la migración** 

```
client = Aws::S3::Encryption::Client.new(encryption_key: aes_key)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Después de la migración** 

```
client = Aws::S3::EncryptionV2::Client.new(
  encryption_key: rsa_key,
  key_wrap_schema: :rsa_oaep_sha1, # the key_wrap_schema must be rsa_oaep_sha1 for asymmetric keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
 )
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key) # No changes
```

### AWS KMS Ejemplo: usar con kms\_key\_id
<a name="example-using-aws-kms-with-kms-key-id-v1-v2"></a>

 **Antes de la migración** 

```
client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Después de la migración** 

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: kms_key_id,
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key) # No change
```

### Ejemplo: usar sin kms\_key\_id AWS KMS
<a name="example-using-aws-kms-without-kms-key-id-v1-v2"></a>

 **Antes de la migración** 

```
client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Después de la migración** 

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: kms_key_id,
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key, kms_allow_decrypt_with_any_cmk: true) # To allow decrypting with any cmk
```

 **Alternativa posterior a la migración** 

Si solo lee y descifra (nunca escribe ni cifra) objetos con el cliente de cifrado de S2, utilice este código.

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: :kms_allow_decrypt_with_any_cmk, # set kms_key_id to allow all get_object requests to use any cmk
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
resp = client.get_object(bucket: bucket, key: key) # No change
```