Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS) - Amazon Simple Storage Service

Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS)

importante

Amazon S3 aplica ahora el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) como el nivel básico de cifrado para cada bucket de Amazon S3. Desde el 5 de enero de 2023, todas las cargas de objetos nuevos a Amazon S3 se cifran automáticamente sin costo adicional y sin afectar al rendimiento. El estado de cifrado automático para la configuración de cifrado predeterminada en el bucket de S3 y para cargas de objetos nuevos está disponible en registros de AWS CloudTrail, Inventario de S3, Lente de almacenamiento de S3, la consola de Amazon S3 y como encabezado de respuesta a la API de Amazon S3 adicional en AWS Command Line Interface y los SDK de AWS. Para obtener más información, consulte Preguntas frecuentes del cifrado predeterminado.

El cifrado del lado del servidor es el cifrado de datos en su destino por la aplicación o servicio que los recibe.

Amazon S3 habilita automáticamente el cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) para cargar objetos nuevos.

A menos que especifique lo contrario, los buckets utilizan SSE-S3 de forma predeterminada para cifrar objetos. Sin embargo, puede elegir configurar buckets para utilizar el cifrado del lado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS). Para obtener más información, consulte Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS).

AWS KMS es un servicio que combina hardware y software seguros y de alta disponibilidad para ofrecer un sistema de administración de claves adaptado a la nube. Amazon S3 utiliza el cifrado del lado del servidor con AWS KMS (SSE-KMS) para cifrar los datos de objetos de S3. Además, cuando se solicita SSE-KMS para el objeto, la suma de comprobación de S3 (como parte de los metadatos del objeto) se almacena de forma cifrada. Para obtener más información acerca de la suma de comprobación, consulte Comprobación de la integridad de objetos.

Si utiliza claves KMS, puede utilizar AWS KMS en toda la AWS Management Console o la API de AWS KMS para hacer lo siguiente:

  • Cree, vea, edite, monitoree, habilite o desactive, rote y programe la eliminación de claves de KMS de forma centralizada.

  • Defina las políticas que controlan cómo y quién puede utilizar las claves KMS.

  • Auditar su uso para demostrar que se están utilizando correctamente. Las auditorías están admitidas por la API de AWS KMS, pero no por la AWS Management Console de AWS KMS.

Los controles de seguridad de AWS KMS pueden ayudarlo a cumplir los requisitos de conformidad relacionados con el cifrado. Puede usar estas claves de KMS para proteger sus datos en buckets de Amazon S3. Al utilizar el cifrado SSE-KMS con un bucket de S3, AWS KMS keys debe estar en la misma región que ese bucket.

La utilización de AWS KMS keys conlleva cargos adicionales. Para obtener más información, consulte AWS KMS key los conceptos en la AWS Key Management Service Guía para desarrolladores y AWS KMS los precios.

Permisos

Para cargar un objeto cifrado con una AWS KMS key en Amazon S3, es necesario contar con los permisos kms:GenerateDataKey en la clave. Para descargar un objeto cifrado con una AWS KMS key, es necesario contar con los permisos kms:Decrypt. Para obtener más información sobre los permisos AWS KMS necesarios para las cargas multiparte, consulte API y permisos de carga multiparte.

AWS KMS keys

Cuando utiliza el cifrado del lado del servidor con AWS KMS (SSE-KMS), puede utilizar la clave administrada por AWS predeterminada o especificar una clave administrada por el cliente que ya haya creado. AWS KMS admite el cifrado de sobres. S3 utiliza las funciones de AWS KMS para cifrado de sobres para proteger aún más los datos. El cifrado de sobres es la práctica de cifrar los datos que son texto no cifrado con una clave de datos y, a continuación, cifrar la propia clave de datos con una clave KMS. Para obtener más información acerca del cifrado de sobre, consulte Cifrado de sobre en la guía para desarrolladores de AWS Key Management Service.

Si no especifica una clave administrada por el cliente, Amazon S3 creará de manera automática una Clave administrada de AWS en su Cuenta de AWS la primera vez que agregue un objeto cifrado con SSE-KMS a un bucket. De forma predeterminada, Amazon S3 utiliza esta clave de KMS para SSE-KMS.

nota

Los objetos cifrados mediante SSE-KMS con Claves administradas por AWS no se pueden compartir entre cuentas. Si necesita compartir datos de SSE-KMS entre cuentas, debe utilizar una clave administrada por el cliente de AWS KMS.

Si desea utilizar una clave administrada por el cliente para SSE-KMS, cree una clave administrada por el cliente de cifrado simétrico antes de configurar SSE-KMS. Luego cuando configure SSE-KMS para el bucket, especifique la clave administrada por el cliente existente. Para obtener más información sobre la clave de cifrado simétrica, consulte Symmetric encryption KMS keys (Claves de KMS de cifrado simétricas) en la Guía para desarrolladores de AWS Key Management Service.

Crear una clave administrada por el cliente le da más flexibilidad y control. Por ejemplo, puede crear, rotar y deshabilitar las claves administradas por el cliente. También puede definir controles de acceso y auditar las claves administradas por el cliente que utiliza para proteger sus datos. Para obtener más información acerca de las claves administradas por el cliente y AWS, consulte Claves de cliente y claves de AWS en la Guía para desarrolladores de AWS Key Management Service.

nota

Cuando utiliza el cifrado del lado del servidor con una clave administrada por el cliente que se almacena en un almacén de claves externo, a diferencia de las claves de KMS estándar, es responsable de garantizar la disponibilidad y la durabilidad del material de la clave. Para obtener más información sobre los almacenes de claves externos y cómo cambian el modelo de responsabilidad compartida, consulte Almacenes de claves externos en la Guía para desarrolladores de AWS Key Management Service.

Si elige cifrar los datos mediante una Clave administrada de AWS o una clave administrada por el cliente, AWS KMS y Amazon S3 llevan a cabo las siguientes acciones de cifrado de sobre:

  1. Amazon S3 solicita una clave de datos en texto no cifrado y una copia de la clave cifrada con la clave de KMS especificada.

  2. AWS KMS crea una clave de datos, la cifra con la clave KMS y envía la clave de datos en texto no cifrado y la clave de datos cifrada a Amazon S3.

  3. Amazon S3 cifra los datos con la clave de datos y elimina la clave en texto no cifrado de la memoria tan pronto como sea posible después de utilizarla.

  4. Amazon S3 almacena la clave de datos cifrada como metadatos con el archivo de datos.

Cuando se solicita que se descifren los datos, Amazon S3 y AWS KMS realizan las siguientes acciones:

  1. Amazon S3 envía la clave de datos cifrada a AWS KMS en una solicitud de Decrypt.

  2. AWS KMS descifra la clave de datos mediante la misma clave KMS y devuelve la clave de datos en texto no cifrado a Amazon S3.

  3. Amazon S3 descifra los datos cifrados, mediante la clave de datos de texto no cifrado y elimina la clave de datos de texto no cifrado de la memoria tan pronto como sea posible.

importante

Cuando utilice una AWS KMS key para el cifrado en el lado del servidor en Amazon S3, debe elegir una clave de cifrado de KMS simétrica. Amazon S3 solo admite claves KMS de cifrado simétricas. Para obtener más información sobre estas claves, consulte Symmetric encryption KMS keys (Claves de KMS de cifrado simétricas) en la Guía para desarrolladores de AWS Key Management Service.

Para identificar las solicitudes que especifican SSE-KMS, puede utilizar las métricas de Todas las solicitudes de SSE-KMS y Porcentaje de todas las solicitudes de SSE-KMS de SSE-KMS en las métricas de Lente de almacenamiento de Amazon S3. Lente de almacenamiento de S3 es una función de análisis de almacenamiento en la nube que puede utilizar para obtener visibilidad en toda la organización sobre el uso y la actividad del almacenamiento de objetos. Para obtener más información, consulte Evaluación de la actividad y el uso de almacenamiento con S3 Storage Lens. Para obtener una lista completa de las métricas, consulte el Glosario de métricas de Lente de almacenamiento de S3.

Claves de bucket de Amazon S3

Cuando configure el cifrado del lado del servidor mediante AWS KMS (SSE-KMS), puede configurar los buckets para que utilicen las claves de bucket de S3 para SSE-KMS. Usar una clave de nivel de bucket para SSE-KMS puede reducir los costos de solicitud de AWS KMS hasta en un 99 %, ya que disminuye el tráfico de solicitudes de Amazon S3 a AWS KMS.

Cuando configura un bucket para utilizar claves de bucket de S3 para SSE-KMS en objetos nuevos, AWS KMS genera una clave de bucket que se utiliza en la creación de claves de datos únicas para los objetos en el bucket. Esta clave de bucket de S3 se utiliza durante un periodo limitado dentro de Amazon S3, lo que reduce aún más la necesidad de que Amazon S3 realice solicitudes a AWS KMS para completar las operaciones de cifrado. Para obtener más información sobre el uso de claves de bucket de S3, consulte Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3.

Requisito de cifrado del lado del servidor

Para requerir el cifrado del lado del servidor para todos los objetos en un bucket de Amazon S3 particular, puede usar una política de bucket. Por ejemplo, la siguiente política de bucket deniega el permiso de carga de objeto (s3:PutObject) para todos, si la solicitud no incluye el encabezado x-amz-server-side-encryption-aws-kms-key-id, que solicita el cifrado del lado del servidor con SSE-KMS.

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

Para requerir que una AWS KMS key particular se utilice para cifrar los objetos en un bucket, puede utilizar la clave de condición s3:x-amz-server-side-encryption-aws-kms-key-id. Para especificar la clave de KMS, debe utilizar un nombre de recurso de Amazon (ARN) que tenga el formato arn:aws:kms:region:acct-id:key/key-id. AWS Identity and Access Management no valida si existe la cadena para s3:x-amz-server-side-encryption-aws-kms-key-id.

nota

Al cargar un objeto, puede especificar la clave de KMS con el encabezado x-amz-server-side-encryption-aws-kms-key-id. Si el encabezado no está presente en la solicitud, Amazon S3 asume que se quiere utilizar la clave administrada por Clave administrada de AWS. En cualquier caso, el ID de la clave de AWS KMS que utiliza Amazon S3 para el cifrado de objetos debe coincidir con el ID de la clave de AWS KMS en la política; de lo contrario, Amazon S3 denegará la solicitud.

Para obtener una lista completa de las claves de condición específicas de Amazon S3, consulte Condition keys for Amazon S3 en la Referencia de autorizaciones de servicio.

Contexto de cifrado

Un contexto de cifrado es un conjunto definido de pares clave-valor que contienen información contextual adicional sobre los datos. El contexto de cifrado no está cifrado. Cuando se especifica un contexto de cifrado para una operación de cifrado, Amazon S3 debe especificar el mismo contexto de cifrado que para la operación de descifrado. De lo contrario, se produce un error en el descifrado. AWS KMS utiliza el contexto de cifrado como datos autenticados adicionales (AAD) para admitir el cifrado autenticado. Para obtener más información sobre el contexto de cifrado, consulte Contexto de cifrado en la Guía para desarrolladores de AWS Key Management Service.

De forma predeterminada, Amazon S3 utiliza el nombre de recurso de Amazon (ARN) del objeto o bucket como par del contexto de cifrado:

  • Si utiliza SSE-KMS sin activar una clave de bucket de S3, se utiliza el ARN del objeto como contexto de cifrado.

    arn:aws:s3:::object_ARN
  • Si utiliza SSE-KMS y activa una clave de bucket de S3, se utiliza el ARN del bucket como contexto de cifrado. Para obtener más información sobre las claves de bucket de S3, consulte Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3.

    arn:aws:s3:::bucket_ARN

Si lo desea, puede proporcionar un par de contexto de cifrado adicional mediante el encabezado x-amz-server-side-encryption-context en una solicitud s3:PutObject. No obstante, dado que el contexto de cifrado no está cifrado, asegúrese de no incluir información confidencial. Amazon S3 almacena este par de claves adicional junto con el contexto de cifrado predeterminado. Cuando procesa la solicitud PUT, Amazon S3 agrega el contexto de cifrado predeterminado de aws:s3:arn al que se proporcione.

Puede utilizar el contexto de cifrado para identificar y clasificar las operaciones criptográficas. También puede utilizar el valor ARN del contexto de cifrado predeterminado para realizar un seguimiento de las solicitudes relevantes en AWS CloudTrail consultando qué ARN de Amazon S3 se usó con qué clave de cifrado.

En el campo requestParameters de un archivo de registro de CloudTrail, el contexto de cifrado es similar al siguiente:

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/file_name" }

Cuando utiliza SSE-KMS con la característica opcional de claves de Bucket de S3, el valor del contexto de cifrado es el ARN del bucket.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }

Envío de solicitudes para objetos cifrados de AWS KMS

  • importante

    Todas las solicitudes GET y PUT para los objetos cifrados de AWS KMS deben crearse mediante capa de conexión segura (SSL) o seguridad de la capa de transporte (TLS). Las solicitudes también deben firmarse con credenciales válidas, como AWS Signature Version 4 (o AWS Signature Version 2).

    AWS Signature Version 4 es el proceso de agregar información de autenticación a las solicitudes de AWS enviadas por HTTP. Por seguridad, la mayoría de las solicitudes de AWS se firman con una clave de acceso, que se compone de un ID de clave de acceso y una clave de acceso secreta. Estas dos claves comúnmente se denominan credenciales de seguridad. Para obtener más información, consulte Autenticación de solicitudes (AWS Signature Version 4) y Proceso de firma de Signature Version 4.

  • importante

    Si el objeto utiliza SSE-KMS, no envíe encabezados de solicitud de cifrado para solicitudes GET y HEAD . De lo contrario, aparecerá un error HTTP 400 Bad Request (Solicitud errónea).