Usar claves de encriptación administradas por el cliente

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 tiene requisitos normativos o de cumplimiento específicos relacionados con las claves que protegen tus datos, puedes usar claves de encriptación administradas por el cliente (CMEK) Workflows Tu flujo de trabajo y los datos en reposo asociados se protegida con una clave de encriptación a la que solo tú puedas acceder 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 llave se usa para encriptar el flujo de trabajo y sus ejecuciones:

  • Un flujo de trabajo requiere un archivo fuente que contenga un flujo de trabajo válido. definición. Este archivo fuente está encriptado con la clave.

  • La ejecución del flujo de trabajo ejecuta la definición del flujo de trabajo actual (una revisión del flujo de trabajo). Usar la clave asociada con la revisión del flujo de trabajo en el la hora de su implementación, el flujo de trabajo compilado y cualquier ejecución almacenada se encriptan los datos de entrada, salida y entorno de ejecución. Esto incluye argumentos de ejecución, resultados, errores y excepciones; publicado Eventos de Eventarc y las solicitudes y respuestas HTTP y de devolución de llamada.

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 para 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 las claves están habilitadas. inhabilitados o que los recursos de Workflows usen para encriptar y desencriptar de datos no estructurados. Asegúrate de que el registro está habilitado para la API de Cloud KMS en tu proyecto y que decidiste Qué permisos y roles específicos de registro se aplican a tu caso de uso. Para ver 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.

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

  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 del recurso que quieres recuperar, haz clic en Más.

  4. Haz clic en Copiar nombre del recurso.

    El ID de recurso de la clave se copió 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 clave version es el ID de la clave, más una barra (/) más el ID de la versión. Para enumerar todas las versiones de una clave:

    1. Haz clic en el nombre de la clave.
    2. Para ver 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 para una versión de clave es el ID de clave, más una barra (/) y el ID de la versión. Enumerar todas las versiones para 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 el agente de servicio de Workflows el Encriptador y desencriptador de CryptoKey de Cloud KMS Roles de Identity and Access Management (IAM), para que pueda acceder a Cloud KMS clave:

Console

Cuando habilitas CMEK para un flujo de trabajo a través de la consola, se te solicita que otorgar la función de Encriptador/Desencriptador de CryptoKey de Cloud KMS al servicio de servicio predeterminada. 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 roles/cloudkms.cryptoKeyEncrypterDecrypter un flujo de trabajo en tu proyecto puede encriptar y desencriptar sus datos con la CMEK . Si revocas este rol o si inhabilitas o destruyes la clave CMEK, de modo que no se puede acceder a los datos. En este documento, consulta Inhabilita Cloud KMS.

Habilita CMEK para un flujo de trabajo

Cuando creas un flujo de trabajo o actualízala después, puedes especificar la clave de Cloud KMS que 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 flujos de trabajo.

  3. Haz clic en Editar.

  4. Selecciona Clave de encriptación administrada por el cliente (CMEK).

  5. En la lista Selecciona una clave administrada por el cliente, selecciona o filtra según un clave de Cloud KMS.

  6. Opcional: Para ingresar manualmente el nombre del recurso de la clave, en la lista Selecciona una clave administrada por el cliente, haz clic en Ingresar clave manualmente y, luego, ingresa el nombre del recurso de la clave en la formato especificado.

  7. Si se te solicita, otorga el rol cloudkms.cyptoKeyEncrypterDecrypter a la Cuenta de servicio de Workflows con workflows.serviceAgent en el área de la seguridad en la nube.

  8. Haz clic en Siguiente.

  9. 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 un yaml. una extensión de archivo para un archivo YAML, o con una extensión de archivo json para un archivo JSON. por ejemplo, myWorkflow.yaml.
  • KEY: Es 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 la clave

  • LOCATION: Es la ubicación del flujo de trabajo.

  • SERVICE_ACCOUNT: Es la cuenta de servicio de tu flujo de trabajo. usará 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, la cuenta de servicio predeterminada es que se usan. Para 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 de flujo de trabajo se encriptan con la clave especificada en el el tiempo de implementación; recursos encriptados previamente con una clave anterior permanecen encriptado con esa clave anterior. Si un flujo de trabajo se edita posteriormente y una nueva específica, esa revisión del flujo de trabajo se encripta con la clave nueva, y cualquier ejecución posterior usará la clave nueva.
  • Las revisiones y ejecuciones de flujos de trabajo que antes no se encriptaron con CMEK permanecen sin están encriptados.
  • Si inhabilitas CMEK para una revisión de flujo de trabajo, se aplicarán a las ejecuciones posteriores sin encriptación con CMEK. En este documento, consulta Inhabilita CMEK para un flujo de trabajo. Las revisiones existentes del flujo de trabajo y de las ejecuciones permanecen encriptadas con las claves con las que están encriptados.

Verifica la integración de Cloud KMS

Puedes verificar la integración de CMEK mostrando 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 flujos de trabajo.

  3. Haz clic en la pestaña Detalles.

    El valor de Encriptación muestra el ID de recurso 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 cryptokeyName es el ID de recurso 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 en un flujo de trabajo para que ya no use el servicio clave de Cloud KMS.

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

  3. Haz clic en Editar.

  4. Para borrar el botón de selección Clave de encriptación administrada por el cliente (CMEK), haz lo siguiente: 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

Esta acción inhabilita las CMEK en la revisión del flujo de trabajo actual y en las subsiguientes ejecuciones se crean sin encriptación con CMEK. Flujo de trabajo existente revisiones y ejecuciones permanecen encriptadas con las claves con las que se encriptados previamente.

Inhabilita Cloud KMS

Si quieres revocar el acceso a los datos a tu flujo de trabajo o ejecuciones de flujo de trabajo, puedes puedes hacer cualquiera de las siguientes acciones para inhabilitar Cloud KMS:

  • Inhabilitar o destruye la versión de clave primaria de tu clave de encriptación administrada por el cliente. La inhabilitación de una versión de clave CMEK se suspende acceso a todos los datos protegidos por esa versión de clave. La destrucción de una versión de clave es el equivalente permanente de esta acción. Ambos afectan solo a los flujos de trabajo y ejecuciones del flujo de trabajo asociadas a una clave específica. No puedes crear nuevas ejecuciones o visualizar los recursos asociados a la instancia ni una clave destruida. Cualquier ejecución activa fallará y mostrará el error correspondiente mensaje.

  • Revocar el cloudkms.cryptoKeyEncrypterDecrypterde IAM desde Agente de servicio de Workflows. Esto afecta a todos los flujos de trabajo Proyecto de Google Cloud que admite la encriptación con CMEK. No puedes crear nuevos flujos de trabajo y ejecuciones integrados con CMEK o ver recursos encriptados con CMEK. Las ejecuciones activas fallarán con un error mensaje de error.

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 Propagación de cambios de acceso.

Soluciona problemas

Puedes encontrar errores cuando uses Cloud KMS con Workflows En la siguiente tabla, se describen diferentes problemas y cómo resolverlos.

Problema Descripción
El permiso cloudkms.cryptoKeyVersions.useToEncrypt es rechazadas 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 en el flujo de trabajo.

Solución: Usa un llavero de claves de Cloud KMS y está protegido flujo de trabajo desde la misma región. (Ten en cuenta que pueden estar en diferentes projects.) Para obtener más información, consulta las ubicaciones de Cloud KMS Ubicaciones de los 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 aumentar 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, Workflows no pueda recuperar el estado de tu clave desde Cloud KMS.

Si el estado de la clave no está disponible, se devolverá el flujo de trabajo o su ejecución Un valor state: UNAVAILABLE y 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 Se muestra un valor 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 a tu proyecto de Google Cloud. Para ver los precios actuales consulta los precios de Cloud KMS.