En esta guía, se describe el uso de CMEK para Dataform y se explica cómo habilitar la encriptación de CMEK de los repositorios de Dataform.
De forma predeterminada, Dataform encripta el contenido del cliente almacenado en reposo. Dataform controla la encriptación por ti sin que debas realizar ninguna acción adicional. Esta opción se denomina Encriptación predeterminada de Google.
Si deseas controlar tus claves de encriptación, puedes usar las claves de encriptación administradas por el cliente (CMEK) en Cloud KMS con servicios integrados en CMEK, incluido Dataform. El uso de claves de Cloud KMS te permite controlar su nivel de protección, ubicación, programa de rotación, permisos de uso y acceso, y límites criptográficos. El uso de Cloud KMS también te permite hacer un seguimiento del uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google posea y administre las claves de encriptación de claves (KEK) simétricas que protegen tus datos, tú las controlas y administras en Cloud KMS.
Después de configurar tus recursos con CMEK, la experiencia de acceso a tus recursos de Dataform es similar a usar la encriptación predeterminada de Google. Para obtener más información sobre tus opciones de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).
Encriptación de CMEK de los datos del repositorio
Cuando aplicas la encriptación de CMEK a un repositorio de Dataform, todos los datos del cliente administrados por Dataform en ese repositorio se encriptan en reposo con la clave de protección de CMEK establecida para el repositorio. Estos datos incluyen lo siguiente:
- Contenido del repositorio de Git del repositorio de Dataform y sus espacios de trabajo
- Consultas SQL compiladas y errores de compilación
- Consultas de SQL almacenadas de acciones de flujo de trabajo
- Detalles de los errores de las acciones del flujo de trabajo ejecutadas
Dataform usa claves de protección de CMEK en las siguientes situaciones:
- Durante cada operación que requiera la desencriptación de los datos del cliente almacenados en reposo.
Entre estas operaciones, se incluyen las siguientes:
- Respuestas a una consulta del usuario, por ejemplo,
compilationResults.query
. - Creación de recursos de Dataform que requieren datos de repositorio encriptados creados con anterioridad, por ejemplo, invocaciones de flujos de trabajo.
- Operaciones de Git para actualizar el repositorio remoto, por ejemplo, enviar una confirmación de Git.
- Respuestas a una consulta del usuario, por ejemplo,
- Durante cada operación que requiera almacenar datos del cliente en reposo.
Estas operaciones incluyen, entre otras, las siguientes:
- Respuestas a una consulta del usuario, por ejemplo,
compilationResults.create
. - Operaciones de Git en un lugar de trabajo, por ejemplo, extraer una confirmación de Git
- Respuestas a una consulta del usuario, por ejemplo,
Dataform administra la encriptación de los datos del cliente asociados solo con los recursos de Dataform. Dataform no administra la encriptación de los datos del cliente que se crean en BigQuery a través de la ejecución de flujos de trabajo de Dataform. Para encriptar los datos creados y almacenados en BigQuery, configura la CMEK para BigQuery.
Claves admitidas
Dataform admite los siguientes tipos de claves CMEK:
- Claves de software de Cloud KMS
- Claves del módulo de seguridad de hardware (HSM) de Cloud
- Llaves de Cloud External Key Manager (Cloud EKM)
La disponibilidad de las claves varía según el tipo de clave y la región. Para obtener más información sobre la disponibilidad geográfica de las claves de CMEK, consulta Ubicaciones de Cloud KMS.
Restricciones
Dataform admite CMEK con las siguientes restricciones:
- El tamaño máximo de un repositorio encriptado con CMEK es de 512 MB.
- El tamaño máximo de un espacio de trabajo en un repositorio encriptado con CMEK es de 512 MB.
- No puedes aplicar una clave de protección de CMEK a un repositorio después de crearlo. Solo puedes aplicar la encriptación de CMEK durante la creación del repositorio.
- No puedes quitar una clave de protección de CMEK de un repositorio.
- No puedes cambiar una clave de protección de CMEK para un repositorio.
- Si estableces una clave CMEK predeterminada de Dataform para tu proyecto de Google Cloud, todos los repositorios nuevos creados en la ubicación del proyecto de Google Cloud deben encriptarse con CMEK. Cuando creas un repositorio nuevo en la ubicación del proyecto de Google Cloud, puedes aplicar la clave de CMEK predeterminada de Dataform o una clave de CMEK diferente, pero no puedes aplicar la encriptación predeterminada en reposo.
- Si cambias el valor de una clave CMEK predeterminada de Dataform, el valor anterior se aplica a los repositorios preexistentes, y el valor actualizado se aplica a los repositorios creados después del cambio.
- Solo puedes establecer una clave CMEK predeterminada de Dataform por ubicación de los repositorios del proyecto de Google Cloud.
- Las políticas de la organización de CMEK no están disponibles.
- El uso de claves de Cloud HSM y Cloud EKM está sujeto a disponibilidad. Para obtener más información sobre la disponibilidad de las claves en las diferentes ubicaciones, consulta Ubicaciones de Cloud KMS.
Cuotas de Cloud KMS y Dataform
Puedes usar claves de Cloud HSM y Cloud EKM con Dataform. Cuando usas CMEK en Dataform, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS. Por ejemplo, los repositorios de Dataform encriptados con CMEK pueden consumir estas cuotas para cada cambio en el contenido del repositorio. Las operaciones de encriptación y desencriptación con claves CMEK afectan las cuotas de Cloud KMS solo si usas claves de hardware (Cloud HSM) o externas (Cloud EKM). Para obtener más información, consulta Cuotas de Cloud KMS.
Administración de claves
Usa Cloud KMS para todas las operaciones de administración de claves. Dataform no puede detectar ni realizar cambios en cualquier cambio de clave hasta que Cloud KMS los propague. Algunas operaciones, como inhabilitar o destruir una clave, pueden tardar hasta tres horas en propagarse. Los cambios en los permisos suelen propagarse mucho más rápido.
Después de crear el repositorio, Dataform llama a Cloud KMS para asegurarse de que la clave siga siendo válida durante cada operación en los datos del repositorio encriptado.
Si Dataform detecta que tu clave de Cloud KMS se inhabilitó o se destruyó, no se podrá acceder a todos los datos almacenados en el repositorio correspondiente.
Si las llamadas de Dataform a Cloud KMS detectan que se volvió a habilitar una clave que estaba inhabilitada, Dataform restablece el acceso automáticamente.
Usa claves externas con Cloud EKM
Como alternativa al uso de claves que residen en Cloud KMS, puedes usar claves que residen con un socio de administración de claves externo compatible. Para ello, usa Cloud External Key Manager (Cloud EKM) para crear y administrar claves externas, que son punteros a claves que residen fuera de Google Cloud. Para obtener más información, consulta Cloud External Key Manager.
Después de crear una clave externa con Cloud EKM, puedes aplicarla a un nuevo repositorio de Dataform. Para ello, proporciona el ID de esa clave cuando crees el repositorio. Este procedimiento es igual que aplicar una clave de Cloud KMS a un repositorio nuevo.
Usa claves CMEK predeterminadas de Dataform
Para encriptar varios repositorios de Dataform con la misma clave de CMEK, puedes establecer una clave de CMEK predeterminada de Dataform para tu proyecto de Google Cloud. Debes especificar la ubicación del proyecto de Google Cloud para la clave de CMEK predeterminada de Dataform. Solo puedes configurar una clave de CMEK predeterminada por proyecto de Google Cloud.
Después de establecer una clave CMEK predeterminada de Dataform, Dataform aplica la clave a todos los repositorios nuevos que se crean en la ubicación del proyecto de Google Cloud de forma predeterminada. Cuando creas un repositorio, puedes usar la clave predeterminada o seleccionar una clave CMEK diferente.
Cómo se controla un estado de clave no disponible
En raras ocasiones, como durante períodos en los que Cloud KMS no está disponible, es posible que Dataform no pueda recuperar el estado de tu clave de Cloud KMS.
Si tu repositorio de Dataform está protegido por una clave que está habilitada en el momento en que Dataform no puede comunicarse con Cloud KMS, los datos del repositorio encriptado se vuelven inaccesibles.
Los datos del repositorio encriptado permanecerán inaccesibles hasta que Dataform pueda volver a conectarse con Cloud KMS y Cloud KMS responda que la clave está activa.
Por el contrario, si tu repositorio de Dataform está protegido por una clave que se inhabilitó en el momento en que Dataform no puede comunicarse con Cloud KMS por primera vez, los datos del repositorio encriptado permanecerán inaccesibles hasta que pueda volver a conectarse con Cloud KMS y tú hayas vuelto a habilitar tu clave.
Logging
Puedes auditar las solicitudes que Dataform envía a Cloud KMS en tu nombre en Cloud Logging si habilitaste el registro de auditoría para la API de Cloud KMS en tu proyecto. Estas entradas de registro de Cloud KMS se pueden ver en Cloud Logging. Para obtener más información, consulta Visualiza los registros.
Antes de comenzar
Decide si ejecutarás Dataform y Cloud KMS en diferentes proyectos o en el mismo proyecto. Te recomendamos que uses proyectos independientes para tener un mayor control sobre los permisos. Para obtener información sobre los números y los ID de los proyectos de Google Cloud, consulta la sección Identifica proyectos.
En el proyecto de Google Cloud que ejecuta Cloud KMS, haz lo siguiente:
- Habilita la API de Cloud Key Management Service.
- Crea un llavero de claves y una clave como se describe en Crea claves simétricas. Crea el llavero de claves en una ubicación que coincida con la ubicación de tu repositorio de Dataform:
-
Los repositorios deben usar claves regionales que coincidan. Por ejemplo, un repositorio en la región
asia-northeast3
debe protegerse con una clave de un llavero de claves ubicado enasia-northeast3
. -
La región
global
no se puede usar con Dataform.
-
Los repositorios deben usar claves regionales que coincidan. Por ejemplo, un repositorio en la región
Habilita CMEK
Dataform puede acceder a la clave en tu nombre después de que otorgues el rol de encriptador/desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) de Cloud KMS a la cuenta de servicio predeterminada de Dataform.
El ID de la cuenta de servicio de Dataform predeterminada tiene el siguiente formato:
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
Para otorgar el rol de Encriptador/Desencriptador de CryptoKey a la cuenta de servicio predeterminada de Dataform, sigue estos pasos:
Console
Abre la página Administración de claves en la consola de Google Cloud.
Haz clic en el nombre del llavero de claves que contiene la clave.
Haz clic en la casilla de verificación de la clave de encriptación a la que deseas agregar la función. Se abrirá la pestaña Permisos.
Haz clic en Agregar miembro.
Ingresa la dirección de correo electrónico de la cuenta de servicio
- Si la cuenta de servicio ya se encuentra en la lista de miembros, es porque tiene funciones existentes. Haz clic en la lista desplegable de funciones actuales de la cuenta de servicio.
Haz clic en la lista desplegable y selecciona Selecciona una función. Haz clic en Cloud KMS y, luego, en la función de Encriptador/desencriptador de CryptoKey de Cloud KMS.
Haz clic en Guardar para aplicar el rol a la cuenta de servicio.
gcloud
Puedes usar Google Cloud CLI para asignar la función:
gcloud kms keys add-iam-policy-binding \ --project=KMS_PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING \ KMS_KEY
Reemplaza lo siguiente:
KMS_PROJECT_ID
: Es el ID del proyecto de Google Cloud que ejecuta Cloud KMS.SERVICE_ACCOUNT
: La dirección de correo electrónico de tu cuenta de servicio predeterminada de DataformKMS_KEY_LOCATION
: Es el nombre de la ubicación de la clave de Cloud KMS.KMS_KEY_RING
: Es el nombre del llavero de claves de la clave de Cloud KMS.KMS_KEY
: Es el nombre de la clave de Cloud KMS.
Establece una clave CMEK predeterminada de Dataform
Configurar una clave CMEK predeterminada de Dataform para tu proyecto de Google Cloud te permite encriptar varios repositorios con la misma clave CMEK. Para obtener más información, consulta Cómo usar una clave predeterminada para los repositorios de Dataform.
Para establecer o editar una clave CMEK predeterminada, llama a la API de Dataform en la siguiente solicitud:
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Reemplaza lo siguiente:
- KMS_KEY_RING: Es el nombre del llavero de claves de tu clave de Cloud KMS.
- KMS_KEY: El nombre de tu clave de Cloud KMS.
- PROJECT_ID: El ID del proyecto de Google Cloud.
- PROJECT_LOCATION: El nombre de la ubicación de tu proyecto de Google Cloud.
Cómo quitar una clave CMEK predeterminada de Dataform
Para quitar una clave de CMEK predeterminada de Dataform de tu proyecto de Google Cloud, llama a la API de Dataform en la siguiente solicitud:
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Reemplaza lo siguiente:
- PROJECT_ID: El ID del proyecto de Google Cloud.
- PROJECT_LOCATION: Es el nombre de la ubicación de tu proyecto de Google Cloud en el que deseas restablecer la configuración predeterminada de la CMEK.
Verifica si se configuró una clave CMEK predeterminada de Dataform
Para verificar si se configuró una clave de CMEK predeterminada de Dataform para tu proyecto de Google Cloud, llama a la API de Dataform en la siguiente solicitud:
curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Reemplaza lo siguiente:
- PROJECT_ID: El ID del proyecto de Google Cloud.
- PROJECT_LOCATION: El nombre de la ubicación de tu proyecto de Google Cloud.
Aplica CMEK a un repositorio
Puedes aplicar la protección con CMEK a un repositorio de Dataform durante su creación.
Para aplicar la encriptación de CMEK a un repositorio de Dataform, selecciona la encriptación con la clave de CMEK predeterminada de Dataform o especifica una clave de Cloud KMS única cuando crees el repositorio. Para obtener instrucciones, consulta Cómo crear un repositorio.
No puedes cambiar el mecanismo de encriptación de un repositorio de Dataform después de crearlo.
Para obtener más información, consulta Restricciones.
¿Qué sigue?
- Para obtener más información sobre CMEK, consulta la descripción general de CMEK.
- Para obtener más información sobre las cuotas de Cloud KMS, consulta Cuotas de Cloud KMS.
- Para obtener más información sobre los precios de Cloud KMS, consulta Precios de Cloud KMS.
- Para obtener más información sobre los repositorios de Dataform, consulta Cómo crear un repositorio.