De forma predeterminada, Workflows encripta tus datos almacenados en reposo. Google Cloud maneja y administra la encriptación por ti sin que debas realizar ninguna otra acción.
Si tienes requisitos regulatorios o de cumplimiento específicos relacionados con las claves que protegen tus datos, puedes usar claves de encriptación administradas por el cliente (CMEK) para Workflows. Tu flujo de trabajo y los datos en reposo asociados están protegidos con una clave de encriptación a la que solo tú puedes acceder y que puedes controlar y administrar con Cloud Key Management Service (Cloud KMS).
Qué se protege con CMEK
Cuando implementas un flujo de trabajo, puedes especificar una clave de Cloud KMS. Esta clave se usa para encriptar el flujo de trabajo y sus ejecuciones:
Un flujo de trabajo requiere un archivo de origen que contenga una definición de flujo de trabajo válida. Este archivo de origen está encriptado con la clave.
Una ejecución de flujo de trabajo ejecuta la definición actual del flujo de trabajo (una revisión del flujo de trabajo específica). Cuando se usa la clave asociada con la revisión del flujo de trabajo en el momento de la implementación, se encriptan el flujo de trabajo compilado, así como cualquier entrada, salida y dato del entorno de ejecución de ejecución almacenado. Esto incluye argumentos de ejecución, resultados, errores y excepciones; eventos de Eventarc entregados, y solicitudes y respuestas de devolución de llamada y HTTP.
Antes de comenzar
Antes de usar CMEK en Workflows, completa los siguientes pasos:
Habilitar las APIs
Console
-
Habilita las API de Cloud KMS and Workflows.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- Actualiza los componentes de
gcloud
:gcloud components update
- Habilita las APIs de Cloud KMS y Workflows para el proyecto que almacenará tus claves de encriptación.
gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
-
Cloud KMS produce Registros de auditoría de Cloud cuando las claves se habilitan, inhabilitan o usan los recursos de Workflows para encriptar y desencriptar datos. Asegúrate de que el registro esté habilitado para la API de Cloud KMS en tu proyecto y de que hayas decidido qué permisos y funciones específicos del registro se aplican a tu caso de uso. Para obtener más detalles, consulta la información de registro de auditoría de Cloud KMS.
Crea un llavero de claves y una clave de Cloud KMS globales
Puedes crear un llavero de claves nuevo o usar uno existente. Dentro del llavero de claves, puedes agregar una clave nueva o usar una existente.
Recupera el ID de recurso de una clave de Cloud KMS
El ID de recurso de una clave de Cloud KMS es obligatorio cuando habilitas CMEK para un flujo de trabajo. En este documento, consulta Habilita CMEK para un flujo de trabajo.
Console
En la consola de Google Cloud, ve a la página Administración de claves.
Haz clic en el llavero de claves que contiene la clave.
Busca la clave con el ID del recurso que quieres recuperar y haz clic en more_vert Más.
Haz clic en Copiar nombre del recurso.
El ID de recurso de la clave se copiará en el portapapeles. Su formato es similar al siguiente:
projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
Una clave contiene cero o más versiones de clave. El ID de recurso de una versión de clave es el ID de clave, más una barra diagonal (
/
) y el ID de versión. Para obtener una lista de todas las versiones de una clave, haz lo siguiente:- Haz clic en el nombre de la llave.
- Para ver una versión específica, haz clic en Más.
- Haz clic en Copiar nombre del recurso.
gcloud
Enumera todas las claves de un llavero de claves determinado:
gcloud kms keys list --keyring RING_NAME --location LOCATION
Reemplaza lo siguiente:
RING_NAME
: es el nombre del llavero de claves.LOCATION
: Es la región del llavero de claves.
El resultado incluye el ID de recurso de cada clave. Por ejemplo:
NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
Una clave tiene cero o más versiones de clave. El ID de recurso de una versión de clave es el ID de clave, más una barra diagonal (
/
) y el ID de versión. Obtén una lista de todas las versiones de una clave:gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
El resultado incluye el ID de recurso de cada versión de clave. Por ejemplo:
NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
Otorga al agente de servicio de Workflows acceso a la clave
Debes otorgar al agente de servicio de flujos de trabajo la función de encriptador y desencriptador de CryptoKey de Cloud KMS de Identity and Access Management (IAM) para que pueda acceder a la clave de Cloud KMS:
Console
Cuando habilitas CMEK para un flujo de trabajo a través de la consola, se te solicita que otorgues la función Encriptador/Desencriptador de CryptoKey de Cloud KMS a la cuenta de servicio. Para obtener más información, en este documento, consulta Habilita CMEK para un flujo de trabajo.
gcloud
gcloud kms keys add-iam-policy-binding KEY_NAME \ --keyring RING_NAME \ --location LOCATION \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Reemplaza lo siguiente:
KEY_NAME
: el nombre de la clave. Por ejemplo,my-key
RING_NAME
: es el nombre del llavero de claves. Por ejemplo,my-keyring
LOCATION
: es la ubicación de la clave. Por ejemplo,us-central1
PROJECT_NUMBER
: el número de tu proyecto de Google Cloud. Para encontrar el número del proyecto, ve a la página de bienvenida de la consola de Google Cloud o ejecuta el siguiente comando:export PROJECT=$(gcloud info --format='value(config.project)') gcloud projects describe ${PROJECT} --format="value(projectNumber)"
Siempre que el agente de servicio tenga la función roles/cloudkms.cryptoKeyEncrypterDecrypter
, un flujo de trabajo de tu proyecto puede encriptar y desencriptar sus datos con la clave CMEK. Si revocas esta función o si inhabilitas o destruyes la clave CMEK, no se podrá acceder a esos
datos. En este documento, consulta Cómo inhabilitar Cloud KMS.
Habilita CMEK para un flujo de trabajo
Cuando creas un flujo de trabajo o lo actualizas después, puedes especificar la clave de Cloud KMS que el flujo de trabajo debe usar para la encriptación de datos.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo.
Haz clic en el nombre del flujo de trabajo que deseas actualizar.
Aparecerá la página Detalles del flujo de trabajo.
Haz clic en
Editar.Selecciona Clave de encriptación administrada por el cliente (CMEK).
En la lista Selecciona una clave administrada por el cliente, selecciona o filtra por una clave de Cloud KMS.
Opcional: Para ingresar de forma manual el nombre del recurso de la clave, en la lista Selecciona una clave administrada por el cliente, haz clic en Ingresar la clave de forma manual y, luego, ingresa el nombre del recurso de la clave en el formato especificado.
Si se te solicita, otorga la función
cloudkms.cyptoKeyEncrypterDecrypter
a la cuenta de servicio de Workflows con la funciónworkflows.serviceAgent
.Haz clic en Siguiente.
Para guardar los cambios y, luego, implementar el flujo de trabajo actualizado, haz clic en Implementar.
gcloud
gcloud workflows deploy WORKFLOW_NAME \ --source=SOURCE_FILE \ --kms-key=KEY \ --location LOCATION \ --service-account=SERVICE_ACCOUNT
Reemplaza lo siguiente:
WORKFLOW_NAME
: El nombre de tu flujo de trabajo.SOURCE_FILE
: Es el archivo de origen de tu flujo de trabajo con una extensión de archivoyaml
para un archivo YAML o con una extensión de archivojson
para un archivo JSON; por ejemplo,myWorkflow.yaml
.KEY
: Es el ID de recurso de la clave en el formatoprojects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
. Puedes recuperar el ID de clave.LOCATION
: Es la ubicación del flujo de trabajo.SERVICE_ACCOUNT
: Es la cuenta de servicio que usará el flujo de trabajo para acceder a otros servicios de Google Cloud, por ejemplo,SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
. Recomendamos usar una cuenta de servicio con los privilegios mínimos necesarios para acceder a los recursos requeridos. Si se deja en blanco, se usa la cuenta de servicio predeterminada. Si deseas obtener más información, consulta Otorga permiso a un flujo de trabajo para acceder a los recursos de Google Cloud.
Ten en cuenta lo siguiente:
- Las revisiones y ejecuciones del flujo de trabajo se encriptan con la clave especificada en el momento de la implementación. Los recursos encriptados previamente con una clave anterior permanecen encriptados con esa clave anterior. Si un flujo de trabajo se edita posteriormente y se especifica una clave nueva, esa revisión del flujo de trabajo se encripta con la clave nueva y cualquier ejecución posterior usará la clave nueva.
- Antes, las revisiones y ejecuciones del flujo de trabajo que no estaban encriptadas con CMEK permanecen sin encriptación.
- Si inhabilitas las CMEK para una revisión del flujo de trabajo, se crearán las ejecuciones posteriores sin encriptación CMEK. En este documento, consulta Inhabilita CMEK para un flujo de trabajo. Las revisiones y ejecuciones del flujo de trabajo existentes permanecen encriptadas con las claves con las que se encriptaron antes.
Verifica la integración de Cloud KMS
Para verificar la integración de CMEK, se muestran los metadatos de un flujo de trabajo.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo.
Haz clic en el nombre del flujo de trabajo que deseas verificar.
Aparecerá la página Detalles del flujo de trabajo.
Haz clic en la pestaña Detalles.
El valor de Encriptación muestra el ID de recurso de la clave de Cloud KMS que se usó para proteger el flujo de trabajo y su ejecución.
gcloud
gcloud workflows describe WORKFLOW_NAME \ --location=LOCATION
El resultado debería ser similar al siguiente ejemplo:
createTime: '2022-08-10T19:57:58.233177709Z' cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME revisionCreateTime: '2022-11-18T19:44:04.933633237Z' revisionId: 000009-8be serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com sourceContents: [...] state: ACTIVE updateTime: '2022-11-18T19:44:05.171793128Z'
El valor cryptokeyName
es el ID de recurso de la clave de Cloud KMS que se usa para proteger el flujo de trabajo y su ejecución.
Inhabilita CMEK para un flujo de trabajo
Puedes inhabilitar CMEK para un flujo de trabajo de modo que ya no use la clave de Cloud KMS asociada.
Console
En la consola de Google Cloud, ve a la página Flujos de trabajo.
Haz clic en el nombre del flujo de trabajo que deseas actualizar.
Aparecerá la página Detalles del flujo de trabajo.
Haz clic en
Editar.Para borrar el botón de selección Clave de encriptación administrada por el cliente (CMEK), elige Clave de encriptación administrada por Google.
Haz clic en Siguiente.
Para guardar los cambios y, luego, implementar el flujo de trabajo actualizado, haz clic en Implementar.
gcloud
gcloud workflows deploy WORKFLOW_NAME \ --source=SOURCE_FILE \ --clear-kms-key \ --service-account=SERVICE_ACCOUNT
Esto inhabilita las CMEK para la revisión actual del flujo de trabajo y cualquier ejecución posterior se crea sin encriptación con CMEK. Las revisiones y ejecuciones del flujo de trabajo existentes permanecen encriptadas con las claves con las que se encriptaron previamente.
Inhabilita Cloud KMS
Si deseas revocar el acceso a los datos de tu flujo de trabajo o las ejecuciones de flujo de trabajo, puedes realizar cualquiera de las siguientes acciones para inhabilitar Cloud KMS:
Inhabilita o destroy la versión de clave primaria de la clave de encriptación administrada por el cliente. Cuando se inhabilita una versión de clave CMEK, se suspende el acceso a todos los datos protegidos por esa versión de clave. La destrucción de una versión de clave es la contraparte permanente de esta acción. Ambos afectan solo a los flujos de trabajo y a las ejecuciones de flujos de trabajo asociados con la clave específica. No puedes crear ejecuciones nuevas ni ver los recursos asociados con la clave inhabilitada o destruida. Las ejecuciones activas fallarán y se mostrará el mensaje de error correspondiente.
Revoca la función
cloudkms.cryptoKeyEncrypterDecrypter
de IAM del agente de servicio de Workflows. Esto afecta a todos los flujos de trabajo del proyecto de Google Cloud que admiten la encriptación mediante CMEK. No puedes crear nuevos flujos de trabajo y ejecuciones integrados con CMEK ni ver ningún recurso encriptado con CMEK. Cualquier ejecución activa fallará y mostrará el mensaje de error correspondiente.
Aunque ninguna de las dos operaciones garantiza la revocación de acceso instantánea, los cambios de IAM se suelen propagar más rápido. Para obtener más información, consulta Coherencia de recursos de Cloud KMS y Propagación de cambios de acceso.
Soluciona problemas
Puedes encontrar errores cuando uses Cloud KMS con Workflows. En la siguiente tabla, se describen los diferentes problemas y cómo resolverlos.
Problema | Descripción |
---|---|
Se denegó el permiso cloudkms.cryptoKeyVersions.useToEncrypt |
Es posible que la clave de Cloud KMS proporcionada no exista o que el permiso no esté configurado de forma correcta.
Solución:
|
La versión de clave no está habilitada | Se inhabilitó la versión de clave de Cloud KMS proporcionada.
Solución: Volver a habilitar la versión de clave de Cloud KMS. |
La región del llavero de claves no coincide con el recurso que se protegerá | La región del llavero de claves de KMS proporcionada es diferente de la región del
flujo de trabajo.
Solución: Usa un llavero de claves de Cloud KMS y un flujo de trabajo protegido de la misma región. (ten en cuenta que pueden estar en diferentes proyectos). Para obtener más información, consulta Ubicaciones de Cloud KMS y Ubicaciones de flujos de trabajo. |
Se superó el límite de cuota de Cloud KMS | Se alcanzó el límite de cuota para las solicitudes de Cloud KMS.
Solución: Limita la cantidad de llamadas de Cloud KMS o aumenta el límite de la cuota. Para obtener más información, consulta Cuotas de Cloud KMS. |
Cómo se controla un estado de clave no disponible
Si, por algún motivo, Cloud KMS no está disponible, es posible que Workflows no pueda recuperar el estado de tu clave desde Cloud KMS.
Si el estado de la clave no está disponible, el flujo de trabajo o su ejecución mostrarán un valor state: UNAVAILABLE
y los detalles relacionados en el campo stateError
.
Si el estado de la clave deja de estar disponible durante la ejecución de un flujo de trabajo (por ejemplo, se revoca un permiso durante una devolución de llamada), se produce un error de tiempo de ejecución y se muestra un valor de state: FAILED
y los detalles relacionados en el campo error
.
Precios
Esta integración no genera costos adicionales más allá de las operaciones de clave, que se facturan en tu proyecto de Google Cloud. Para obtener información sobre los precios actuales, consulta Precios de Cloud KMS.