

¡Ya está disponible la AWS SDK para .NET versión 4 (V4) del\!

Para obtener información sobre los cambios importantes y la migración de sus aplicaciones, consulte el tema sobre [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html) migración.

 [![Orange button with text "Click here for details".](https://docs.aws.amazon.com/es_es/sdk-for-net/v4/developer-guide/images/BannerButton_less-round.png)](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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 de clientes de cifrado S3 (de la V1 a la V2)
<a name="s3-encryption-migration-v1-v2"></a>

**nota**  
Si utiliza la V2 y desea migrar a la V4, consulte[Migración de clientes de cifrado S3 (de la V2 a la V4)](s3-encryption-migration-v2-v4.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 (S3) a la versión 2 (V2) y cómo garantizar la disponibilidad de las aplicaciones durante todo el proceso de migración.

Los objetos cifrados con el cliente de la versión 2 no se pueden descifrar con el cliente de la versión V1. Para facilitar la migración al nuevo cliente sin tener que volver a cifrar todos los objetos a la vez, se ha proporcionado un cliente V1-transitional "». Este cliente puede * descifrar * tanto la V1 como V2-encrypted los objetos, pero solo * cifra los * objetos en formato. V1-compatible El cliente V2 puede * descifrar * tanto la V1 como V2-encrypted los objetos (si está habilitada para los objetos V1), pero * cifra los * objetos solo en formato. V2-compatible 

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

Esta migración se produce en tres fases. Estas fases se indican aquí y se describen en detalle más adelante. Cada fase debe completarse en *todos* los clientes que utilizan objetos compartidos para que la siguiente fase pueda iniciarse.

1. **Actualice los clientes existentes para V1-transitional convertirlos en clientes para leer nuevos formatos. ** En primer lugar, actualice sus aplicaciones para que dependan del V1-transitional cliente en lugar del cliente V1. El V1-transitional cliente permite que el código existente descifre los objetos escritos por los nuevos clientes de la V2 y los objetos escritos en V1-compatible formato.
**nota**  
El V1-transitional cliente se proporciona únicamente con fines de migración. Continúe con la actualización al cliente V2 después de pasar al V1-transitional cliente.

1. **Migre V1-transitional los clientes a los clientes V2 para escribir nuevos formatos. ** A continuación, sustituya todos los V1-transitional clientes de sus aplicaciones por clientes V2 y defina el perfil de seguridad en`V2AndLegacy`. La configuración de este perfil de seguridad en los clientes V2 permite a esos clientes descifrar objetos cifrados en V1-compatible formato.

1. **Actualizar los clientes de la versión 2 para que dejen de leer formatos de la versión 1.** Por último, una vez que todos los clientes se hayan migrado a la V2 y todos los objetos se hayan cifrado o vuelto a cifrar en V2-compatible formato, configure el perfil de seguridad de la V2 `V2` en lugar de. `V2AndLegacy` Esto evita el descifrado de los objetos que están en V1-compatible formato.

## Actualice los clientes existentes para V1-transitional convertirlos en clientes para leer nuevos formatos
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

El cliente de cifrado de la versión 2 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 1 para que puedan leer el nuevo formato.

El V1-transitional cliente permite a sus aplicaciones descifrar tanto la V1 como los V2-encrypted objetos. Este cliente forma parte del [ Amazon.Extensions.S3.Encryption ](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet paquete. Realice los siguientes pasos en cada una de sus aplicaciones para usar el V1-transitional cliente.

1. Cree una nueva dependencia en el [ Amazon.Extensions.S3.Encryption ](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) paquete. Si tu proyecto depende directamente de los ** AWSSDK.KeyManagementService ** paquetes ** AWSSDK.S3 ** o, debes actualizar esas dependencias o eliminarlas para que sus versiones actualizadas se incluyan en este nuevo paquete.

1. Cambie la instrucción `using` apropiada de `Amazon.S3.Encryption` a `Amazon.Extensions.S3.Encryption`. Así: 

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. Recompile y vuelva a implementar la aplicación.

El V1-transitional cliente está totalmente API-compatible integrado en el cliente V1, por lo que no es necesario realizar ningún otro cambio en el código.

## Migre V1-transitional los clientes a los clientes de la versión 2 para escribir nuevos formatos
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

El cliente V2 forma parte del [ Amazon.Extensions.S3.Encryption ](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet paquete. Permite a las aplicaciones descifrar tanto la V1 como los V2-encrypted objetos (si está configurado para ello), pero cifra los objetos solo en V2-compatible formato.

Después de actualizar los clientes existentes para leer el nuevo formato de cifrado, puede proceder a actualizar las aplicaciones sin problemas a la versión 2 de los clientes de cifrado y descifrado. Realice los siguientes pasos en cada una de las aplicaciones para utilizar el cliente de la versión 2:

1. Cambie `EncryptionMaterials` a `EncryptionMaterialsV2`.

   1. Si usa KMS:

      1. Proporcione un ID de clave de KMS.

      1. Declare el método de cifrado que está utilizando, esto es, `KmsType.KmsContext`.

      1. Proporcione un contexto de cifrado a KMS para asociarlo a esta clave de datos. Puede enviar un diccionario vacío (el contexto de cifrado de Amazon se seguirá combinando), pero se recomienda incluir más contexto.

   1. Si usa métodos de empaquetado de claves proporcionados por el usuario (cifrado simétrico o asimétrico):

      1. Proporcione una instancia de `AES` o de `RSA` que contenga los materiales de cifrado.

      1. Declare qué algoritmo de cifrado utilizar, esto es, `SymmetricAlgorithmType.AesGcm` o `AsymmetricAlgorithmType.RsaOaepSha1`.

1. Cambie `AmazonS3CryptoConfiguration` a `AmazonS3CryptoConfigurationV2` con la propiedad `SecurityProfile` establecida en `SecurityProfile.V2AndLegacy`.

1. Cambie `AmazonS3EncryptionClient` a `AmazonS3EncryptionClientV2`. Este cliente toma los objetos `AmazonS3CryptoConfigurationV2` y `EncryptionMaterialsV2` recién convertidos de los pasos anteriores.

### Ejemplo: de KMS a KMS\+Contexto
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**Pre-migration**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migration**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### Ejemplo: algoritmo simétrico (AES-CBC hasta AES-GCM el ajuste de claves)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode` puede ser `ObjectMetadata` o `InstructionFile`.

**Pre-migration**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migration**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**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ó.

### Ejemplo: algoritmo asimétrico (de RSA a Key Wrap) RSA-OAEP-SHA1
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode` puede ser `ObjectMetadata` o `InstructionFile`.

**Pre-migration**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migration**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## Actualización de clientes de la versión 2 para que dejen de leer formatos de la versión 1
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

Con el tiempo, todos los objetos acabarán cifrándose o volviéndose a cifrar con un cliente de la versión 2. *Una vez completada esta conversión*, puede deshabilitar la compatibilidad con la versión 1 en los clientes de la versión 2 estableciendo la propiedad `SecurityProfile` en `SecurityProfile.V2`, como se muestra en el siguiente fragmento de código.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```