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.
Descripción general
Puedes optar por proporcionar tu propia clave de encriptación AES-256, codificada en Base64 estándar, como una capa adicional sobre la encriptación estándar de Cloud Storage. 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.
En su lugar, debes proporcionar tu clave para cada operación de Cloud Storage y esta se borrará definitivamente de los servidores de Cloud Storage 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.
Te recomendamos crear una copia de seguridad de cada clave en una ubicación segura y tomar precauciones para asegurarte de que las claves no se compartan con terceros que no sean de confianza. Si algún archivo o máquina que contiene la clave de encriptación está comprometido, debes realizar la rotación de la clave de inmediato para todos los objetos encriptados con la clave comprometida.
¿Cuándo se usa la clave?
Cuando aplicas una clave de encriptación proporcionada por el cliente a un objeto, esta se usa para la encriptación en Cloud Storage de lo siguiente:
- Los datos del objeto
- La suma de verificación CRC32C del objeto
- El hash MD5 del objeto
Cloud Storage usa la encriptación en reposo predeterminada para encriptar los metadatos restantes del objeto, incluido el nombre del objeto. Esto te permite leer y actualizar metadatos generales, además de enumerar, sobrescribir y borrar objetos, sin necesidad de la clave de encriptación proporcionada por el cliente. Sin embargo, para realizar cualquiera de estas acciones, debes tener suficientes permisos.
Por ejemplo, si un objeto se encripta con una clave de encriptación proporcionada por el cliente, esta debe usarse 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 Content-Type
, pero no la suma de verificación CRC32C o el hash MD5. Si proporcionas tu clave cuando solicitas los metadatos del objeto, la suma de verificación CRC32C y el hash MD5 de este se incluyen en los metadatos.
Comportamiento de reescritura
Si reescribes un objeto encriptado con una clave de encriptación proporcionada por el cliente sin dar una clave para encriptar el objeto reescrito, sucede lo siguiente:
Si incluyes una clave de desencriptación adecuada en la solicitud, el objeto que se reescribió se encripta con la clave de encriptación predeterminada de Cloud Key Management Service del bucket de destino o, si no existe una clave de este tipo, a través de la encriptación de Cloud Storage estándar.
Si no incluyes una clave de desencriptación adecuada en tu solicitud, recibirás un error.
Verificación HTTPS
Para proteger tus datos a medida que viajan 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 en una conexión no encriptada (HTTP), es posible que un atacante la intercepte. 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 de inmediato.
Restricciones
Las siguientes restricciones se aplican cuando se usan claves de encriptación proporcionadas por el cliente:
No puedes usar la consola de Google Cloud para descargar objetos encriptados con una clave de encriptación proporcionada por el cliente. Del mismo modo, cuando usas la consola de Google Cloud para subir un objeto, no puedes usar una clave de encriptación proporcionada por el cliente.
El Servicio de transferencia de almacenamiento de Cloud y Cloud Dataflow no admiten objetos encriptados con claves de encriptación proporcionadas por el cliente.
Solo puedes establecer claves de encriptación proporcionadas por el cliente en objetos individuales. No puedes configurar una clave de encriptación proporcionada por el cliente como predeterminada para un bucket.
Si realizas una operación
compose
en objetos encriptados mediante claves de encriptación proporcionadas por el cliente, los objetos componentes deben usar la misma clave, la cual debes proporcionar con la solicitud de redacción. El objeto compuesto resultante se encripta con la misma clave.Cuando se entrega un objeto encriptado mediante una clave de encriptación proporcionada por el cliente, en Cloud Storage se ignoranlos metadatos
Cache-Control
asociados con el objeto y se entrega el objeto conCache-Control
configurado comoprivate, max-age=0
.
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 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. Cloud Storage almacena el hash SHA256 de tu clave en los metadatos del objeto, desde donde puedes recuperarlo más tarde. Ni Cloud Storage ni nadie puede usar este hash SHA256 para desencriptar tus datos. Se almacena como una forma de identificar de manera inequívoca la clave AES-256 que se usó para encriptar un objeto en particular.
Encabezados de la solicitud
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 que se 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 que se 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 gcloud storage
Google Cloud CLI admite el uso de claves de encriptación proporcionadas por el cliente. Cuando uses gcloud CLI con Claves de encriptación proporcionadas por el cliente, ten en cuenta lo siguiente:
La clave especificada como la clave de encriptación se usa en comandos como clave de encriptación y, cuando es necesario, como clave de desencriptación.
De manera opcional, puedes especificar hasta 100 claves de desencriptación, que solo se usan para desencriptar objetos.
Durante la desencriptación, se calcula el hash SHA256 de cualquier clave de encriptación y desencriptación proporcionada, y se selecciona la clave correcta para usar de un objeto en particular a través de la búsqueda de coincidencias del hash SHA256 en los metadatos del objeto.
Cuando se agrega o rota una Clave de encriptación proporcionada por el cliente para un objeto existente, el objeto se reescribe como parte de la solicitud. Esto es así incluso en el comando
gcloud storage objects update
.Los comandos de enumeración que pueden mostrar el hash MD5 o CRC32C para los objetos encriptados con una clave proporcionada por el cliente realizan una solicitud
GET
de metadatos adicional para cada objeto. Estas solicitudes adicionales pueden hacer que la enumeración sea mucho más lenta que enumerar los objetos encriptados con la encriptación estándar de Cloud Storage.En situaciones en las que la clave de encriptación puede o cambia durante una operación de escritura o copia completada de forma parcial, como cuando vuelves a ejecutar una carga de
cp
después de forzar la salida o encontrar un tiempo de espera de red, la operación se reinicia para garantizar que el objeto de destino se escriba con la clave nueva.
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. Las operaciones de reescritura son compatibles con la API de JSON, pero no con la API de XML. Consulta Rotar tu clave de encriptación para ver ejemplos de cambio de claves.
Próximos pasos
- Obtén más información para usar las claves de encriptación que proporciona el cliente.