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

¡Bienvenido a la nueva Guía del usuario de Amazon S3! La guía del usuario de Amazon S3 combina información e instrucciones de las tres guías retiradas: Guía para desarrolladores de Amazon S3, Guía del usuario de la consola de Amazon S3y Guía de introducción Amazon S3.

Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)

Al crear un objeto y a fin de cifrar los datos, puede especificar el uso del cifrado del lado del servidor con las claves maestras de cliente (CMK) de AWS Key Management Service (AWS KMS). Esto es así cuando carga un objeto nuevo o copia uno existente. Este cifrado se conoce como SSE-KMS.

Puede especificar SSE-KMS usando la consola de S3, las API REST, los SDK de AWS y la CLI de AWS. Para obtener más información, consulte los siguientes temas.

En este tema se describe cómo configurar o cambiar el tipo de cifrado que utiliza un objeto 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 consola de administración de AWS y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

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

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

    Se abrirá la vista general del objeto y mostrará las propiedades del objeto.

  4. En Server-side encryption settings (Configuración de cifrado del lado del servidor), elija Edit (Editar).

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

  5. Para habilitar el cifrado del lado del servidor para el objeto, elija Enable (Habilitar) en Server-side encryption (Cifrado del lado del servidor).

  6. En Encryption key type (Tipo de clave de cifrado), elija la clave de AWS Key Management Service (SSE-KMS).

    importante

    Si utiliza la opción de AWS KMS para la configuración de cifrado predeterminado, se le aplicarán los límites de RPS (solicitudes por segundo) de AWS KMS. Para obtener más información acerca de los límites de AWS KMS y sobre cómo solicitar un aumento de los límites, consulte Límites de AWS KMS.

  7. En AWS KMS key (Clave de AWS KMS) elija una de las siguientes opciones:

    • AWS managed key (aws/s3) [Clave administrada de AWS (aws/s3)]

    • Elija entre sus claves maestras de KMS y elija su clave maestra de KMS.

    • Escriba el ARN de la clave maestra de KMS y escriba el ARN de la clave KMS de AWS.

    importante

    Solo puede utilizar las CMK de KMS activadas en la misma región de AWS que el bucket. Cuando elige Choose from your KMS master keys (Elegir entre las claves maestras de KMS), la consola de S3 solo muestra 100 CMK de KMS por región. Si tiene más de 100 CMK en la misma región, solo podrá ver las primeras 100 CMK en la consola de S3. Para utilizar una CMK de KMS que no aparece en la consola, elija ARN de KMS personalizado y escriba el ARN de la CMK de KMS.

    Cuando utilice la CMK de AWS KMS para el cifrado del lado del servidor en Amazon S3, elija una CMK que esté habilitada en la misma región que el bucket. Además, Amazon S3 solo admite las CMK simétricas y asimétricas. Para obtener más información, consulte Uso de claves simétricas y asimétricas en la guía para desarrolladores de AWS Key Management Service.

    Para obtener más información acerca de cómo crear una CMK de AWS KMS, consulte Creación de claves en la guía para desarrolladores de AWS Key Management Service. Para obtener más información sobre el uso de AWS KMS con Amazon S3, consulte Protección de datos mediante cifrado del lado del servidor con CMK almacenadas en AWS Key Management Service (SSE-KMS).

  8. Elija Save changes (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 antes de agregar nuevos objetos a la carpeta.

Cuando cree un objeto, es decir, cuando cargue un objeto nuevo o copie un objeto existente, podrá especificar el uso del cifrado del lado del servidor con claves maestras del cliente (CMK) de AWS Key Management Service (AWS 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 API REST de Amazon S3 que admiten SSE-KMS

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

  • PUT Object: cuando cargue datos mediante la API PUT, podrá especificar estos encabezados de solicitud.

  • PUT Object - Copy: cuando copie un objeto, tiene un objeto de origen y otro de destino. Al pasar encabezados SSE-KMS con la operación COPY, se aplicarán solo al objeto de destino. Al copiar un objeto existente, independientemente de si el objeto de origen está cifrado o no, el objeto de destino no está cifrado, a no ser que solicite explícitamente el cifrado en el 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.

  • Iniciar carga multiparte: al cargar objetos grandes mediante la API de carga multiparte, puede especificar estos encabezados. Especifique estos encabezados en la solicitud de inicio.

Los encabezados de respuesta de la siguiente API de REST devuelven el encabezado x-amz-server-side-encryption cuando un objeto fue almacenado con el cifrado del lado el servidor.

importante
  • Todas las solicitudes GET y PUT para un objeto protegido por AWS KMS fallarán si no las realiza mediante Secure Sockets Language (SSL) 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 opcional de pares clave-valor que pueden contener información contextual adicional sobre los datos.

En Amazon S3, el nombre de recurso de Amazon (ARN) del objeto o bucket se utiliza comúnmente como 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.

Para obtener información sobre el contexto de cifrado en Amazon S3, consulte Contexto de cifrado. Para obtener más información 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 de x-amz-server-side-encryption-aws-kms-key-id para especificar el ID de la CMK administrada por el cliente utilizado para proteger los datos. Si especifica x-amz-server-side-encryption:aws:kms, pero no proporciona x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 utiliza la CMK administrada de AWS en AWS KMS para proteger los datos. Si desea utilizar una CMK de AWS KMS administrada por el cliente, debe proporcionar el x-amz-server-side-encryption-aws-kms-key-id de dicha CMK.

importante

Cuando utilice una CMK de AWS KMS para el cifrado en el lado del servidor en Amazon S3, debe elegir una CMK simétrica. Amazon S3 solo admite CMK simétricos y no asimétricos. Para obtener más información, consulte Uso de claves simétricas y asimé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 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 Amazon S3.

Si especifica x-amz-server-side-encryption:aws:kms, pero no proporciona 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 mediante la API REST, los SDK de AWS o la CLI de AWS.

Al utilizar los SDK de AWS, puede solicitar a Amazon S3 que utilice las claves maestras de cliente (CMK) de AWS Key Management Service (AWS KMS). En esta sección se brindan ejemplos en los que se utilizan los SDK de AWS para Java y .NET. Para obtener información acerca de otros SDK, consulte Código de muestra y bibliotecas.

importante

Cuando utilice una CMK de AWS KMS para el cifrado en el lado del servidor en Amazon S3, debe elegir una CMK simétrica. Amazon S3 solo admite CMK simétricos y no asimétricos. Para obtener más información, consulte Uso de claves simétricas y asimétricas en la guía para desarrolladores de AWS Key Management Service.

Operación de copia

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

Operación PUT

Java

Al cargar un objeto con AWS SDK para Java, puede solicitar a Amazon S3 que use una CMK por AWS KMS agregando la propiedad SSEAwsKeyManagementParams como se muestra en la siguiente solicitud.

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

En este caso, Amazon S3 utiliza la CMK administrada por AWS (consulte Uso de cifrado en el servidor con CMK almacenadas en AWS KMS). Opcionalmente, puede crear una CMK simétrica administrada por el cliente 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 CMK gestionadas por el cliente, consulte Programación de las 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. Tendrá que actualizar esos ejemplos de código y facilitar la información de cifrado como se muestra en el fragmento de código anterior.

.NET

Al cargar un objeto con AWS SDK para .NET, puede solicitar a Amazon S3 que use una CMK por AWS KMS agregando la propiedad ServerSideEncryptionMethod como se muestra en la siguiente solicitud.

PutObjectRequest putRequest = new PutObjectRequest { BucketName = bucketName, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

En este caso, Amazon S3 utiliza la CMK administrada por AWS. Para obtener más información, consulte Protección de datos mediante cifrado del lado del servidor con CMK almacenadas en AWS Key Management Service (SSE-KMS). Opcionalmente, puede crear su propia CMK simétrica administrada por el cliente y especificarla en la solicitud.

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = bucketName, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

Para obtener más información acerca de la creación de CMK gestionadas por el cliente, consulte Programación de las 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. Tendrá que actualizar estos ejemplos de código y facilitar la información de cifrado como se muestra en el fragmento de código anterior.

URL prefirmadas

Java

Al crear una URL prefirmada para un objeto cifrado con una CMK de AWS KMS, debe especificar 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 Compartir un objeto con una URL prefirmada.

.NET

Al crear una URL prefirmada para un objeto cifrado con una CMK de AWS KMS, debe especificar explícitamente Signature Version 4:

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Para ver un ejemplo del código, consulte Compartir un objeto con una URL prefirmada.