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 (V2 a V3)
nota
Si utiliza la V1 del cliente de cifrado S3, primero debe migrar a la V2 antes de migrar a la V3. Consulte Migración del cliente de cifrado Amazon S3 (V1 a V2) para obtener instrucciones sobre cómo migrar de la V1 a la V2.
En este tema se muestra cómo migrar las aplicaciones de la versión 2 (V2) del cliente de cifrado Amazon Simple Storage Service (Amazon S3) a la versión 3 (V3) y cómo garantizar la disponibilidad de las aplicaciones durante todo el proceso de migración. La versión 3 presenta el AES GCM con políticas clave de compromiso y compromiso para mejorar la seguridad y la protección contra la manipulación de las claves de datos.
Información general sobre la migración
La versión 3 del cliente de cifrado Amazon S3 presenta AES GCM con Key Commitment para mejorar la seguridad. Este nuevo algoritmo de cifrado proporciona protección contra la manipulación de las claves de datos y garantiza la integridad de los datos cifrados. La migración a la versión 3 requiere una planificación cuidadosa para mantener la disponibilidad de las aplicaciones y la accesibilidad de los datos durante todo el proceso.
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. Esto permitirá a los clientes de cifrado V2 existentes descifrar los objetos escritos por los nuevos clientes V3. Si su aplicación usa varios AWS SDKs, debe actualizar cada SDK por separado.
2. Migre los clientes de cifrado y descifrado a la versión 3. Una vez que todos sus clientes de cifrado V2 puedan leer nuevos formatos, puede migrar los clientes de cifrado y descifrado existentes a sus respectivas versiones V3. Esto incluye configurar las políticas de compromiso y actualizar el código para utilizar las nuevas opciones de configuración del cliente.
Si aún no ha migrado de la V1 a la V2, primero debe completar la migración. Consulte Migración del cliente de cifrado Amazon S3 (V1 a V2) para obtener instrucciones detalladas sobre la migración de la V1 a la V2.
Comprensión de las funciones de la V3
La versión 3 del cliente de cifrado Amazon S3 presenta dos características de seguridad clave: políticas de compromiso y AES GCM con compromiso clave. Comprender estas características es esencial para planificar su estrategia de migración y garantizar la seguridad de sus datos cifrados.
Políticas de compromiso
Las políticas de compromiso controlan la forma en que el cliente de cifrado gestiona el compromiso de claves durante las operaciones de cifrado y descifrado. El compromiso clave garantiza que los datos cifrados solo se puedan descifrar con la clave exacta que se utilizó para cifrarlos, lo que los protege contra ciertos tipos de ataques criptográficos.
El cliente de cifrado V3 admite tres opciones de política de compromiso:
FORBID_ENCRYPT_ALLOW_DECRYPT
Esta política cifra los objetos sin compromiso de clave y permite descifrar ambos objetos con o sin compromiso de clave.
-
Comportamiento de cifrado: los objetos se cifran sin compromiso de clave y utilizan el mismo conjunto de algoritmos que V2.
-
Comportamiento de descifrado: puede descifrar objetos cifrados con o sin compromiso de clave.
-
Implicaciones de seguridad: esta política no impone un compromiso clave y puede permitir la manipulación. Los objetos cifrados con esta política no se benefician de las protecciones de seguridad mejoradas que conlleva un compromiso clave. Utilice esta política solo durante la migración cuando necesite mantener la compatibilidad con el comportamiento de cifrado de la versión 2.
-
Compatibilidad de versiones: los objetos cifrados con esta política pueden leerse en todas las implementaciones V2 y V3 del cliente de cifrado S3.
REQUIRE_ENCRYPT_ALLOW_DECRYPT
Esta política cifra los objetos con compromiso de clave y permite descifrar ambos objetos con o sin compromiso de clave.
-
Comportamiento de cifrado: los objetos se cifran con un compromiso de clave mediante el AES GCM con un compromiso de clave.
-
Comportamiento de descifrado: puede descifrar objetos cifrados con o sin compromiso de clave, lo que proporciona compatibilidad con versiones anteriores.
-
Implicaciones de seguridad: los objetos nuevos se benefician de la protección con compromiso clave, mientras que los objetos existentes sin compromiso clave aún se pueden leer. Esto proporciona un equilibrio entre la seguridad y la compatibilidad con versiones anteriores durante la migración.
-
Compatibilidad de versiones: los objetos cifrados con esta política solo los pueden leer las implementaciones V3 y V2 más recientes del cliente de cifrado S3.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Esta política cifra los objetos con un compromiso de clave y solo permite descifrar los objetos que se cifraron con un compromiso de clave.
-
Comportamiento de cifrado: los objetos se cifran con un compromiso de clave mediante el AES GCM con un compromiso de clave.
-
Comportamiento de descifrado: solo se pueden descifrar los objetos que se cifraron con un compromiso de clave. Los intentos de descifrar objetos sin un compromiso de clave fallarán.
-
Implicaciones de seguridad: esta política proporciona el más alto nivel de seguridad al imponer un compromiso clave en todas las operaciones. Utilice esta política solo después de que todos los objetos se hayan vuelto a cifrar con la clave y de que todos los clientes se hayan actualizado a la versión 3.
-
Compatibilidad de versiones: los objetos cifrados con esta política solo pueden leerse en la versión 3 y las implementaciones más recientes del cliente de cifrado S3 en la versión 2. Esta política también impide leer los objetos cifrados por los clientes V2 o V1.
nota
Cuando planifique la migración, comience por mantener la compatibilidad con versiones anteriores y, REQUIRE_ENCRYPT_ALLOW_DECRYPT al mismo tiempo, obtenga las ventajas de seguridad que supone un compromiso clave con los nuevos objetos. Solo muévase a una REQUIRE_ENCRYPT_REQUIRE_DECRYPT vez que todos los objetos se hayan vuelto a cifrar y todos los clientes se hayan actualizado a la versión 3.
AES GCM con un compromiso clave
El AES GCM con Key Commitment (ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY) es un nuevo algoritmo de cifrado introducido en la versión 3 que proporciona una mayor seguridad al proteger contra la manipulación de las claves de datos. Entender cómo funciona este algoritmo y cuándo se aplica es importante para planificar la migración.
¿En qué ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY se diferencia de los algoritmos anteriores
Las versiones anteriores del cliente de cifrado S3 utilizaban AES CBC o AES GCM sin el compromiso de cifrar la clave de datos en los archivos de instrucciones. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYañade un compromiso criptográfico al proceso de cifrado, que vincula los datos cifrados a una clave específica. Esto evita que un atacante altere la clave de datos cifrada del archivo de instrucciones y provoque que el cliente descifre los datos con una clave incorrecta.
Sin un compromiso clave, es posible que un atacante modifique la clave de datos cifrados de un archivo de instrucciones para convertirla en una clave diferente, lo que podría provocar el acceso no autorizado o la corrupción de los datos. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYevita este ataque al garantizar que la clave de datos cifrados solo pueda descifrarse con la clave original que se utilizó durante el cifrado.
Compatibilidad de versiones
Los objetos cifrados solo se ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY pueden descifrar mediante las implementaciones de la versión 3 del cliente de cifrado S3 y determinadas versiones de transición de la versión 2, que incluyen soporte para leer los formatos de la versión 3. Los clientes de la versión 2 que no admiten esta transición no pueden descifrar los archivos de instrucciones cifrados con. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY
aviso
Antes de habilitar el cifrado ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY (mediante políticas de uso REQUIRE_ENCRYPT_ALLOW_DECRYPT o de REQUIRE_ENCRYPT_REQUIRE_DECRYPT compromiso), asegúrese de que todos los clientes que necesiten leer los objetos cifrados se hayan actualizado a la versión 3 o a una versión de transición que admita los formatos de la versión 3. Si algún cliente de la versión 2 sin soporte de transición intenta leer los objetos cifrados con ellosALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, el descifrado fallará.
Durante la migración, puede utilizar la política de FORBID_ENCRYPT_ALLOW_DECRYPT compromiso para seguir cifrando sin embargo y, al ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY mismo tiempo, permitir que sus clientes de la versión 3 lean los objetos cifrados con el compromiso de clave. Esto proporciona una ruta de migración segura en la que primero se actualizan todos los lectores y, a continuación, se pasa al cifrado con el compromiso de clave.
Actualizar los clientes existentes para leer nuevos formatos
El cliente de cifrado V3 utiliza algoritmos de cifrado y funciones de compromiso clave que los clientes V2 no admiten de forma predeterminada. El primer paso de la migración consiste en actualizar los clientes de descifrado de la versión 2 a una versión del AWS SDK para Ruby que pueda leer los objetos cifrados de la versión 3. Tras completar este paso, los clientes V2 de tu aplicación podrán descifrar los objetos cifrados por los clientes de cifrado V3.
Para leer los objetos cifrados por los clientes de la versión 3 (aquellos que utilizan políticas REQUIRE_ENCRYPT_ALLOW_DECRYPT o se REQUIRE_ENCRYPT_REQUIRE_DECRYPT comprometen a utilizarlas), debe utilizar la versión 1.93.0 o posterior de la gema. aws-sdk-s3 Esta versión incluye soporte para descifrar objetos cifrados con AES GCM con Key Commitment.
Instalación desde la línea de comandos
Para los proyectos que instalan la aws-sdk-s3 gema desde la línea de comandos, utilice la opción de versión para comprobar que está instalada la versión mínima de la 1.208.0.
gem install aws-sdk-s3 -v '>= 1.208.0'
Uso de archivos Gemfile
Para los proyectos que usan un Gemfile para administrar las dependencias, establece la versión mínima de la gema en 1.208.0. aws-sdk-s3 Por ejemplo:
gem 'aws-sdk-s3', '>= 1.208.0'
-
Modifica tu Gemfile para especificar la versión mínima.
-
Ejecuta
bundle update aws-sdk-s3para actualizar la gema. -
Para comprobar su versión, ejecute
bundle info aws-sdk-s3.
nota
Tras actualizar a la última versión, sus clientes de cifrado V2 existentes podrán descifrar los objetos cifrados por los clientes V3. Sin embargo, seguirán cifrando los objetos nuevos mediante los algoritmos de la V2 hasta que los migre a la V3, tal y como se describe en la siguiente sección.
Migre los clientes de cifrado y descifrado a la V3
Tras actualizar sus clientes para que lean los nuevos formatos de cifrado, puede actualizar sus aplicaciones a los clientes de cifrado y descifrado de la V3. Los siguientes pasos le muestran cómo migrar correctamente su código de la V2 a la V3.
Antes de actualizar el código para usar el cliente de cifrado V3, asegúrese de haber seguido los pasos anteriores y de utilizar la aws-sdk-s3 gema en la versión 1.93.0 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 hace para verificar que el objeto no se ha modificado desde que se cifró.
Configuración de los clientes V3
El cliente de cifrado V3 presenta nuevas opciones de configuración que controlan el comportamiento del compromiso de claves y la compatibilidad con versiones anteriores. Comprender estas opciones es esencial para una migración exitosa.
política_compromiso
El commitment_policy parámetro controla la forma en que el cliente de cifrado gestiona la asignación de claves durante las operaciones de cifrado y descifrado. Esta es la opción de configuración más importante para los clientes de la versión 3.
-
:require_encrypt_allow_decrypt- Cifra los objetos nuevos con un compromiso de clave y permite descifrar objetos con o sin compromiso de clave. Esta es la configuración recomendada para la migración, ya que proporciona una seguridad mejorada para los objetos nuevos y, al mismo tiempo, mantiene la compatibilidad con versiones anteriores de los objetos V2 existentes. -
:forbid_encrypt_allow_decrypt- Cifra los objetos nuevos sin compromiso de clave (mediante algoritmos V2) y permite descifrar objetos con o sin compromiso de clave. Utilice esta configuración solo si necesita mantener el comportamiento de cifrado de la versión 2 durante la migración, por ejemplo, cuando algunos clientes aún no pueden leer los objetos cifrados de la versión 3. -
:require_encrypt_require_decrypt- Cifra los objetos nuevos con un compromiso de clave y solo permite descifrar los objetos que se cifraron con un compromiso de clave. Utilice esta configuración solo después de que todos los objetos se hayan vuelto a cifrar con la clave de confirmación y de que todos los clientes se hayan actualizado a la versión 3.
perfil de seguridad
El security_profile parámetro determina la compatibilidad con la lectura de objetos escritos por versiones anteriores del cliente de cifrado. Este parámetro es esencial para mantener la compatibilidad con versiones anteriores durante la migración.
-
:v3_and_legacy- Permite al cliente V3 descifrar objetos cifrados por los clientes de cifrado V1 y V2. Utilice esta configuración durante la migración para asegurarse de que sus clientes V3 puedan leer todos los objetos cifrados existentes. -
:v3- Permite al cliente V3 descifrar los objetos cifrados únicamente por los clientes de cifrado V2. Utilice esta configuración si ya ha migrado todos los objetos V1 al formato V2. -
Si no se especifica, el cliente solo descifrará los objetos cifrados por los clientes V3. Úselo solo para el desarrollo de nuevas aplicaciones donde no existan objetos heredados.
envelope_location
El envelope_location parámetro determina dónde se almacenan los metadatos de cifrado (incluida la clave de datos cifrados). Este parámetro afecta a los objetos que AES GCM protege con un compromiso clave.
-
:metadata(Predeterminado): almacena los metadatos de cifrado en los encabezados de metadatos del objeto S3. Este es el comportamiento predeterminado y se recomienda para la mayoría de los casos de uso. Cuando se utiliza el almacenamiento de metadatos, no se aplica el AES GCM con compromiso clave. -
:instruction_file- Almacena los metadatos de cifrado en un objeto S3 independiente (archivo de instrucciones) con un sufijo configurable. Cuando se utilizan archivos de instrucciones, el AES GCM con Key Commitment protege la clave de datos cifrados contra la manipulación. Utilice esta configuración si necesita la seguridad adicional que proporciona el compromiso de clave para la propia clave de datos.
Si lo utiliza:instruction_file, puede especificar opcionalmente el instruction_file_suffix parámetro para personalizar el sufijo utilizado en los objetos del archivo de instrucciones. El sufijo predeterminado es. .instruction
Cuándo utilizar cada opción de configuración
Durante la migración, siga esta estrategia de configuración recomendada:
-
Migración inicial: defina
commitment_policy: :require_encrypt_allow_decryptysecurity_profile: :v3_and_legacy. Esto permite a sus clientes de V3 cifrar nuevos objetos con un compromiso de clave y, al mismo tiempo, poder descifrar todos los objetos V1 y V2 existentes. -
Una vez que se hayan actualizado todos los clientes: continúe utilizando
commitment_policy: :require_encrypt_allow_decryptysecurity_profile: :v3_and_legacyhasta que haya vuelto a cifrar todos los objetos que necesiten protección mediante compromiso de clave. -
Aplicación completa de la versión 3: solo después de que todos los objetos se hayan vuelto a cifrar con la clave de confirmación y ya no sea necesario leer los objetos de las versiones 1/V2, puede cambiar al
security_profileparámetrocommitment_policy: :require_encrypt_require_decrypty eliminarlo (o configurarlo:v2si aún existen objetos con la versión V2).
envelope_locationPues sigue usando tu método de almacenamiento actual (:metadatao:instruction_file) a menos que tengas un motivo específico para cambiarlo. Si actualmente utiliza el almacenamiento de metadatos y desea la seguridad adicional de AES GCM con un compromiso clave para la clave de datos, puede cambiarse a uno:instruction_file, pero tenga en cuenta que para ello será necesario actualizar todos los clientes que lean estos objetos.
Migre los clientes de cifrado y descifrado a la versión 3
Tras actualizar sus clientes para que lean los nuevos formatos de cifrado, puede actualizar sus aplicaciones a los clientes de cifrado y descifrado de la V3. Los siguientes ejemplos muestran cómo migrar correctamente el código de la V2 a la V3.
Uso de clientes de cifrado V3
Antes de la migración (V2)
require 'aws-sdk-s3' # Create V2 encryption client with KMS client = Aws::S3::EncryptionV2::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy, commitment_policy: :forbid_encrypt_allow_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Durante la migración (versión 3 con compatibilidad con versiones anteriores)
require 'aws-sdk-s3' # Create V3 encryption client with KMS client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Después de la migración (V3)
require 'aws-sdk-s3' # Create V3 encryption client with KMS client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3, # Use the commitment policy (REQUIRE_ENCRYPT_REQUIRE_DECRYPT) # This encrypts with key commitment and does not decrypt V2 objects commitment_policy: :require_encrypt_require_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
La diferencia clave en la V3 es la adición del parámetro. commitment_policy Al configurarlo, se :require_encrypt_require_decrypt garantiza que los objetos nuevos se cifren con un compromiso de clave y que el cliente solo descifre los objetos cifrados con ese compromiso, lo que proporciona una mayor seguridad contra la manipulación de las claves de datos.
La put_object llamada en sí misma permanece inalterada. Todas las mejoras de seguridad se configuran a nivel de cliente.
Ejemplos adicionales
En esta sección se proporcionan ejemplos adicionales de escenarios de migración específicos y opciones de configuración que pueden resultar útiles durante la migración de la versión 2 a la versión 3.
Archivo de instrucciones versus almacenamiento de metadatos
El cliente de cifrado de S3 puede almacenar los metadatos de cifrado (incluida la clave de datos cifrados) en dos ubicaciones diferentes: en los encabezados de metadatos del objeto S3 o en un archivo de instrucciones independiente. La elección del método de almacenamiento afecta a los objetos que se benefician del AES GCM con la protección Key Commitment.
Almacenamiento de metadatos (predeterminado)
De forma predeterminada, el cliente de cifrado almacena los metadatos de cifrado en los encabezados de metadatos del objeto S3. Este es el enfoque recomendado para la mayoría de los casos de uso, ya que conserva los metadatos de cifrado con el objeto y no requiere la administración de objetos separados del archivo de instrucciones.
require 'aws-sdk-s3' # Create V3 encryption client with metadata storage (default) client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt, envelope_location: :metadata # Explicitly set to metadata (this is the default) ) # Encrypt and upload object # Encryption metadata is stored in the object's metadata headers client.put_object(bucket: 'my-bucket', key: 'my-object',body: 'secret data')
Cuando se utiliza el almacenamiento de metadatos, el AES GCM con clave de compromiso no se aplica a la clave de datos cifrados. Sin embargo, el cifrado del contenido sigue beneficiándose del compromiso de clave cuando se utiliza commitment_policy: :require_encrypt_allow_decrypt o:require_encrypt_require_decrypt.
Almacenamiento de archivos de instrucciones
Como alternativa, puede configurar el cliente de cifrado para almacenar los metadatos de cifrado en un objeto S3 independiente denominado archivo de instrucciones. Al utilizar los archivos de instrucciones con la versión V3, la clave de datos cifrada está protegida por AES GCM con el compromiso de clave, lo que proporciona una seguridad adicional contra la manipulación de las claves de datos.
require 'aws-sdk-s3' # Create V3 encryption client with instruction file storage client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt, envelope_location: :instruction_file, # Store metadata in separate instruction file instruction_file_suffix: '.instruction' # Optional: customize the suffix (default is '.instruction') ) # Encrypt and upload object # Encryption metadata is stored in a separate object: 'my-object.instruction' client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # When retrieving the object, the client automatically reads the instruction file resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Cuando se utilizaenvelope_location: :instruction_file, el cliente de cifrado crea dos objetos S3:
-
El objeto de datos cifrado (por ejemplo,
my-object) -
El archivo de instrucciones que contiene los metadatos de cifrado (por ejemplo,
my-object.instruction)
El instruction_file_suffix parámetro permite personalizar el sufijo utilizado en los archivos de instrucciones. El valor predeterminado es .instruction.
Cuándo usar cada método de almacenamiento
-
Utilice el almacenamiento de metadatos en la mayoría de los escenarios. Simplifica la administración de objetos, ya que los metadatos de cifrado viajan con el objeto.
-
Utilice el almacenamiento de archivos de instrucciones cuando el tamaño de los metadatos del objeto sea un problema o cuando necesite separar los metadatos de cifrado del objeto cifrado. Tenga en cuenta que el uso de los archivos de instrucciones requiere administrar dos objetos S3 (el objeto cifrado y su archivo de instrucciones) en lugar de uno.
aviso
Si cambia del almacenamiento de metadatos al almacenamiento de archivos de instrucciones (o viceversa), los clientes configurados con el nuevo método de almacenamiento no podrán leer los objetos existentes cifrados con el método de almacenamiento anterior. Planifique cuidadosamente el método de almacenamiento y mantenga la coherencia en toda la aplicación.