Usar claves de encriptado gestionadas por el cliente

De forma predeterminada, Workflows cifra el contenido del cliente en reposo. Workflows 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 CMEKs, como Workflows. 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. Cloud KMS también te permite 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 acceso a tus recursos de Workflows 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).

Puedes proteger tu flujo de trabajo y los datos asociados en reposo con una clave de cifrado a la que solo tú puedes acceder y que puedes controlar y gestionar con Cloud KMS.

Qué se protege con CMEK

Cuando despliegues un flujo de trabajo, puedes especificar una clave de Cloud KMS. Esta clave se usa para cifrar 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á cifrado con la clave.

  • Una ejecución de flujo de trabajo ejecuta la definición del flujo de trabajo actual (una revisión de flujo de trabajo específica). La clave asociada a la revisión del flujo de trabajo en el momento de su implementación se usa para cifrar el flujo de trabajo compilado, así como los datos de entrada, salida y de tiempo de ejecución almacenados. Esto incluye argumentos de ejecución, resultados, errores y excepciones, que se envían como eventos de Eventarc, así como retrollamadas y solicitudes y respuestas HTTP.

Antes de empezar

Antes de usar claves de cifrado gestionadas por el cliente en Workflows, sigue estos pasos:

  1. Habilita las APIs.

    Consola

    1. Enable the Cloud KMS and Workflows APIs.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the APIs

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      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.

    2. Actualiza gcloud componentes.
      gcloud components update
    3. Habilita las APIs Cloud KMS y Workflows en el proyecto que almacenará tus claves de cifrado.
      gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
  2. Cloud KMS genera registros de auditoría de Cloud cuando se habilitan o inhabilitan claves, o cuando los recursos de Workflows las usan para encriptar y desencriptar datos. Comprueba que el registro está habilitado para la API Cloud KMS en tu proyecto y que has decidido qué permisos y roles específicos del registro se aplican a tu caso práctico. Para obtener más información, consulta el artículo sobre los registros de auditoría de Cloud KMS.

  3. Crear un conjunto de claves y una clave de Cloud KMS

    Puedes crear un nuevo llavero o usar uno que ya tengas. Dentro del conjunto de claves, puedes añadir una clave nueva o usar una que ya tengas.

    1. Crea un conjunto de claves.

    2. Crea una clave para un conjunto de claves específico.

    Obtener el ID de recurso de una clave de Cloud KMS

    Se necesita el ID de recurso de una clave de Cloud KMS para habilitar CMEK en un flujo de trabajo. En este documento, consulta la sección Habilitar las claves de cifrado gestionadas por el cliente en un flujo de trabajo.

    Consola

    1. En la Google Cloud consola, ve a la página Gestión de claves.

      Ir a Gestión de claves

    2. Haz clic en el conjunto de claves que contiene la clave.

    3. En la clave cuyo ID de recurso quieras obtener, haz clic en Más.

    4. Haga clic en Copiar nombre de recurso.

      El ID del recurso de la clave se copia en el portapapeles. Su formato es similar al siguiente:

      projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
      
    5. Una clave contiene cero o más versiones de la clave. El ID de recurso de una versión de clave es el ID de la clave, una barra (/) y el ID de la versión. Para enumerar todas las versiones de una clave, sigue estos pasos:

      1. Haz clic en el nombre de la clave.
      2. En una versión concreta, haz clic en Más.
      3. Haga clic en Copiar nombre de recurso.

    gcloud

    1. Para mostrar todas las claves de un conjunto de claves determinado, haz lo siguiente:

      gcloud kms keys list --keyring RING_NAME --location LOCATION
      

      Haz los cambios siguientes:

      • RING_NAME: el nombre del conjunto de claves
      • LOCATION: la región del conjunto 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
      
    2. Una clave tiene cero o más versiones. El ID de recurso de una versión de clave es el ID de la clave, una barra (/) y el ID de la versión. Mostrar 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 la clave. Por ejemplo:

      NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
      

    Concede acceso a la clave al agente de servicio de Workflows

    Debes conceder al agente de servicio de Workflows el rol de gestión de identidades y accesos (IAM) Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS para que pueda acceder a la clave de Cloud KMS:

    Consola

    Cuando habilitas las CMEK en un flujo de trabajo a través de la consola, se te pide que concedas el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS a la cuenta de servicio. Para obtener más información, consulta la sección Habilitar CMEK en un flujo de trabajo de este documento.

    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

    Haz los cambios siguientes:

    • KEY_NAME: el nombre de la clave. Por ejemplo, my-key.
    • RING_NAME: el nombre del conjunto de claves. Por ejemplo, my-keyring.
    • LOCATION: la ubicación de la clave. Por ejemplo, us-central1.
    • PROJECT_NUMBER: el número de tu proyecto Google Cloud . Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola Google Cloud o ejecutando 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 el rol roles/cloudkms.cryptoKeyEncrypterDecrypter, un flujo de trabajo de tu proyecto podrá cifrar y descifrar sus datos con la clave CMEK. Si revocas este rol o inhabilitas o destruyes la clave CMEK, no se podrá acceder a esos datos. En este documento, consulta la sección Inhabilitar Cloud KMS.

    Habilitar CMEK en un flujo de trabajo

    Cuando crees un flujo de trabajo o lo actualices posteriormente, puedes especificar la clave de Cloud KMS que debe usar el flujo de trabajo para el cifrado de datos.

    Consola

    1. En la Google Cloud consola, ve a la página Flujos de trabajo.

      Ir a Workflows

    2. Haz clic en el nombre del flujo de trabajo que quieras actualizar.

      Se abrirá la página Detalles de Workflows.

    3. Haz clic en Editar.

    4. Selecciona Clave de Cloud KMS.

    5. Seleccione un Tipo de clave.

      Puedes gestionar tus claves manualmente o usar Autokey, que te permite generar conjuntos de claves y claves bajo demanda. Si la opción Autoclave está inhabilitada, significa que aún no se ha integrado con el tipo de recurso actual.

    6. En la lista Seleccionar una clave de Cloud KMS, selecciona o filtra una clave de Cloud KMS.

    7. Opcional: Para introducir manualmente el nombre del recurso de la clave, en la lista Seleccionar una clave gestionada por el cliente, haz clic en Introducir clave manualmente e introduce el nombre del recurso de la clave en el formato especificado.

    8. Si se te pide, asigna el rol cloudkms.cyptoKeyEncrypterDecrypter a la cuenta de servicio de Workflows con el rol workflows.serviceAgent.

    9. Haz clic en Siguiente.

    10. Para guardar los cambios e 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

    Haz los cambios siguientes:

    • WORKFLOW_NAME: el nombre del flujo de trabajo
    • SOURCE_FILE: el archivo de origen del flujo de trabajo con la extensión yaml si se trata de un archivo YAML o con la extensión json si se trata de un archivo JSON. Por ejemplo, myWorkflow.yaml.
    • KEY: el ID de recurso de la clave con el formato projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. Puedes recuperar el ID de la clave.

    • LOCATION: la ubicación del flujo de trabajo

    • SERVICE_ACCOUNT: la cuenta de servicio que usará tu flujo de trabajo para acceder a otros servicios de Google Cloud , como SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com. Te recomendamos que uses una cuenta de servicio con los privilegios mínimos necesarios para acceder a los recursos obligatorios. Si se deja en blanco, se usa la cuenta de servicio predeterminada. Para obtener más información, consulta Conceder permiso a un flujo de trabajo para acceder a recursos Google Cloud .

    Ten en cuenta lo siguiente:

    • Las revisiones y las ejecuciones de los flujos de trabajo se cifran con la clave especificada en el momento de la implementación. Los recursos cifrados anteriormente con una clave anterior siguen cifrados con esa clave. Si se edita un flujo de trabajo y se especifica una nueva clave, esa revisión del flujo de trabajo se cifrará con la nueva clave y las ejecuciones posteriores usarán la nueva clave.
    • Las revisiones y ejecuciones de flujos de trabajo que no estaban cifradas con CMEK anteriormente seguirán sin cifrar.
    • Si inhabilitas CMEK en una revisión de un flujo de trabajo, las ejecuciones posteriores se crearán sin cifrado CMEK. En este documento, consulta la sección Inhabilitar CMEK en un flujo de trabajo. Las revisiones y las ejecuciones de flujos de trabajo que ya existían seguirán cifradas con las claves con las que se cifraron anteriormente.

    Verificar la integración de Cloud KMS

    Para verificar la integración de CMEK, muestra los metadatos de un flujo de trabajo.

    Consola

    1. En la Google Cloud consola, ve a la página Flujos de trabajo.

      Ir a Workflows

    2. Haz clic en el nombre del flujo de trabajo que quieras verificar.

      Se abrirá la página Detalles de Workflows.

    3. Haga clic en la pestaña Detalles.

      El valor Encryption (Cifrado) muestra el ID de recurso de la clave de Cloud KMS que se usa para proteger el flujo de trabajo y su ejecución.

    gcloud

    gcloud workflows describe WORKFLOW_NAME \
        --location=LOCATION

    La salida debería ser similar a la siguiente:

    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 de 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.

    Inhabilitar las claves de cifrado gestionadas por el cliente en un flujo de trabajo

    Puedes inhabilitar las CMEK de un flujo de trabajo para que deje de usar la clave de Cloud KMS asociada.

    Consola

    1. En la Google Cloud consola, ve a la página Flujos de trabajo.

      Ir a Workflows

    2. Haz clic en el nombre del flujo de trabajo que quieras actualizar.

      Se abrirá la página Detalles de Workflows.

    3. Haz clic en Editar.

    4. Para desactivar el botón de radio Clave de Cloud KMS, selecciona Google-managed encryption key.

    5. Haz clic en Siguiente.

    6. Para guardar los cambios e 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

    De esta forma, se inhabilita CMEK en la revisión del flujo de trabajo actual y las ejecuciones posteriores se crean sin el cifrado CMEK. Las revisiones y ejecuciones de flujos de trabajo que ya existan seguirán encriptadas con las claves con las que se encriptaron anteriormente.

    Inhabilitar Cloud KMS

    Si quieres revocar el acceso a los datos de tu flujo de trabajo o de sus ejecuciones, puedes hacer lo siguiente para inhabilitar Cloud KMS:

    • Inhabilita o destruye la versión principal de la clave de cifrado gestionada por el cliente. Si inhabilitas una versión de una clave CMEK, se suspenderá el acceso a todos los datos protegidos por esa versión de la clave. Destruir una versión de clave es la contrapartida permanente de esta acción. Ambos afectan únicamente a los flujos de trabajo y a las ejecuciones de flujos de trabajo asociados a la clave específica. No puedes crear ejecuciones ni ver los recursos asociados a la clave inhabilitada o destruida. Las ejecuciones activas fallarán y se mostrará un mensaje de error correspondiente.

    • Revoca el rol de gestión de identidades y accesos cloudkms.cryptoKeyEncrypterDecrypteral agente de servicio de Workflows. Esto afecta a todos los flujos de trabajo del proyectoGoogle Cloud que admitan el cifrado con CMEK. No puedes crear nuevos flujos de trabajo ni ejecuciones integrados con CMEK, ni ver ningún recurso cifrado con CMEK. Las ejecuciones activas fallarán y se mostrará un mensaje de error correspondiente.

    Aunque ninguna de las dos operaciones garantiza la revocación instantánea del acceso, los cambios de IAM suelen propagarse más rápido. Para obtener más información, consulta Consistencia de recursos de Cloud KMS y Propagación de cambios de acceso.

    Solución de problemas

    Es posible que se produzcan errores al usar Cloud KMS con Workflows. En la siguiente tabla se describen diferentes problemas y cómo solucionarlos.

    Problema Descripción
    El permiso cloudkms.cryptoKeyVersions.useToEncrypt está denegado La clave de Cloud KMS proporcionada no existe o el permiso no está configurado correctamente.

    Solución:

    La versión de clave no está habilitada La versión de la clave de Cloud KMS proporcionada se ha inhabilitado.

    Solución: vuelve a habilitar la versión de la clave de Cloud KMS.

    La región del conjunto de claves no coincide con el recurso que se va a proteger La región del conjunto de claves de KMS proporcionada es diferente de la región del flujo de trabajo.

    Solución: Usa un conjunto de claves de Cloud KMS y un flujo de trabajo protegido de la misma región. Ten en cuenta que pueden estar en proyectos diferentes. Para obtener más información, consulta las ubicaciones de Cloud KMS y las ubicaciones de Workflows.

    Se ha superado el límite de cuota de Cloud KMS Se ha alcanzado el límite de cuota de solicitudes de Cloud KMS.

    Solución: limita el número de llamadas a Cloud KMS o aumenta el límite de cuota. Para obtener más información, consulta las cuotas de Cloud KMS.

    Cómo se gestiona un estado de clave no disponible

    Si, por algún motivo, Cloud KMS no está disponible, es posible que Workflows no pueda obtener el estado de tu clave de Cloud KMS.

    Si el estado de la clave no está disponible, el flujo de trabajo o su ejecución devolverá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, si se revoca un permiso durante una retrollamada), se produce un error de tiempo de ejecución, se devuelve un valor state: FAILED y se muestran los detalles relacionados en el campo error.

    Precios

    Esta integración no conlleva costes adicionales más allá de las operaciones clave, que se facturan a tu proyecto de Google Cloud . Para obtener información sobre los precios actuales, consulta la página Precios de Cloud KMS.