View a markdown version of this page

Migración del cliente de cifrado Amazon S3 (V1 a V2) - AWS SDK para .NET (V3)

El soporte de la AWS SDK para .NET V3 ha llegado al final del período de soporte.

Le recomendamos que migre a la V4.AWS SDK para .NET Para obtener información y detalles adicionales sobre cómo realizar la migración, consulte nuestro anuncio de fin de soporte.

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)

nota

Si utiliza la V2 y desea migrar a la V4, consulteMigración del cliente de cifrado Amazon S3 (V2 a V4).

En este tema se muestra cómo migrar las aplicaciones de la versión 1 (V1) del cliente de cifrado de 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.

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 los objetos V1 como los V2-encrypted objetos, pero solo cifra los objetos en formato. V1-compatible El cliente V2 puede descifrar tanto los objetos V1 como V2-encrypted los objetos (si está activado para los objetos V1), pero solo cifra los objetos en formato. V2-compatible

Información general sobre la migración

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 a V1-transitional 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 versión 2 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.

  2. Migre V1-transitional los clientes a los clientes de la versión 2 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 enV2AndLegacy. Al configurar este perfil de seguridad en los clientes V2, estos clientes pueden descifrar los objetos que estaban cifrados en V1-compatible formato.

  3. 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 versión 2 y todos los objetos se hayan cifrado o vuelto a cifrar en V2-compatible formato, defina el perfil de seguridad de la versión 2 V2 en lugar de. V2AndLegacy Esto impide el descifrado de los objetos que están en V1-compatible formato.

Actualice los clientes existentes a V1-transitional clientes para leer nuevos formatos

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 que sus aplicaciones descifren tanto la V1 como los V2-encrypted objetos. Este cliente forma parte del 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 del Amazon.Extensions.S3.Encryptionpaquete. Si su proyecto depende directamente de AWSSDK.KeyManagementServicelos paquetes AWSSDK.S3o, debe actualizar esas dependencias o eliminarlas para que sus versiones actualizadas se incluyan en este nuevo paquete.

  2. 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;
  3. Recompile y vuelva a implementar la aplicación.

El V1-transitional cliente es totalmente compatible API-compatible con 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

El cliente V2 forma parte del Amazon.Extensions.S3.Encryption NuGet paquete. Permite a las aplicaciones descifrar tanto la V1 como los V2-encrypted objetos (si están configurados para hacerlo), 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.

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

      3. 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.

    2. 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.

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

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

  3. 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

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 a AES-GCM Key Wrap)

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

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

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);