Usar claves de encriptación administradas por el cliente

De forma predeterminada, Workflows encripta el contenido del cliente almacenado en reposo. Workflows controlan 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, incluidos Workflows. 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 Workflows 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).

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

Qué se protege con CMEK

Cuando implementes 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 se encripta con la clave.

  • Una ejecución de flujo de trabajo ejecuta la definición actual del flujo de trabajo (una revisión de flujo de trabajo específica). Con la clave asociada con la revisión del flujo de trabajo en el momento de su implementación, se encripta el flujo de trabajo compilado, así como cualquier entrada, salida y datos de tiempo de ejecución de ejecución almacenados. 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:

  1. Habilita las APIs.

    Console

    1. Enable the Cloud KMS and Workflows APIs.

      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 los componentes de gcloud:
      gcloud components update
    3. Habilita las APIs de Cloud KMS y Workflows del proyecto que almacenará tus claves de encriptación.
      gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
  2. Cloud KMS produce registros de auditoría de Cloud cuando los recursos de Workflows habilitan, inhabilitan o usan las claves 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 roles específicos de registro se aplican a tu caso de uso. Para obtener más información, consulta 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.

  1. Crea un llavero de claves.

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

Cómo recuperar 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

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

    Ir a Administración de claves

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

  3. Para la clave con el ID de recurso que quieres recuperar, haz clic en Más.

  4. Haz clic en Copiar nombre del recurso.

    Se copiará el ID de recurso de la clave 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 clave. El ID de recurso de una versión de clave es el ID de clave, más una barra (/) y el ID de versión. Para enumerar todas las versiones de una clave, haz lo siguiente:

    1. Haz clic en el nombre de la clave.
    2. Para una versión específica, haz clic en Más.
    3. Haz clic en Copiar nombre del recurso.

gcloud

  1. 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
    
  2. 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 (/) y el ID de versión. Enumera 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 Workflows el rol de Identity and Access Management (IAM) de encriptador/desencriptador de CryptoKey de Cloud KMS 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 el rol de 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 el rol roles/cloudkms.cryptoKeyEncrypterDecrypter, un flujo de trabajo en tu proyecto puede encriptar y desencriptar sus datos con la clave de CMEK. Si revocas este rol, o si inhabilitas o destruyes la clave CMEK, no se podrá acceder a los 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 más adelante, puedes especificar la clave de Cloud KMS que el flujo de trabajo debe usar para la encriptación de datos.

Console

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

    Ir a Workflows

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

    Aparecerá la página Detalles de los flujos de trabajo.

  3. Haz clic en Editar.

  4. Selecciona Clave de Cloud KMS.

  5. Selecciona un Tipo de clave.

    Puedes administrar tus claves de forma manual o usar Autokey, que te permite generar llaveros y claves a pedido. Si la opción Autokey está inhabilitada, aún no está integrada en 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 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 clave de forma manual y, luego, escribe el nombre del recurso de la clave en el formato especificado.

  8. Si se te solicita, otorga 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 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 del flujo de trabajo con una extensión de archivo yaml para un archivo YAML o con una extensión de archivo json para un archivo JSON, por ejemplo, myWorkflow.yaml.
  • KEY: El ID de recurso de la clave en el formato projects/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á tu 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. Para obtener más información, consulta Cómo otorgar permiso a un flujo de trabajo para acceder a 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 que se encriptaron con una clave anterior permanecen encriptados con esa clave anterior. Si se edita un flujo de trabajo posteriormente y se especifica una clave nueva, esa revisión del flujo de trabajo se encripta con la clave nueva, y todas las ejecuciones posteriores usarán la clave nueva.
  • Las revisiones y ejecuciones de flujos de trabajo que no estaban encriptados con CMEK no se encriptan.
  • Si inhabilitas las CMEK para una revisión de flujo de trabajo, las ejecuciones posteriores se crearán sin encriptación de CMEK. En este documento, consulta Cómo inhabilitar CMEK para un flujo de trabajo. Las revisiones y ejecuciones de flujos 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, muestra los metadatos de un flujo de trabajo.

Console

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

    Ir a Workflows

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

    Aparecerá la página Detalles de los flujos de trabajo.

  3. Haz clic en la pestaña Detalles.

    El valor Encryption 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

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

Inhabilita CMEK para un flujo de trabajo

Puedes inhabilitar CMEK para un flujo de trabajo para que ya no use la clave de Cloud KMS asociada.

Console

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

    Ir a Workflows

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

    Aparecerá la página Detalles de los flujos de trabajo.

  3. Haz clic en Editar.

  4. Para borrar el botón de selección Clave de Cloud KMS, selecciona Clave de encriptación administrada por Google.

  5. Haz clic en Siguiente.

  6. 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 CMEK para la revisión actual del flujo de trabajo, y las ejecuciones posteriores se crean sin encriptación de CMEK. Las revisiones y ejecuciones de flujos de trabajo existentes permanecen encriptadas con las claves con las que se encriptaron antes.

Inhabilita Cloud KMS

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

  • Inhabilita o destruye la versión de clave primaria de tu clave de encriptación administrada por el cliente. Inhabilitar una versión de clave CMEK suspende el acceso a todos los datos protegidos por esa versión de clave. Destruir 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. Todas las ejecuciones activas fallarán con un mensaje de error correspondiente.

  • Revoca el rol de IAM cloudkms.cryptoKeyEncrypterDecrypter del agente de servicio de Workflows. Esto afecta a todos los flujos de trabajo del proyecto de Google Cloud que admiten la encriptación con CMEK. No puedes crear ejecuciones ni flujos de trabajo nuevos integrados en CMEK, ni ver ningún recurso encriptado con CMEK. Todas las ejecuciones activas fallarán con un 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 del cambio de acceso.

Soluciona problemas

Es posible que encuentres errores cuando uses Cloud KMS con Workflows. En la siguiente tabla, se describen los diferentes problemas y cómo resolverlos.

Problema Descripción
Se deniega 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: Vuelve a habilitar la versión de la 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 proyectos diferentes). 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 de solicitudes de Cloud KMS.

Solución: Limita la cantidad de llamadas a Cloud KMS o aumenta el límite de 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 de Cloud KMS.

Si el estado de la clave no está disponible, el flujo de trabajo o su ejecución mostrará 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, que muestra un valor state: FAILED y 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 de precios actual, consulta Precios de Cloud KMS.