Migración del cliente de cifrado Amazon S3 (V1 a V2) - AWS SDK para C++

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 versión 2 del cliente de cifrado Amazon S3 y desea migrar a la versión 3, consulte Migración del cliente de cifrado Amazon S3 (V2 a V3).

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

Esta migración se produce en dos fases:

1. Actualice los clientes existentes para leer nuevos formatos. En primer lugar, implemente una versión actualizada de AWS SDK para C++ en su aplicación. Esto permite a los clientes de cifrado de la versión V1 descifrar los objetos escritos por los nuevos clientes de la versión V2. Si su aplicación usa varios AWS SDKs, debe 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

Primero debe actualizar los clientes existentes a la versión más reciente del SDK. Tras completar este paso, los clientes V1 de su aplicación podrán descifrar los objetos cifrados por los clientes de cifrado V2 sin actualizar la base de código de la aplicación.

Cree e instale la versión más reciente de AWS SDK para C++

Aplicaciones que utilizan el SDK desde el código fuente

Si compilas e instalas la fuente AWS SDK para C++ desde la fuente, descarga o clona la fuente del SDK desde aws/aws-sdk-cppuna GitHub. Luego, repita los pasos de compilación e instalación normales.

Si vas AWS SDK para C++ a actualizar desde una versión anterior a la 1.8.x, consulta este REGISTRO DE CAMBIOS para ver los cambios más importantes introducidos en cada versión principal. Para obtener más información sobre cómo compilar e instalar, consulte. AWS SDK para C++ Obtención del AWS SDK para C++ desde el código fuente

Aplicaciones que utilizan el SDK desde Vcpkg

Si su aplicación utiliza Vcpkg para realizar un seguimiento de las actualizaciones del SDK, simplemente use su método de actualización de Vcpkg existente para actualizar el SDK a la versión más reciente. Tenga en cuenta que hay un retraso entre el momento en que se publica una versión y el momento en que está disponible a través de un administrador de paquetes. La versión más reciente siempre está disponible en la instalación desde el código fuente.

Ejecute el siguiente comando para actualizar el paquete aws-sdk-cpp:

vcpkg upgrade aws-sdk-cpp

Y compruebe la versión del paquete aws-sdk-cpp:

vcpkg list aws-sdk-cpp

La versión debe ser como mínimo la 1.8.24.

Para obtener más información sobre el uso de Vcpkg con AWS SDK para C++, consulte. Obtención del AWS SDK para C++ de un administrador de paquetes

Creación, instalación e implementación de sus aplicaciones

Si su aplicación se enlaza de forma estática con el AWS SDK para C++, no es necesario realizar cambios en el código de la aplicación, pero debe volver a compilarla para utilizar los cambios más recientes del SDK. Este paso no es necesario en el caso de la vinculación dinámica.

Tras actualizar la versión dependiente de la aplicación y comprobar su funcionalidad, proceda a implementar la aplicación en su flota. Una vez completada la implementación de la aplicación, puede pasar a la siguiente fase de migración de la aplicación para utilizar la versión V2 de los clientes de cifrado y descifrado.

Migrar clientes de cifrado y descifrado a la versión V2

En los siguientes pasos, se muestra cómo migrar correctamente el código de la versión V1 a la V2 del cliente de cifrado de Amazon S3. Dado que es necesario realizar cambios en el código, tendrá que volver a crear la aplicación, independientemente de si se vincula estática o dinámicamente con ella. AWS SDK para C++

Uso de los nuevos materiales de cifrado

Con los clientes de cifrado de Amazon S3 V2 y la configuración criptográfica V2, los siguientes materiales de cifrado han quedado obsoletos:

  • SimpleEncryptionMaterials

  • KMSEncryptionMaterials

Se han sustituido por los siguientes materiales de cifrado seguro:

  • SimpleEncryptionMaterialsWithGCMAAD

  • KMSWithContextEncryptionMaterials

Para crear un cliente de cifrado S3 V2, se requieren los siguientes cambios de código:

  • Si utiliza KMSEncryptionMaterials al crear un cliente de cifrado de S3:
    • Al crear un cliente de cifrado de S3 V2, sustituya KMSEncryptionMaterials por KMSWithContextEncryptionMaterials y especifíquelo en la configuración criptográfica V2.

    • Al colocar un objeto con clientes de cifrado de Amazon S3 V2, debe proporcionar de manera explícita un mapa de contexto de cadena-cadena como contexto de KMS para cifrar la CEK. Puede ser un mapa vacío.

  • Si utiliza SimpleEncryptionMaterials al crear un cliente de cifrado de S3:
    • Al crear un cliente de cifrado de Amazon S3 V2, sustituya SimpleEncryptionMaterials por SimpleEncryptionMaterialsWithGCMAAD y especifíquelo en la configuración criptográfica V2.

    • Al colocar un objeto con clientes de cifrado Amazon S3 V2, debe proporcionar de manera explícita un mapa de contexto de cadena-cadena; de lo contrario, el SDK devolverá un error.

Ejemplo: uso del algoritmo KMS/KMSWithContext Key Wrap

Antes de la migración (encapsulamiento de claves de KMS)

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the putObjectRequest object. encryptionClient.PutObject(putObjectRequest);

Tras la migración (empaquetado de claves KMSWith contextuales)

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID); CryptoConfigurationV2 cryptoConfig(materials); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the putObjectRequest object. Aws::Map<Aws::String, Aws::String> kmsContextMap; kmsContextMap.emplace("client", "aws-sdk-cpp"); kmsContextMap.emplace("version", "1.8.0"); encryptionClient.PutObject(putObjectRequest, kmsContextMap /* could be empty as well */);

Ejemplo: uso del algoritmo de encapsulamiento de claves AES/AES-GCM

Antes de la migración (encapsulamiento de claves AES)

auto materials = Aws::MakeShared<SimpleEncryptionMaterials>("s3Encryption", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64)); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the putObjectRequest object. encryptionClient.PutObject(putObjectRequest);

Después de la migración (encapsulamiento de claves AES-GCM)

auto materials = Aws::MakeShared<SimpleEncryptionMaterialsWithGCMAAD>("s3EncryptionV2", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64)); CryptoConfigurationV2 cryptoConfig(materials); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the putObjectRequest object. encryptionClient.PutObject(putObjectRequest, {} /* must be an empty map */);

Ejemplos adicionales

Los ejemplos siguientes muestran cómo abordar casos prácticos específicos relacionados con la migración de la V1 a la V2.

Descifrado de objetos cifrados por clientes de cifrado de Amazon S3 antiguos

De forma predeterminada, no puede usar el cliente de cifrado Amazon S3 V2 para descifrar objetos que se cifraron con algoritmos de ajuste de claves obsoletos o esquemas criptográficos de contenido obsoletos.

Han quedado obsoletos los siguientes algoritmos de empaquetado de claves:

  • KMS

  • AES_KEY_WRAP

Y han quedado obsoletos los siguientes esquemas criptográficos de contenido:

  • CBC

  • CTR

Si utiliza clientes de cifrado de Amazon S3 antiguos AWS SDK para C++ para cifrar los objetos, es probable que utilice los métodos obsoletos si:

  • Ha utilizado SimpleEncryptionMaterials o KMSEncryptionMaterials.

  • Ha utilizado ENCRYPTION_ONLY como Crypto Mode en su configuración criptográfica.

Para utilizar el cliente de cifrado Amazon S3 V2 para descifrar objetos cifrados mediante algoritmos de encapsulamiento de claves obsoletos o esquemas criptográficos de contenido obsoletos, debe anular el valor predeterminado de SecurityProfile en la configuración criptográfica V2 de V2 a V2_AND_LEGACY.

Ejemplo

Antes de la migración

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Después de la migración

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID); CryptoConfigurationV2 cryptoConfig(materials); cryptoConfig.SetSecurityProfile(SecurityProfile::V2_AND_LEGACY); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Descifrado de objetos con un rango

Con los clientes de cifrado de Amazon S3 antiguos, puede especificar el rango de bytes que se van a recibir al descifrar un objeto de S3. En el cliente de cifrado Amazon S3 V2, esta función está configurada como DISABLED de manera predeterminada. Por lo tanto, debe anular el valor predeterminado de RangeGetMode de DISABLED a ALL en la configuración criptográfica de la versión 2.

Ejemplo

Antes de la migración

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the getObjectRequest object. getObjectRequest.WithRange("bytes=38-75"); encryptionClient.GetObject(getObjectRequest);

Después de la migración

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID); CryptoConfigurationV2 cryptoConfig(materials); cryptoConfig.SetUnAuthenticatedRangeGet(RangeGetMode::ALL); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the getObjectRequest object. getObjectRequest.WithRange("bytes=38-75"); encryptionClient.GetObject(getObjectRequest);

Descifrado de objetos con cualquier CMK

Al descifrar objetos que se han cifrado con KMSWithContextEncryptionMaterials, los clientes de cifrado de Amazon S3 V2 pueden permitir que KMS encuentre la CMK adecuada proporcionando una clave maestra vacía. Esta característica está configurada DISABLED como de forma predeterminada. Debe configurarla de forma explícita llamando a SetKMSDecryptWithAnyCMK(true) para sus materiales de cifrado de KMS.

Ejemplo

Antes de la migración

auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", ""/* provide an empty KMS Master Key*/); CryptoConfiguration cryptoConfig; S3EncryptionClient encryptionClient(materials, cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Después de la migración

auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", ""/* provide an empty KMS Master Key*/); materials.SetKMSDecryptWithAnyCMK(true); CryptoConfigurationV2 cryptoConfig(materials); S3EncryptionClientV2 encryptionClient(cryptoConfig); // Code snippet here to setup the getObjectRequest object. encryptionClient.GetObject(getObjectRequest);

Para obtener el código completo de todos estos escenarios de migración, consulte el ejemplo de cifrado de Amazon S3 en Github.