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 AES-256, codificada en Base64 estándar, como una capa adicional sobre las claves de encriptación administradas por Google. 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, debes proporcionar tu clave para cada operación de Cloud Storage y esta se borrará definitivamente 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.
¿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 claves del servidor estándar para encriptar los metadatos restantes del objeto, incluido el nombre. Esto te permite leer y actualizar metadatos generales, además de enumerar 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.
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:
El Servicio de transferencia de almacenamiento de Cloud y Cloud Dataflow no admiten objetos encriptados con claves de encriptación proporcionadas por el cliente.
No puedes usar Google Cloud Console para descargar objetos encriptados con una clave de encriptación proporcionada por el cliente. Del mismo modo, cuando usas Google Cloud Console para subir un objeto, no puedes usar una clave de encriptación proporcionada por el cliente. Puedes realizar estas acciones con claves de encriptación administradas por el cliente.
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 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.
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 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, desde donde puedes recuperarlo más tarde. Ni Google ni nadie 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 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 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. Aunque gsutil usa la opción encryption_key
como clave de encriptación y desencriptación, las opciones decryption_key
que especifiques solo se usan 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. 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.