Claves de encriptado proporcionadas por el cliente

Las claves de encriptado proporcionadas por el cliente (CSEK) son una función de Google Cloud Storage y Google Compute Engine. Si proporcionas tus propias claves de encriptado, las utilizaremos para proteger las generadas por Google, que se usan para encriptar y desencriptar tus datos.

Términos que se utilizan en este ámbito:

  • Clave de encriptado de datos (DEK): se usa para encriptar datos.

  • Clave de encriptado de claves (KEK): se utiliza para encriptar o "encapsular" claves de encriptado de datos.

  • Gestor de clústeres: conjunto de procesos que se ejecuta en una identidad de gestor de clústeres dentro de la infraestructura de producción de Google. Estos gestores implementan la lógica para gestionar recursos de Compute Engine, como discos e instancias de máquina virtual. Además, almacenan metadatos relacionados con dichos recursos.

  • Gestor de instancias: conjunto de procesos que se ejecuta en una identidad de gestor de instancias dentro de la infraestructura de producción de Google. Estos gestores ejecutan modificaciones (procesos) en las instancias de máquina virtual rápidamente, como iniciar y detener máquinas virtuales o montar y desmontar discos. El gestor de clústeres especifica cuál debe ser el estado de las máquinas virtuales en todo momento, y el gestor de instancias se encarga de ejecutar esos procesos.

Cómo funcionan las claves de encriptado proporcionadas por el cliente

A continuación, se explica cómo funcionan estas claves con Google Cloud Storage y Google Compute Engine.

Cloud Storage

Cuando utilizas claves de encriptado proporcionadas por el cliente en Cloud Storage:

  • Suministras una CSEK sin procesar como parte de una llamada a una API. Esta clave se transfiere de Google Front End a la memoria del sistema de almacenamiento. Se usa como una clave de encriptado de claves para gestionar tus datos en Google Cloud Storage.

  • La CSEK sin procesar se utiliza para desencapsular claves de fragmentos encapsuladas y, de esta forma, crear claves de fragmentos sin procesar en la memoria. Estas claves se usan para desencriptar fragmentos de datos almacenados en los sistemas de almacenamiento, y también como claves de encriptado de datos para gestionar los datos en Google Cloud Storage.

    CSEK en Cloud Storage

Claves Almacenamiento Objetivo Límite de acceso
CSEK sin procesar Memoria del sistema de almacenamiento Proporcionada por el cliente.
Clave de encriptado de claves (KEK) para claves de fragmentos.
Se utiliza para encapsular claves de fragmentos.
Una vez que se complete la operación que haya solicitado el cliente (por ejemplo, insertObject o getObject).
Claves de fragmentos encapsuladas Dispositivo de almacenamiento Se utiliza para proteger las claves de fragmentos almacenadas en reposo. Una vez que se elimine el objeto de almacenamiento.
Claves de fragmentos sin procesar Memoria del dispositivo de almacenamiento Clave de encriptado de datos (DEK) para gestionar datos.
Se utiliza para escribir o leer en un disco.
Una vez que se complete la operación que haya solicitado el cliente.

Compute Engine

Cuando utilizas claves de encriptado proporcionadas por el cliente en Compute Engine:

  • Proporcionas una CSEK sin procesar como parte de una llamada a una API.

  • Esta clave se transmite de Google Front End al frontend del gestor de clústeres:

    • Si se ha proporcionado una CSEK encapsulada, se desencapsula con una clave de encapsulamiento asimétrico de Google.
    • La CSEK sin procesar se combina con un nonce criptográfico de disco persistente para generar una clave derivada de la CSEK, que se usa como clave de encriptado de claves para gestionar datos en Google Compute Engine.

  • En el frontend del gestor de clústeres, tanto la CSEK como la clave derivada de la CSEK se almacenan únicamente en la memoria del gestor de clústeres. La clave derivada de la CSEK se usa en la memoria del gestor de clústeres para desencapsular las claves de disco encapsuladas que están almacenadas en los metadatos de la instancia del gestor de clústeres y del gestor de instancias, siempre que se haya habilitado el reinicio automático. Estos metadatos no son los mismos que los metadatos de las instancias.

    • La clave derivada de la CSEK se utiliza para encapsular claves de disco sin procesar a la hora de crear discos, así como para desencapsular claves de disco sin procesar cuando se accede a los discos.
      • Si se ha habilitado el reinicio automático, el gestor de clústeres conserva las claves de disco encapsuladas durante la vida útil de las máquinas virtuales para poder reiniciarlas en caso de que fallen. Las claves de disco encapsuladas se encapsulan con una clave de encapsulado simétrica de Google. Debido a los permisos de este tipo de claves, solo Google Compute Engine puede usarlas.
      • Si se ha habilitado la migración activa, la clave de disco sin procesar se transfiere de la memoria de la instancia anterior de máquina virtual a la memoria de la nueva instancia. Ni el gestor de instancias ni el de clústeres participan en este proceso de copia de claves.

  • Las claves de disco sin procesar se transfieren a la memoria del gestor de clústeres, a la del gestor de instancias y a la de máquina virtual. Estas claves se utilizan como claves de encriptado de datos para gestionar los datos en Google Compute Engine.

    CSEK en Compute Engine

Claves Guardadas por Objetivo Límite de acceso
CSEK sin procesar Frontend del gestor de clústeres Proporcionada por el cliente.
Se le añade un nonce criptográfico para crear una clave derivada de una CSEK.
Una vez que se complete la operación que haya solicitado el cliente (por ejemplo, instances.insert o instances.attachDisk).
CSEK encapsulada con una clave pública
(opcional: si se utiliza el encapsulado de claves RSA)
Frontend del gestor de clústeres La proporciona el cliente de manera opcional.
Se desencapsula con una clave asimétrica de Google para crear una clave derivada de una CSEK.
Una vez que se complete la operación que haya solicitado el cliente.
Clave de encapsulado asimétrico
(si se utiliza el encapsulado de claves RSA)
Servicio de gestión de claves interno de Google Se utiliza para desencapsular una clave RSA proporcionada por el cliente. No hay límite de acceso.
Clave derivada de CSEK Frontend del gestor de clústeres Clave de encriptado de claves (KEK) para claves de disco.
Encapsula las claves de disco.
Una vez que se complete la operación de encapsulado o desencapsulado.
Claves de disco encapsuladas por Google
(opcional: si se ha habilitado el reinicio automático)
Frontend del gestor de clústeres Se utiliza para proteger las claves de discos vinculadas a instancias en ejecución que estén almacenadas en reposo.
Reinicia la instancia cuando se pierde la memoria de las máquinas virtuales (por ejemplo, si falla el host).
Una vez que se detenga o elimine la máquina virtual.
Clave de disco sin procesar La memoria del monitor de máquinas virtuales (VMM)
y la del gestor de clústeres (CM)
Se utiliza como clave de encriptado de datos (DEK) para gestionar los datos.
Permite leer y escribir datos en los discos, migrar de forma activa las máquinas virtuales y llevar a cabo actualizaciones.
Una vez que se detenga o elimine la máquina virtual.
Clave derivada de una CSEK encapsulada por Google Base de datos del gestor de clústeres Reinicia las operaciones si se producen fallos. Una vez que se complete la operación que haya solicitado el cliente.

.

Cómo se protegen las claves de encriptado proporcionadas por el cliente

A continuación, se explica cómo se protegen en los discos las claves de encriptado proporcionadas por el cliente, tanto en su paso por la infraestructura de Google Cloud Platform como en la memoria.

En los discos

Las claves CSEK sin procesar, derivadas de CSEK y de disco o fragmentos sin procesar nunca se almacenan en discos sin encriptar. Las claves de disco o fragmentos se guardan encapsuladas con claves derivadas de CSEK, y con claves de Google si se ha habilitado el reinicio automático. Google no almacena tus claves en sus servidores de forma permanente.

Dentro de la infraestructura

Todos los servicios usan las funciones de gestión de acceso que proporciona la infraestructura para especificar exactamente qué otros servicios pueden comunicarse con ellos. Para ello, se pueden configurar esos servicios con la lista blanca de las identidades de las cuentas de servicio permitidas para que la infraestructura aplique esta restricción de acceso automáticamente. Más información sobre la gestión del aislamiento, la integridad y las identidades de los servicios

Además de las capacidades de autenticación y autorización de RPC descritas en las secciones anteriores, la infraestructura también ofrece integridad y privacidad criptográficas para los datos de RPC de la red. Los servicios pueden configurar los niveles de protección criptográfica que quieren aplicar a cada infraestructura de RPC, los cuales se habilitan para las claves de encriptado proporcionadas por el cliente. Más información sobre el encriptado de comunicaciones entre servicios

En la memoria

El material de las claves se almacena en las memorias de varios sistemas, tal como se detalla más arriba, lo que incluye la memoria del gestor de clústeres y la del monitor de máquinas virtuales. Solo se puede acceder a estas memorias si se dan determinadas excepciones (por ejemplo, si se produce un incidente o si el acceso se gestiona mediante una lista de control de acceso). A menos que se inhabiliten los volcados de memoria en estos sistemas, buscarán automáticamente material de claves en dichos volcados. Solo un número limitado de ingenieros de Site Reliability puede acceder a las tareas, ya que necesitan este acceso para llevar a cabo el mantenimiento del servicio. Por otro lado, los registros solo están disponibles para los ingenieros de software que se dedican a depurar las funciones.

Más información