En esta guía se describe cómo usar CMEK en Dataform y se explica cómo habilitar el cifrado con CMEK de los repositorios de Dataform.
De forma predeterminada, Dataform cifra el contenido del cliente en reposo. Dataform se encarga del cifrado sin que tengas que hacer nada más. Esta opción se llama Cifrado predeterminado de Google.
Si quieres controlar tus claves de cifrado, puedes usar claves de cifrado gestionadas por el cliente (CMEKs) en Cloud KMS con servicios integrados con CMEK, como Dataform. Si usas claves de Cloud KMS, tendrás control sobre su nivel de protección, ubicación, calendario de rotación, permisos de uso y acceso, y límites criptográficos. Con Cloud KMS también puedes monitorizar el uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y el gestor de las claves de cifrado de claves (KEKs) simétricas que protegen tus datos, tú controlas y gestionas estas claves en Cloud KMS.
Una vez que hayas configurado tus recursos con CMEKs, la experiencia de acceder a tus recursos de Dataform será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta Claves de encriptado gestionadas por el cliente (CMEK).
Encriptado con CMEK de los datos del repositorio
Cuando aplicas el cifrado con CMEK a un repositorio de Dataform, todos los datos de clientes gestionados por Dataform de ese repositorio se cifran en reposo con la clave de protección CMEK definida para el repositorio. Estos datos incluyen lo siguiente:
- Contenido del repositorio de Git del repositorio de Dataform y sus espacios de trabajo
- Consultas de 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 CMEK en los siguientes casos:
- Durante cada operación que requiera descifrar los datos de los clientes almacenados en reposo.
Estas operaciones incluyen, entre otras, las siguientes:
- Respuestas a una consulta de un usuario, como
compilationResults.query
. - Creación de recursos de Dataform que requieren datos de repositorios cifrados creados previamente, como las invocaciones de flujos de trabajo.
- Operaciones de Git para actualizar el repositorio remoto, como insertar un commit de Git.
- Respuestas a una consulta de un usuario, como
- Durante cada operación que requiera almacenar datos de clientes en reposo.
Estas operaciones incluyen, entre otras, las siguientes:
- Respuestas a una consulta de un usuario, como
compilationResults.create
. - Operaciones de Git en un espacio de trabajo, como extraer una confirmación de Git.
- Respuestas a una consulta de un usuario, como
Dataform gestiona el cifrado de los datos de los clientes asociados únicamente a los recursos de Dataform. Dataform no gestiona el cifrado de los datos de clientes que se crean en BigQuery mediante la ejecución de flujos de trabajo de Dataform. Para cifrar los datos creados y almacenados en BigQuery, configura CMEK para BigQuery.
Claves admitidas
Dataform admite los siguientes tipos de claves de CMEK:
- Claves de software de Cloud KMS
- Claves de módulo de seguridad de hardware (HSM) de Cloud
- Claves de Cloud External Key Manager (Cloud EKM)
La disponibilidad de las llaves varía según el tipo de llave y la región. Para obtener más información sobre la disponibilidad geográfica de las claves de CMEK, consulta las ubicaciones de Cloud KMS.
Restricciones
Dataform admite CMEK con las siguientes restricciones:
- El tamaño máximo de un repositorio cifrado con CMEK es de 512 MB.
- El tamaño máximo de un espacio de trabajo en un repositorio cifrado con CMEK es de 512 MB.
- No puedes aplicar una clave de protección CMEK a un repositorio después de haberlo creado. Solo puedes aplicar el cifrado con CMEK durante la creación del repositorio.
- No puedes quitar una clave de protección CMEK de un repositorio.
- No puedes cambiar la clave de protección de CMEK de un repositorio.
- Si defines una clave CMEK de Dataform predeterminada para tu Google Cloud proyecto, todos los repositorios nuevos creados en la ubicación del Google Cloud proyecto deben encriptarse con CMEK. Cuando creas un repositorio en la Google Cloud ubicación del proyecto, puedes aplicar la clave CMEK predeterminada de Dataform u otra clave CMEK, pero no puedes aplicar el cifrado predeterminado en reposo.
- Si cambias el valor de una clave CMEK de Dataform predeterminada, el valor anterior se aplicará a los repositorios que ya existían, y el valor actualizado se aplicará a los repositorios creados después del cambio.
- Solo puedes definir una clave CMEK de Dataform predeterminada por ubicación de los repositorios de proyectos de Google Cloud .
- Las políticas de 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 distintas ubicaciones, consulta las 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 cifrados con CMEK pueden consumir estas cuotas por cada cambio en el contenido del repositorio. Las operaciones de cifrado y descifrado con claves CMEK solo afectan a las cuotas de Cloud KMS si usas claves de hardware (Cloud HSM) o externas (Cloud EKM). Para obtener más información, consulta las cuotas de Cloud KMS.
Gestionar claves
Usa Cloud KMS para todas las operaciones de gestión de claves. Dataform no puede detectar ni actuar sobre ningún 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.
Una vez creado el repositorio, Dataform llama a Cloud KMS para asegurarse de que la clave sigue siendo válida durante cada operación en los datos del repositorio cifrados.
Si Dataform detecta que tu clave de Cloud KMS se ha inhabilitado o destruido, no se podrá acceder a todos los datos almacenados en el repositorio correspondiente.
Si las llamadas de Dataform a Cloud KMS detectan que se ha vuelto a habilitar una clave que antes estaba inhabilitada, Dataform restaura el acceso automáticamente.
Usar claves externas con Cloud EKM
Como alternativa a las claves que residen en Cloud KMS, puedes usar claves que residan en un partner de gestión de claves externo admitido. Para ello, usa Cloud External Key Manager (Cloud EKM) para crear y gestionar claves externas, que son punteros a claves que se encuentran 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 proporcionando el ID de esa clave al crear el repositorio. Este procedimiento es el mismo que el que se sigue para aplicar una clave de Cloud KMS a un repositorio nuevo.
Usar las claves CMEK predeterminadas de Dataform
Para cifrar varios repositorios de Dataform con la misma clave CMEK, puedes definir una clave CMEK de Dataform predeterminada para tu Google Cloud proyecto. Debe especificar la ubicación del proyecto Google Cloud para la clave CMEK de Dataform predeterminada. Solo puedes definir una clave CMEK predeterminada por proyecto. Google Cloud
Después de definir una clave CMEK de Dataform predeterminada, Dataform aplica la clave a todos los repositorios nuevos creados en la ubicación del proyecto Google Cloud de forma predeterminada. Cuando creas un repositorio, puedes usar la clave predeterminada o seleccionar otra clave CMEK.
Cómo se gestiona un estado de clave no disponible
En casos excepcionales, como durante los periodos 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, no se podrá acceder a los datos cifrados del repositorio.
Los datos del repositorio cifrado no se pueden acceder hasta que Dataform se vuelva a conectar 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 está inhabilitada en el momento en que Dataform no puede comunicarse con Cloud KMS, los datos cifrados del repositorio seguirán siendo inaccesibles hasta que pueda volver a conectarse a Cloud KMS y hayas vuelto a habilitar la clave.
Almacenamiento de registros
Puedes auditar las solicitudes que Dataform envía a Cloud KMS en tu nombre en Cloud Logging si has habilitado el registro de auditoría de la API 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 el artículo sobre cómo ver registros.
Antes de empezar
Decide si vas a ejecutar Dataform y Cloud KMS en proyectos diferentes 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 IDs y los números de proyecto, consulta el artículo sobre cómo identificar proyectos. Google Cloud
En el Google Cloud proyecto que ejecuta Cloud KMS:
- Habilita la API Cloud Key Management Service.
- Crea un conjunto de claves y una clave tal como se describe en el artículo Crear conjuntos de claves y claves. Crea el conjunto de claves en una ubicación que coincida con la de tu repositorio de Dataform:
-
Los repositorios deben usar claves regionales coincidentes. Por ejemplo, un repositorio de la región
asia-northeast3
debe protegerse con una clave de un conjunto de claves ubicado enasia-northeast3
. -
La región
global
no se puede usar con Dataform.
-
Los repositorios deben usar claves regionales coincidentes. Por ejemplo, un repositorio de la región
Habilitar CMEK
Dataform puede acceder a la clave en tu nombre después de que concedas el rol Encargado del encriptado y desencriptado de claves de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) de Cloud KMS a la cuenta de servicio predeterminada de Dataform.
El ID de tu cuenta de servicio de Dataform predeterminada tiene el siguiente formato:
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
Para asignar el rol Encargado del encriptado y desencriptado de la clave criptográfica a la cuenta de servicio predeterminada de Dataform, sigue estos pasos:
Consola
Abre la página Gestión de claves en la Google Cloud consola.
Haga clic en el nombre del conjunto de claves que contiene la clave.
Haz clic en la casilla de verificación de la clave de cifrado a la que quieras añadir el rol. Se abrirá la pestaña Permisos.
Haz clic en Añadir miembro.
Introduce la dirección de correo de la cuenta de servicio.
- Si la cuenta de servicio ya está en la lista de miembros, tiene roles asignados. Haga clic en la lista desplegable del rol actual de la cuenta de servicio.
Haz clic en la lista desplegable Seleccionar un rol, en Cloud KMS y, a continuación, en el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.
Haz clic en Guardar para aplicar el rol a la cuenta de servicio.
gcloud
Puedes usar Google Cloud CLI para asignar el rol:
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
Haz los cambios siguientes:
KMS_PROJECT_ID
: el ID de tu Google Cloud proyecto que ejecuta Cloud KMSSERVICE_ACCOUNT
: la dirección de correo de tu cuenta de servicio de Dataform predeterminadaKMS_KEY_LOCATION
: el nombre de la ubicación de tu clave de Cloud KMSKMS_KEY_RING
: el nombre del conjunto de claves de tu clave de Cloud KMSKMS_KEY
: el nombre de clave de tu clave de Cloud KMS
Aplicar una política de organización de CMEK
Dataform se integra con dos restricciones de políticas de la organización para ayudar a garantizar el uso de CMEK en toda la organización:
constraints/gcp.restrictNonCmekServices
se usa para requerir protección con CMEK.constraints/gcp.restrictCmekCryptoKeyProjects
se usa para limitar las claves de Cloud KMS que se utilizan para la protección con CMEK.
Esta integración te permite especificar los siguientes requisitos de cumplimiento del cifrado para los repositorios de Dataform de tu organización:
- Requerir claves CMEK para todos los repositorios de Dataform nuevos
- Restringir las claves de Cloud KMS de un proyecto de Dataform
Consideraciones al aplicar políticas de organización
Antes de aplicar cualquier política de organización de CMEK, debes tener en cuenta lo siguiente.
Prepararse para un retraso de propagación
Después de definir o actualizar una política de la organización, la nueva política puede tardar hasta 15 minutos en aplicarse.
Tener en cuenta los recursos disponibles
Los recursos ya creados no están sujetos a las políticas de la organización que se creen posteriormente. Por ejemplo, una política de organización no se aplica de forma retroactiva a los repositorios que ya existen. Se puede seguir accediendo a esos recursos sin una CMEK y, si procede, siguen cifrados con las claves que ya tenían.
Verificar los permisos necesarios para definir una política de la organización
Puede que sea difícil obtener el permiso para definir o actualizar la política de la organización con fines de prueba. Debes tener el rol Administrador de políticas de la organización, que solo se puede asignar a nivel de organización (no a nivel de proyecto o carpeta).
Aunque el rol debe concederse a nivel de organización, sigue siendo posible especificar una política que solo se aplique a un proyecto o una carpeta concretos.
Requerir CMEKs para todos los repositorios de Dataform nuevos
Puedes usar la restricción constraints/gcp.restrictNonCmekServices
para requerir que se usen claves CMEK para proteger todos los repositorios de Dataform nuevos de una organización.
Si se define, esta política de organización provoca que fallen todas las solicitudes de creación de recursos sin una clave de Cloud KMS especificada.
Una vez que hayas definido esta política, solo se aplicará a los repositorios nuevos del proyecto. Los repositorios que ya tengas y a los que no se les haya aplicado ninguna clave de Cloud KMS seguirán existiendo y podrás acceder a ellos sin problemas.
Consola
En la Google Cloud consola, ve a la página Políticas de la organización.
En Filtrar, busca la siguiente restricción:
constraints/gcp.restrictNonCmekServices
En la columna Nombre, haga clic en Restringir los servicios que pueden crear recursos sin CMEK.
Haz clic en
Gestionar política.En la página Editar política, vaya a Fuente de la política y seleccione Anular política del recurso superior.
En Reglas, haz clic en Añadir una regla.
En la lista Valores de la política, selecciona Personalizado.
En la lista Tipo de política, selecciona Denegar.
En el campo Valores personalizados, introduce lo siguiente:
is:dataform.googleapis.com
Haz clic en Hecho y, a continuación, en Definir política.
gcloud
Crea un archivo temporal
/tmp/policy.yaml
para almacenar la política:name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:dataform.googleapis.com
Sustituye
PROJECT_ID
por el ID del proyecto en el que vas a aplicar esta restricción.Ejecuta el comando
org-policies set-policy
:gcloud org-policies set-policy /tmp/policy.yaml
Para verificar que la política se ha aplicado correctamente, puedes intentar crear un repositorio de Dataform en el proyecto. El proceso falla a menos que especifiques una clave de Cloud KMS.
Restringir las claves de Cloud KMS de un proyecto de Dataform
Puedes usar la restricción constraints/gcp.restrictCmekCryptoKeyProjects
para limitar las claves de Cloud KMS que puedes usar para proteger un repositorio en un proyecto de Dataform.
Por ejemplo, puedes especificar una regla similar a la siguiente: "En todos los repositorios de Dataform de projects/my-company-data-project
, las claves de Cloud KMS que se usen en este proyecto deben proceder de projects/my-company-central-keys
O projects/team-specific-keys
".
Consola
En la Google Cloud consola, ve a la página Políticas de la organización.
En Filtrar, busca la siguiente restricción:
constraints/gcp.restrictCmekCryptoKeyProjects
En la columna Nombre, haga clic en Restringir los proyectos que pueden proporcionar CryptoKeys de KMS para CMEK.
Haz clic en
Gestionar política.En la página Editar política, vaya a Fuente de la política y seleccione Anular política del recurso superior.
En Reglas, haz clic en Añadir una regla.
En la lista Valores de la política, selecciona Personalizado.
En la lista Tipo de política, selecciona Permitir.
En el campo Valores personalizados, introduce lo siguiente:
under:projects/KMS_PROJECT_ID
Sustituye
KMS_PROJECT_ID
por el ID del proyecto en el que se encuentran las claves de Cloud KMS que quieres usar.Por ejemplo,
under:projects/my-kms-project
.Haz clic en Hecho y, a continuación, en Definir política.
gcloud
Crea un archivo temporal
/tmp/policy.yaml
para almacenar la política:name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects spec: rules: - values: allowedValues: - under:projects/KMS_PROJECT_ID
Sustituye lo siguiente:
PROJECT_ID
: el ID del proyecto en el que vas a aplicar esta restricción.KMS_PROJECT_ID
: el ID del proyecto en el que se encuentran las claves de Cloud KMS que quieres usar.
Ejecuta el comando
org-policies set-policy
:gcloud org-policies set-policy /tmp/policy.yaml
Para verificar que la política se ha aplicado correctamente, puedes intentar crear un repositorio de Dataform con una clave de Cloud KMS de otro proyecto. El proceso fallará.
Definir una clave CMEK de Dataform predeterminada
Si defines una clave CMEK de Dataform predeterminada para tu Google Cloud proyecto, puedes cifrar varios repositorios con la misma clave CMEK. Para obtener más información, consulta el artículo sobre cómo usar una clave predeterminada en repositorios de Dataform.
Para definir o editar una clave CMEK predeterminada, llama a la API 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
Haz los cambios siguientes:
- KMS_KEY_RING: el nombre del conjunto de claves de tu clave de Cloud KMS.
- KMS_KEY: el nombre de tu clave de Cloud KMS.
- PROJECT_ID: el ID de tu proyecto de Google Cloud .
- PROJECT_LOCATION: el nombre de la ubicación de tu proyecto de Google Cloud .
Eliminar una clave CMEK de Dataform predeterminada
Para quitar una clave CMEK de Dataform predeterminada de tu proyecto Google Cloud , llama a la API 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
Haz los cambios siguientes:
- PROJECT_ID: el ID de tu proyecto de Google Cloud .
- PROJECT_LOCATION: el nombre de la ubicación de tu Google Cloud proyecto en el que quieras quitar la CMEK predeterminada.
Comprobar si se ha definido una clave CMEK de Dataform predeterminada
Para comprobar si se ha definido una clave CMEK de Dataform predeterminada para tu proyecto, Google Cloud llama a la API 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
Haz los cambios siguientes:
- PROJECT_ID: el ID de tu proyecto de Google Cloud .
- PROJECT_LOCATION: el nombre de la ubicación de tu proyecto de Google Cloud .
Aplicar CMEK a un repositorio
Puedes aplicar la protección con CMEK a un repositorio de Dataform durante la creación del repositorio.
Para aplicar el cifrado con CMEK a un repositorio de Dataform, selecciona el cifrado con la clave CMEK predeterminada de Dataform o especifica una clave de Cloud KMS única al crear el repositorio. Para obtener instrucciones, consulta el artículo Crear un repositorio.
No puedes cambiar el mecanismo de cifrado de un repositorio de Dataform después de crearlo.
Para obtener más información, consulta Restricciones.
Siguientes pasos
- Para obtener más información sobre las claves de cifrado gestionadas por el cliente, consulta la descripción general de las claves de cifrado gestionadas por el cliente.
- 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 la página de precios de Cloud KMS.
- Para obtener más información sobre los repositorios de Dataform, consulta el artículo Crear un repositorio.