Claves de encriptación proporcionadas por el cliente

En esta página, se analizan las claves de encriptación proporcionadas por el cliente. Para conocer otras opciones de encriptación, consulta Opciones de encriptación de datos. Si deseas encontrar ejemplos en los que se usa esta característica, consulta Usa claves de encriptación proporcionadas por el cliente.

Descripción general

Como una capa adicional sobre las claves de encriptación administradas por Google, puedes optar por proporcionar tu propia clave AES-256, codificada en Base64 estándar. Esta clave se conoce como clave de encriptación proporcionada por el cliente. Si brindas una clave de encriptación proporcionada por el cliente, Cloud Storage no almacenará ni administrará tu clave de forma permanente en los servidores de Google. En su lugar, proporciona tu clave para cada operación de Cloud Storage y esta se eliminará de los servidores de Google una vez que se complete la operación. Cloud Storage almacena solo un hash criptográfico de la clave para que las solicitudes futuras puedan validarse en función del hash. Tu clave no se puede recuperar del hash y este no se puede usar para desencriptar tus datos.

Cuando aplicas una clave de encriptación proporcionada por el cliente a un objeto, este, su suma de comprobación CRC32C y su hash MD5 se encriptan con la clave de encriptación. Luego, es necesaria la clave de encriptación para leer cualquiera de estos datos. Los metadatos restantes del objeto, incluido el nombre del objeto, se encriptan mediante claves estándar del lado del servidor. Esto te permite leer y actualizar metadatos, así como enumerar y borrar objetos, sin necesidad de usar la clave de encriptación proporcionada por el cliente. Sin embargo, si deseas realizar cualquiera de estas acciones, debes tener permisos suficientes para hacerlo.

Por ejemplo, si un objeto está encriptado con una clave de encriptación proporcionada por el cliente, debes usarla para realizar operaciones en el objeto, como descargarlo o moverlo. Si intentas leer los metadatos del objeto sin proporcionar la clave, recibirás metadatos como el nombre del objeto y el Content-Type, pero no la suma de comprobación CRC32C o el hash MD5 del objeto. Si proporcionas tu clave con la solicitud de los metadatos del objeto, la suma de comprobación CRC32C y el hash MD5 de este se incluyen en los metadatos.

Si realizas una operación compose en objetos encriptados mediante claves de encriptación proporcionadas por el cliente, los objetos componentes deben estar encriptados por la misma clave y debes proporcionar la clave con la solicitud de composición. El objeto compuesto resultante se encripta con la misma clave.

Para proteger tus datos mientras se transfieren por Internet durante las operaciones de lectura y escritura, usa la seguridad de la capa de transporte, más conocida como TLS o HTTPS. Se requiere TLS cuando proporcionas una clave de encriptación. Si usas tu clave de encriptación por accidente sobre una conexión no encriptada (HTTP), es posible que un atacante intercepte tu clave. Debido a esta posibilidad, la API de Cloud Storage muestra un mensaje de error que te advierte que tu clave puede estar comprometida. Si esto ocurre, debes cambiar tus claves.

Restricciones

Las siguientes restricciones se aplican cuando se usan claves de encriptación proporcionadas por el cliente:

  • El Servicio de transferencia de Cloud Storage, Cloud Dataflow y Cloud Dataproc por el momento no son compatibles con objetos encriptados con claves de encriptación proporcionadas por el cliente.

  • No puedes usar Google Cloud Platform Console para descargar objetos encriptados con una clave de encriptación proporcionada por el cliente. De forma similar, cuando usas Google Cloud Platform Console para subir un objeto, no puedes encriptarlo con una clave de encriptación proporcionada por el cliente. Puedes realizar estas acciones con claves de encriptación administradas por el cliente.

  • Las claves de encriptación proporcionadas por el cliente están disponibles en los siguientes países:

    Argentina, Austria, Australia, Bélgica, Bulgaria, Canadá, Chile, Colombia, Chipre, República Checa, Dinamarca, Estonia, Finlandia, Francia, Alemania, Grecia, Hong Kong, Hungría, Indonesia, Irlanda, Israel, Italia, Japón, Lituania, Luxemburgo, Letonia, Malasia, Malta, México, Países Bajos, Nueva Zelanda, Noruega, Perú, Polonia, Portugal, Rumania, Singapur, Eslovaquia, Sudáfrica, Corea del Sur, España, Suecia, Suiza, Taiwán, Tailandia, Turquía, Reino Unido, Estados Unidos, Vietnam

    Si tu país no está en esta lista, puedes solicitar que se agregue tu país.

  • Para usar las claves de encriptación proporcionadas por el cliente con gsutil, debes tener gsutil 4.18 o posterior.

  • Solo puedes establecer claves de encriptación proporcionadas por el cliente en objetos individuales. No puedes establecer una clave de encriptación proporcionada por el cliente predeterminada para un depósito.

Herramientas para usar las claves de encriptación

Hay varias formas en las que puedes usar las claves de encriptación proporcionadas por el cliente con Cloud Storage. Estas incluyen lo siguiente:

  • Empresas asociadas
  • Las API de REST de JSON y de XML
  • La herramienta de línea de comandos de gsutil

Claves de encriptación con empresas asociadas

Hay varias opciones de socios externos para usar las claves de encriptación proporcionadas por el cliente. Estos socios facilitan la generación de una clave de encriptación y la asociación de esa clave con un objeto en Cloud Storage. Los socios que pueden suministrar claves para Cloud Storage incluyen Ionic Security y KeyNexus.

Para obtener más información, consulta la página de socios de Cloud Storage.

Claves de encriptación con API de REST

Cuando usas una clave de encriptación proporcionada por el cliente y trabajas de forma directa con la API de JSON o la API de XML, debes proporcionar la clave AES-256 y un hash SHA256 de la clave. Debes almacenar de forma segura la clave AES-256 y el hash SHA256 de la clave. Google almacena el hash SHA256 de tu clave en los metadatos del objeto, donde puedes recuperarlo más tarde. Ni Google (ni otra persona) puede usar este hash SHA256 para desencriptar tus datos. Se almacena como una forma de identificar de manera exclusiva la clave AES-256 que se usó para encriptar un objeto en particular.

Solicita encabezados

Incluye los siguientes encabezados HTTP en tu solicitud JSON o XML:

Nombre del encabezado Valor Descripción
x-goog-encryption-algorithm string El algoritmo de encriptación a usar. Debes usar el valor AES256.
x-goog-encryption-key string Una string codificada en Base64 RFC 4648 de tu clave de encriptación AES-256.
x-goog-encryption-key-sha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de tu clave de encriptación.

Si realizas una operación de reescritura con la API de JSON, los encabezados enumerados arriba se usan para encriptar el objeto de destino y los siguientes encabezados se usan a fin de desencriptar el objeto de origen:

Nombre del encabezado Valor Descripción
x-goog-copy-source-encryption-algorithm string El algoritmo de encriptación a usar. Debes usar el valor AES256.
x-goog-copy-source-encryption-key string Una string codificada en Base64 RFC 4648 de la clave de encriptación del objeto de origen AES-256.
x-goog-copy-source-encryption-key-sha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de la clave de encriptación del objeto de origen.

Respuesta

JSON

Cuando se usa la API de JSON, los metadatos de una clave de encriptación proporcionada por el cliente se muestran en el cuerpo de la respuesta, que incluye las siguientes propiedades:

Nombre de la propiedad Valor Descripción
customerEncryption objeto Información sobre la encriptación que se usó para la solicitud.
customerEncryption.encryptionAlgorithm string El algoritmo de encriptación que se usó. Siempre contiene el valor AES256.
customerEncryption.keySha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de tu clave de encriptación. Puedes usar este hash SHA256 para identificar de forma exclusiva la clave de encriptación AES-256 necesaria a fin de desencriptar el objeto, que debes almacenar de forma segura.

XML

Cuando se usa la API de XML, la respuesta incluye los siguientes encabezados:

Nombre del encabezado Valor Descripción
x-goog-encryption-algorithm string El algoritmo de encriptación que se usó. Siempre contiene el valor AES256.
x-goog-encryption-key-sha256 string Una string codificada en Base64 RFC 4648 del hash SHA256 de tu clave de encriptación. Puedes usar este hash SHA256 para identificar de forma exclusiva la clave de encriptación AES-256 necesaria a fin de desencriptar el objeto, que debes almacenar de forma segura.

Recibes un error HTTP 400 en los siguientes casos:

  • Subes un objeto mediante una clave de encriptación proporcionada por el cliente y tratas de realizar otra operación en el objeto (aparte de solicitar o actualizar la mayoría de los metadatos o borrar el objeto) sin proporcionar la clave.
  • Subes un objeto mediante una clave de encriptación proporcionada por el cliente y tratas de realizar otra operación en el objeto con una clave incorrecta.
  • Subes un objeto sin proporcionar una clave de encriptación proporcionada por el cliente y tratas de realizar otra operación en el objeto con una clave de encriptación proporcionada por el cliente.
  • Especificas un algoritmo de encriptación, una clave o un hash SHA256 que no es válido.

Claves de encriptación con gsutil

Para usar una clave de encriptación proporcionada por el cliente con gsutil, agrega la siguiente opción a la sección [GSUtil] de tu archivo de configuración boto:

Nombre de la opción Valor Descripción
encryption_key string Una string codificada en Base64 RFC 4648 de tu clave de encriptación AES-256.

De manera opcional, puedes especificar una o más claves de desencriptación. Mientras que gsutil usa la opción encryption_key como una clave de encriptación y desencriptación, cualquier opción decryption_key que especifiques se usará solo para desencriptar objetos. Para obtener más detalles, consulta la documentación de gsutil.

Siempre que tengas claves de encriptación o desencriptación en tu archivo de configuración boto, estas se usarán para todos los comandos de gsutil. Al momento de la desencriptación, gsutil calcula el hash SHA256 de las claves de encriptación y desencriptación proporcionadas y selecciona la clave correcta para usar de un objeto en particular mediante la búsqueda de coincidencias del hash SHA256 en los metadatos del objeto.

Recibirás un error si subes un objeto con una clave de encriptación proporcionada por el cliente y luego intentas realizar otra operación en el objeto (aparte de solicitar o actualizar metadatos o borrar el objeto) sin proporcionar la clave.

Cambio de clave de encriptación

Si un objeto se encripta con una clave de encriptación proporcionada por el cliente, puedes cambiar la clave de este mediante la reescritura del objeto. Se admiten reescrituras a través de la API de JSON, pero no mediante la API de XML. Si deseas ver ejemplos de cambio de clave, consulta Cambia una clave de encriptación.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.