Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS) - Amazon Simple Storage Service

Especificación del cifrado del lado del servidor con 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.

Todos los buckets de Amazon S3 tienen el cifrado configurado de forma predeterminada y todos los objetos nuevos cargados en un bucket de S3 se cifran automáticamente en reposo. El cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3) es la configuración de cifrado predeterminada para cada bucket de Amazon S3. Para usar otro tipo de cifrado, puede especificar el tipo de cifrado del servidor que se utilizará en las solicitudes PUT de S3 o puede establecer la configuración de cifrado predeterminada en el bucket de destino.

Si desea especificar un tipo de cifrado diferente en sus solicitudes PUT, puede utilizar el cifrado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS), el cifrado del servidor de doble capa con claves de AWS KMS (DSSE-KMS) o el cifrado del servidor con claves proporcionadas por el cliente (SSE-C). Si desea establecer una configuración de cifrado predeterminada diferente en el bucket de destino, puede usar SSE-KMS o DSSE-KMS.

Puede aplicar cifrado cuando cargue un objeto nuevo o copie un objeto existente.

Puede especificar SSE-KMS mediante el uso de la consola de Amazon S3, las operaciones de la API de REST, los SDK de AWS y la AWS Command Line Interface (AWS CLI). Para obtener más información, consulte los siguientes temas.

nota

Puede utilizar AWS KMS keys de varias regiones en Amazon S3. No obstante, Amazon S3 trata las claves de varias regiones como si fueran claves de una sola región y no utiliza las características de varias regiones de la clave. Para obtener más información, consulte Uso de claves de varias regiones en la Guía para desarrolladores de AWS Key Management Service.

nota

Si desea utilizar una clave de KMS propiedad de una cuenta diferente, primero debe tener permiso para utilizar la clave. Para obtener más información sobre los permisos entre cuentas para las claves de KMS, consulte Crear claves de KMS que otras cuentas puedan utilizar en la Guía para desarrolladores de AWS Key Management Service.

En este tema se describe cómo configurar o cambiar el tipo de cifrado de un objeto para utilizar el cifrado del lado del servidor con claves de AWS Key Management Service (AWS KMS) (SSE-KMS) mediante la consola de Amazon S3.

nota

Si cambia el cifrado de un objeto, se crea un nuevo objeto para reemplazar el antiguo. Si el control de versiones de S3 está activado, se crea una nueva versión del objeto y el objeto existente se convierte en una versión anterior. El rol que cambia la propiedad también se convierte en el propietario del nuevo objeto o (versión del objeto).

Para añadir o cambiar el cifrado de un objeto
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En el panel de navegación izquierdo, elija Instancias.

  3. En la lista Buckets (Buckets), elija el nombre del bucket que contiene el objeto.

  4. En la lista Objects (Objetos), seleccione el nombre del objeto al que desea agregar cifrado o cuyo cifrado desea modificar.

    Aparece la página de detalles del objeto, con varias secciones que muestran las propiedades del objeto.

  5. Elija la pestaña Propiedades.

  6. Desplácese hacia abajo hasta la sección Configuración del cifrado del lado del servidor y elija Editar.

    Se abre la página Edit server-side encryption (Editar cifrado del lado del servidor).

  7. En Cifrado del lado del servidor, en Configuración del cifrado, elija Anular la configuración predeterminada del bucket de cifrado.

  8. En Tipo de cifrado, seleccione Cifrado del servidor con claves de AWS Key Management Service (SSE-KMS).

    importante

    Si utiliza la opción de SSE-KMS para la configuración de cifrado predeterminado, se le aplicarán las cuotas de solicitudes por segundo (RPS) de AWS KMS. Para obtener más información acerca de las cuotas de AWS KMS y cómo solicitar un aumento de cuota, consulte Cuotas en la Guía para desarrolladores de AWS Key Management Service.

  9. En Clave de AWS KMS, siga una de las siguientes opciones para elegir su clave de KMS:

    • Para seleccionar en una lista de claves de KMS disponibles, marque Elija entre sus claves de AWS KMS keys y seleccione su clave de KMS en la lista de claves disponibles.

      En esta lista aparecen tanto la Clave administrada de AWS (aws/s3) como las claves administradas por el cliente. Para obtener más información acerca de las claves administradas por el cliente, consulte Claves de cliente y claves de AWS en la Guía para desarrolladores de AWS Key Management Service.

    • Para introducir el ARN de la clave de KMS, elija Introducir el ARN de la clave de AWS KMS key e introduzca el ARN de la clave de KMS en el campo que aparece.

    • Para crear una nueva clave administrada por el cliente en la consola de AWS KMS, elija Crear una clave de KMS.

      Para obtener más información acerca de cómo crear una AWS KMS key, consulte Creación de claves en la AWS Key Management Service Guía para desarrolladores.

    importante

    Solo puede utilizar las claves de KMS que estén disponibles en la misma Región de AWS del bucket. La consola de Amazon S3 solo muestra las primeras 100 claves de KMS de la misma región del bucket. Para utilizar una clave de KMS que no aparezca en la lista, debe introducir el ARN de la clave de KMS. Si desea utilizar una clave de KMS propiedad de una cuenta de diferente, primero debe tener permiso para utilizar la clave y, después, debe introducir el ARN de la clave de KMS.

    Amazon S3 admite solo claves KMS de cifrado simétricas y no claves KMS asimétricas. Para obtener más información, consulte Identificación de claves de KMS simétricas y asimétricas en la Guía para desarrolladores de AWS Key Management Service.

  10. Elija Guardar cambios.

nota

En esta acción se aplica el cifrado a todos los objetos especificados. Al cifrar carpetas, espere a que finalice la operación de guardado para agregar nuevos objetos a la carpeta.

Cuando cree un objeto, es decir, cuando cargue un objeto nuevo o copie uno existente, podrá especificar el uso del cifrado del lado del servidor con AWS KMS keys (SSE-KMS) para cifrar los datos. Para ello, añada el encabezado x-amz-server-side-encryption a la solicitud. Configure el valor del encabezado para el algoritmo de cifrado aws:kms. Amazon S3 confirma que su objeto fue guardado con SSE-KMS al devolver el encabezado de respuesta x-amz-server-side-encryption.

Si especifica el encabezado x-amz-server-side-encryption con un valor de aws:kms, también puede utilizar los siguientes encabezados de solicitud:

  • x-amz-server-side-encryption-aws-kms-key-id

  • x-amz-server-side-encryption-context

  • x-amz-server-side-encryption-bucket-key-enabled

Las operaciones de la API de REST de Amazon S3 que admiten SSE-KMS

Las siguientes operaciones de la API de REST aceptan los encabezados de solicitud x-amz-server-side-encryption, x-amz-server-side-encryption-aws-kms-key-id y x-amz-server-side-encryption-context.

  • PutObject: cuando cargue datos mediante la operación de la API PUT, puede especificar estos encabezados de solicitud.

  • CopyObject: cuando copia un objeto, tiene un objeto de origen y otro de destino. Al pasar encabezados SSE-KMS con la operación CopyObject, estos se aplican solo al objeto de destino. Cuando copie un objeto existente, independientemente de si el objeto de origen está cifrado o no, el objeto de destino no estará cifrado, a no ser que solicite explícitamente el cifrado del lado del servidor.

  • POST Object: cuando utilice una operación POST para cargar un objeto, en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los campos del formulario.

  • CreateMultipartUpload: cuando cargue objetos grandes mediante la operación de la API de carga multiparte, puede especificar estos encabezados. Debe especificar estos encabezados en la solicitud Iniciar carga multiparte.

Los encabezados de respuesta de las siguientes operaciones de la API de REST devuelven el encabezado x-amz-server-side-encryption cuando un objeto se almacena con el cifrado del lado del servidor.

importante
  • Todas las solicitudes GET y PUT para un objeto protegido por AWS KMS producirán un error si no las realiza con la capa de sockets seguros (SSL), la seguridad de la capa de transporte (TLS) o Signature Version 4.

  • Si su objeto utiliza SSE-KMS, no envíe encabezados de solicitud de cifrado para solicitudes GET y HEAD u obtendrá un error HTTP 400 BadRequest.

Contexto de cifrado (x-amz-server-side-encryption-context)

Si especifica x-amz-server-side-encryption:aws:kms, la API de Amazon S3 admitirá un contexto de cifrado con el encabezado x-amz-server-side-encryption-context. Un contexto de cifrado es un conjunto definido de pares clave-valor que contienen información contextual adicional sobre los datos.

Amazon S3 utiliza automáticamente el nombre de recurso de Amazon (ARN) del objeto o bucket como par del contexto de cifrado. Si utiliza SSE-KMS sin habilitar una clave de bucket de S3, utilice el ARN del objeto como contexto de cifrado, por ejemplo, arn:aws:s3:::object_ARN. Sin embargo, si utiliza SSE-KMS y habilita una clave de bucket de S3, utilice el ARN del bucket como contexto de cifrado, por ejemplo, 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. 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.

Para obtener información sobre el contexto de cifrado en Amazon S3, consulte Contexto de cifrado. Para obtener información general sobre el contexto de cifrado, consulte Conceptos de AWS Key Management Service: contexto de cifrado en la Guía para desarrolladores de AWS Key Management Service.

ID de clave de AWS KMS (x-amz-server-side-encryption-aws-kms-key-id)

Puede utilizar el encabezado x-amz-server-side-encryption-aws-kms-key-id para especificar el ID de la clave administrada por el cliente utilizado para proteger los datos. Si especifica el encabezado x-amz-server-side-encryption:aws:kms, pero no proporciona el encabezado x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 utiliza la Clave administrada de AWS (aws/s3) para proteger los datos. Si desea utilizar una clave administrada por el cliente, debe proporcionar el encabezado x-amz-server-side-encryption-aws-kms-key-id de dicha clave.

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.

Claves de bucket de S3 (x-amz-server-side-encryption-aws-bucket-key-enabled)

Puede utilizar el encabezado de x-amz-server-side-encryption-aws-bucket-key-enabled solicitud para habilitar o deshabilitar una clave de bucket de S3 en el nivel de objeto. Las claves de bucket de S3 reducen los costos de la solicitud de AWS KMS al disminuir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3.

Si especifica el encabezado x-amz-server-side-encryption:aws:kms, pero no proporciona el encabezado x-amz-server-side-encryption-aws-bucket-key-enabled, el objeto utiliza el ajuste de la clave de bucket de S3 para que el bucket de destino cifre el objeto. Para obtener más información, consulte Configuración de una clave de bucket de S3 en el nivel de objeto .

Cuando se carga un objeto nuevo o se copia uno existente, puede especificar el uso del cifrado del lado del servidor con claves de AWS KMS para cifrar los datos. Para ello, añada el encabezado --server-side-encryption aws:kms a la solicitud. Utilice --ssekms-key-id example-key-id para agregar la clave de AWS KMS administrada de cliente que ha creado. Si especifica --server-side-encryption aws:kms, pero no proporciona un ID de clave de AWS KMS, Amazon S3 utilizará una clave administrada de AWS.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath

Además, puede habilitar o desactivar las claves de bucket de Amazon S3 en las operaciones PUT o COPY agregando --bucket-key-enabled o --no-bucket-key-enabled. Las claves de bucket de Amazon S3 pueden reducir los costos de solicitud de AWS KMS al disminuir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte Reducción del costo de SSE-KMS con las claves de bucket de S3.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath

Puede cifrar un objeto no cifrado para usar SSE-KMS volviendo a copiar el objeto en su lugar.

aws s3api copy-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --body filepath --bucket DOC-EXAMPLE-BUCKET --key example-object-key --sse aws:kms --sse-kms-key-id example-key-id --body filepath

Al utilizar los SDK de AWS, puede solicitar a Amazon S3 que utilice AWS KMS keys para el cifrado del lado del servidor. En esta sección, se proporcionan ejemplos de uso de los AWS SDK para Java y .NET. Para obtener información acerca de otros SDK, consulte Código de muestra y bibliotecas.

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.

Operación de copia

Si copia objetos, agrega las mismas propiedades de la solicitud (ServerSideEncryptionMethod y ServerSideEncryptionKeyManagementServiceKeyId) para solicitar a Amazon S3 que use una AWS KMS key. Para obtener más información acerca de la copia de objetos, consulte Copia de objetos.

Operación PUT

Java

Si carga un objeto mediante el AWS SDK for Java, puede solicitar que Amazon S3 utilice una AWS KMS key si agrega la propiedad SSEAwsKeyManagementParams, tal como se muestra en la siguiente solicitud.

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

En este caso, Amazon S3 utiliza la clave Clave administrada de AWS (aws/s3) (consulte Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS). Opcionalmente, puede crear una clave KMS de cifrado simétrica y especificarla en la solicitud.

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

Para obtener más información acerca de la creación de claves administradas por el cliente, consulte Programación de la API de AWS KMS en la Guía para desarrolladores de AWS Key Management Service.

Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes. Para utilizar estos ejemplos, tiene que actualizar estos ejemplos de código y facilitar la información de cifrado, tal como se muestra en el fragmento de código anterior.

.NET

Si carga un objeto mediante el AWS SDK for .NET, puede solicitar que Amazon S3 utilice una AWS KMS key si agrega la propiedad ServerSideEncryptionMethod, tal como se muestra en la siguiente solicitud.

PutObjectRequest putRequest = new PutObjectRequest { BucketName = DOC-EXAMPLE-BUCKET, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

En este caso, Amazon S3 utiliza la Clave administrada de AWS. Para obtener más información, consulte Uso del cifrado del servidor con claves de AWS KMS (SSE-KMS). Opcionalmente, puede crear su propia clave administrada por el cliente de cifrado simétrica y especificarla en la solicitud.

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = DOC-EXAMPLE-BUCKET, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

Para obtener más información acerca de la creación de claves administradas por el cliente, consulte Programación de la API de AWS KMS en la Guía para desarrolladores de AWS Key Management Service.

Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes. Para utilizar estos ejemplos, tiene que actualizar estos ejemplos de código y facilitar la información de cifrado, tal como se muestra en el fragmento de código anterior.

URL prefirmadas

Java

Si crea una dirección URL prefirmada para un objeto cifrado con una AWS KMS key, es necesario que se especifique explícitamente Signature Version 4.

ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSignerOverride("AWSS3V4SignerType"); AmazonS3Client s3client = new AmazonS3Client( new ProfileCredentialsProvider(), clientConfiguration); ...

Para ver un ejemplo del código, consulte Uso compartido de objetos con URL prefirmadas.

.NET

Si crea una dirección URL prefirmada para un objeto cifrado con una AWS KMS key, es necesario que se especifique explícitamente Signature Version 4.

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Para ver un ejemplo del código, consulte Uso compartido de objetos con URL prefirmadas.