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)

Al crear un objeto y a fin de cifrar los datos, puede especificar el uso del cifrado del lado del servidor con las claves AWS Key Management Service (AWS KMS). Este cifrado se conoce como SSE-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 S3, las operaciones de API de REST, los AWS SDK 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.

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 AWS Management Console 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á Object overview (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 AWS Key Management Service key (SSE-KMS) (Clave de KMS [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 de cómo solicitar un aumento de los límites, consulte Límites de AWS KMS.

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

    • Clave administrada por AWS (aws/s3)

    • Elija entre sus AWS KMS keys y elija su clave de KMS.

    • Enter KMS master key ARN (Ingresar el ARN de la clave maestra de KMS) y el nombre de recurso de Amazon (ARN) de la clave de AWS KMS.

    importante

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

    Cuando utilice la AWS KMS key para el cifrado del lado del servidor en Amazon S3, debe elegir una clave de KMS que esté habilitada en la misma región que el bucket. Además, Amazon S3 admite solo claves de cifrado de KMS simétricas y no claves de KMS 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 AWS KMS key, consulte Creación de claves en la AWS Key Management Service Guía para desarrolladores. Para obtener más información acerca del uso de AWS KMS con Amazon S3, consulte Protección de los datos con el cifrado del lado del servidor con CMK AWS Key Management Service (SSE-KMS).

  8. Elija Save changes.

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 uno existente, podrá especificar el uso del cifrado del lado del servidor con AWS KMS keys 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.

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

  • COPY object: 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.

  • Cargar carga multiparte: cuando se cargan objetos grandes mediante la API de carga multiparte, se pueden especificar estos encabezados. Especifique estos encabezados en la solicitud de inicio.

Los encabezados de respuesta de las siguientes operaciones de 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 producirán un error si no las realiza mediante Capa de sockets seguros (SSL), 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. No obstante, si utiliza SSE-KMS y activa 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 de 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 x-amz-server-side-encryption:aws:kms, pero no proporciona x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 utiliza la clave administrada por AWS 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. Simple Storage Service (Amazon S3) admite solo claves KMS de cifrado simétricas y no claves 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.

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 herramienta de operaciones por lotes, la API REST, los SDK de AWS o la AWS CLI .

Cuando se utiliza AWS los SDK, puede solicitar a Amazon S3 que utilice AWS KMS keys. 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. Simple Storage Service (Amazon S3) admite solo claves KMS de cifrado simétricas y no claves 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.

Operación de copia

Si copia objetos, debe agregar 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 AWS SDK for Java, puede solicitar que Amazon S3 utilice una AWS KMS key si agrega 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 clave administrada por AWS (consulte Protección de los datos con el cifrado del lado del servidor con CMK AWS Key Management Service (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. 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

Si carga un objeto mediante AWS SDK for .NET, puede solicitar que Amazon S3 utilice una AWS KMS key si agrega 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 clave administrada por AWS. Para obtener más información, consulte Protección de los datos con el cifrado del lado del servidor con CMK AWS Key Management Service (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 = bucketName, 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. 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

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.