Claves de encriptación administradas por el cliente

Configuración

En esta página, se analizan las claves de encriptación administradas por el cliente y cómo se usan en Cloud Storage. Para conocer otras opciones, consulta Opciones de encriptación de datos.

Descripción general

Si necesitas obtener más control sobre las operaciones de clave que el que permite la encriptación estándar de Cloud Storage, puedes usar claves de encriptación administradas por el cliente. Estas claves se crean y administran a través de Cloud Key Management Service (Cloud KMS)y se almacenan las claves como claves de software, en un clúster de HSM o externamente. Puedes usar claves de encriptación administradas por el cliente en objetos individuales o configurar tu bucket para usar una clave de forma predeterminada en todos los objetos nuevos que se agregan a un bucket.

Cuando se usa una clave de encriptación administrada por el cliente, Cloud Storage encripta un objeto con la clave en el momento en el que se almacena en un bucket, y Cloud Storage lo desencripta automáticamente cuando el objeto se entrega a los solicitantes.

Puedes crear CMEK directamente o usar la clave automática de Cloud KMS (vista previa) para crear estas claves en tu nombre. Para obtener más información, consulta Descripción general de las claves automáticas.

¿Cuándo se usa la clave?

Cuando aplicas una clave de encriptación administrada por el cliente a un objeto, Cloud Storage usa la clave para encriptar los siguientes elementos:

  • Los datos del objeto
  • La suma de verificación CRC32C del objeto
  • El hash MD5 del objeto

Cloud Storage usa claves en el lado del servidor estándar para encriptar los metadatos restantes del objeto, incluido el nombre del objeto. Por lo tanto, si tienes permisos suficientes, puedes realizar acciones, como leer la mayoría de los metadatos, enumerar objetos y borrarlos incluso después de inhabilitar o destruir la clave de encriptación administrada por el cliente asociada.

Agentes de servicio

Cada proyecto tiene una cuenta de servicio especial de Cloud Storage, llamada agente de servicio, que realiza la encriptación y desencriptación con claves de encriptación administradas por el cliente. Una vez que das acceso al agente de servicio a una clave de encriptación, ese agente de servicio encripta los siguientes elementos:

Cuando agregas o reescribes un objeto en Cloud Storage, si tienes una clave predeterminada establecida en tu bucket y una clave específica incluida en tu solicitud, se usa la clave específica para encriptar el objeto en Cloud Storage.

Cuando un solicitante desea leer un objeto encriptado con una clave de encriptación administrada por el cliente, simplemente accede al objeto como lo haría normalmente. Durante esta solicitud, el agente de servicio desencripta automáticamente el objeto solicitado, siempre y cuando se cumplan las siguientes condiciones:

  • El agente de servicio todavía tiene permiso para la desencriptación con la clave.
  • No inhabilitaste ni destruiste la clave.

Si una de estas condiciones no se cumple, el agente de servicio no desencripta los datos y la solicitud falla.

Restricciones

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

  • No puedes encriptar un objeto con una clave de encriptación administrada por el cliente cuando actualizas los metadatos del objeto. Incluye la clave como parte de una reescritura del objeto en su lugar.

    • gcloud storage usa el comando objects update para establecer claves de encriptación en los objetos, pero el comando reescribe el objeto como parte de la solicitud.
  • Debes crear el llavero de claves de Cloud KMS en la misma ubicación que los datos que deseas encriptar. Por ejemplo, si tu bucket está ubicado en US-EAST1, cualquier llavero de claves usado para encriptar objetos en ese bucket también debe crearse en US-EAST1.

    • Para la mayoría de las regiones dobles, debes crear el llavero de claves de Cloud KMS en la multirregión asociada. Por ejemplo, si tu bucket está ubicado en el par US-EAST1, US-WEST1, cualquier llavero de claves usado para encriptar objetos en ese bucket debe crearse en la multirregión US.

    • Para las regiones dobles predefinidas ASIA1, EUR4 y NAM4, debes crear el llavero de claves en la misma región doble predefinida.

      Para conocer las ubicaciones de Cloud KMS disponibles, consulta las ubicaciones de Cloud KMS.

  • Los índices de encriptación y desencriptación de Cloud KMS están sujetas a una cuota.

  • La suma de comprobación CRC32C y el hash MD5 de los objetos encriptados con claves de encriptación administradas por el cliente no se muestran cuando se enumeran objetos con la API de JSON.

    • Cuando corresponda, algunas herramientas, como gcloud storage, realizan una solicitud GET de metadatos adicional en cada objeto encriptado con una clave de encriptación administrada por el cliente para recuperar la información de CRC32C y MD5. 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.
  • Cloud Storage no puede usar la parte de desencriptación de las claves asimétricas almacenadas en Cloud KMS para desencriptar automáticamente objetos relevantes de la misma manera que las claves de encriptación administradas por el cliente.

Relación con las claves de encriptación proporcionadas por el cliente

Además de la encriptación administrada por el cliente, en Cloud Storage se ofrecen claves de encriptación proporcionadas por el cliente como una forma de controlar la encriptación de datos. Puedes encriptar diferentes objetos en un solo bucket con diferentes métodos de encriptación, pero ten en cuenta los siguientes elementos:

  • Un mismo objeto solo puede ser encriptado por uno de estos métodos a la vez.

  • Si tienes una clave administrada por el cliente predeterminada para tu bucket y especificas una clave proporcionada por el cliente en una solicitud, Cloud Storage usa la clave proporcionada por el cliente para encriptar el objeto.

Administración de claves

En esta sección, se analizan las consideraciones para rotar claves, reemplazar claves e inhabilitar o destruir versiones de clave.

Rotación de claves

Cloud KMS admite la rotación de claves automática y manual a una versión nueva. Después de rotar una clave, Cloud Storage usa la versión nueva para todas las operaciones de encriptación con la clave, como se muestra a continuación:

  • El objeto se sube cuando el bucket de destino usa la clave como su clave de encriptación predeterminada.

  • Operaciones de carga, copia y reescritura de objeto que usan de forma específica la clave en la operación.

Las versiones anteriores de la clave no están inhabilitadas ni destruidas, por lo que Cloud Storage aún puede desencriptar los objetos existentes que se encriptaron antes mediante esas versiones.

Reemplazo de claves

Usa los siguientes lineamientos cuando reemplaces la clave que usas para encriptar objetos de Cloud Storage por una clave nueva:

  1. Verifica tus buckets para ver cuál usa la clave como clave de encriptación predeterminada. En estos buckets, reemplaza la clave antigua por una nueva.

    Esto garantiza que todos los objetos escritos en el bucket usen la clave nueva en el futuro.

  2. Inspecciona el código fuente para identificar qué solicitudes usan la clave en operaciones en curso, como el establecimiento de opciones de configuración de bucket y la carga, la copia o la reescritura de objetos. Actualiza estas instancias para que usen la clave nueva.

  3. Verifica los objetos encriptados con la clave antigua en todos tus buckets. Usa el método de reescritura de objetos para volver a encriptar cada objeto con la clave nueva.

  4. Inhabilita todas las versiones de la clave antigua. Después de inhabilitar las versiones antiguas de la clave, supervisa los registros del cliente y del servicio para las operaciones que fallan debido a que una versión dejó de estar disponible.

Inhabilita o destruye una versión de clave

  • Cuando inhabilitas o destruyes una versión de clave específica, no puedes desencriptar ningún objeto que esté encriptado con esa versión de clave.

    Por ejemplo, no puedes descargar, copiar ni reescribir el objeto y, si intentas hacerlo, se produce un error.

    • Si inhabilitas una versión de clave, puedes volver a habilitarla. Una vez que la vuelves a habilitar, podrás acceder a los objetos que se encriptaron con ella.

    • Si una versión de clave se destruye de forma permanente, no se podrán descargar objetos encriptados con esa versión nunca más.

    Antes de inhabilitar o destruir una versión de clave, debes identificar todos los objetos en todos los buckets que se encriptaron con la versión de clave específica. Una vez que se identifican, usa el método de reescritura de objetos a fin de volver a encriptar cada objeto con una versión de clave nueva, con una clave nueva o con claves del servidor.

  • Cuando inhabilitas o destruyes la versión principal de una clave, no puedes usar esa clave para la encriptación hasta que tengas una versión principal nueva. Por ejemplo, sin una versión principal, no puedes hacer lo siguiente:

    • No puedes especificar la clave como parte de la carga, la copia o la reescritura de un objeto.

    • No puedes subir, copiar ni reescribir objetos en un bucket que tenga la clave establecida como su clave de encriptación predeterminada, a menos que especifiques una clave válida diferente como parte de la operación.

    Una vez que tengas una versión principal de tu clave, las operaciones que la usen para encriptar los objetos se completarán con éxito.

    Antes de inhabilitar o destruir la versión principal de una clave, debes dejar de usarla como la versión principal. Puedes hacerlo de la siguiente manera:

    • Reemplázala por una versión principal nueva, por lo general, mediante una rotación de claves.
    • Quita las instancias en las que uses la clave para encriptar. Cuando lo hagas, Cloud Storage usará claves del servidor para la encriptación.

Versiones de claves y objetos bloqueados

Si una versión de clave encripta un objeto que está bloqueado, ya sea porque el objeto se almacena en un bucket con una política de retención bloqueada o porque el objeto tiene su propia configuración de retención bloqueada, la versión de clave solo se puede destruir si se cumplen las siguientes condiciones:

  • La fecha de vencimiento de la retención del objeto encriptado debe ser anterior a la fecha actual.
  • El objeto encriptado no debe tener ninguna conservación de objetos.

Una vez que todos los objetos relevantes cumplan con estas condiciones, es posible destruir la versión de clave, incluso sin borrar los objetos. Si lo haces, los datos de los objetos afectados se volverán inaccesibles de forma permanente.

¿Qué sigue?