Usar claves de encriptación administradas por el cliente

Según la configuración predeterminada, Cloud Tasks encripta tus datos almacenados en reposo. Google Cloud administra esta encriptación predeterminada sin que debas realizar ninguna acción adicional.

Si tienes 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) para Cloud Tasks. Tu tarea y los datos asociados (cuerpo y encabezado) en reposo están protegidos mediante 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 habilitas CMEK en Cloud Tasks, debes habilitarlas para una región. Cuando se habilita, el cuerpo y el encabezado de las tareas creadas en esa región se protegen con tu clave cuando están en reposo. Si se creó una tarea mientras se habilitaban las CMEK y, luego, la clave se vuelve inactiva (cuando se inhabilita o borra la clave, o se inhabilitan las CMEK), la tarea se encripta con tu clave, pero no se puede ejecutar.

Las tareas no están protegidas con CMEK en los siguientes casos:

  • Se creó la tarea antes de habilitar CMEK
  • La tarea no está en la región para la que se habilitaron las CMEK
  • La tarea se ve afectada por una limitación de compatibilidad

Limitaciones de compatibilidad

La integración de Cloud Tasks con CMEK no admite lo siguiente:

  • Versiones de google-gax anteriores 4.0.0: El paquete de NPM google-gax para Node.js tiene compatibilidad limitada en versiones inferiores a 4.0.0. Para estas versiones, las CMEK solo se admiten en la región us-central1. Incluso si solo tienes tareas en esa región, se recomienda que actualices a la versión 4.0.0 o superior.

  • Servicio de lista de tareas en cola integrado de App Engine: Las tareas creadas con este servicio no están protegidas por CMEK, incluso si se encuentran en una región para la que está habilitada. La habilitación de CMEK no impide la creación o la operación (por ejemplo, la ejecución o eliminación) de estas tareas.

  • Listas de extracción: Si habilitas las CMEK, puedes crear y ejecutar tareas en las listas de extracción, pero estas no están protegidas por CMEK. Las listas de extracción no son comunes. Para verificar si tu cola es una lista de extracción, ejecuta el siguiente comando de gcloud CLI en la terminal:

    gcloud beta tasks queues describe QUEUE_NAME
    

    Reemplaza QUEUE_NAME por el nombre de tu cola.

    Si el type que se muestra es pull, tu cola es una lista de extracción. Si el type que se muestra es push, esta limitación no afecta las tareas de tu cola.

  • Enrutamiento a nivel de cola: Cuando las CMEK están habilitadas, no puedes aplicar el enrutamiento a nivel de la cola. Y si el enrutamiento a nivel de cola está habilitado, no puedes habilitar las CMEK. Para verificar si tienes habilitado el enrutamiento a nivel de cola, haz lo siguiente:

    1. Ejecuta el siguiente comando de gcloud CLI en la terminal:

      gcloud beta tasks queues describe QUEUE_NAME
      Reemplaza QUEUE_NAME por el nombre de tu cola.

    2. En el resultado, busca el campo httpTarget y verifica si se configuró uriOverride. Si se especifica un host, la cola tiene habilitado el enrutamiento a nivel de cola y no es compatible con CMEK. Para quitar el enrutamiento a nivel de cola, consulta Actualiza o quita el enrutamiento a nivel de cola. Si en el resultado no se muestra uriOverride con un host especificado, la cola no usará el enrutamiento a nivel de cola.

  • TTL de la tarea: Cuando se habilitan las CMEK, no puedes configurar task_ttl en más de 60 días. Y si tienes un task_ttl establecido en más de 60 días, no puedes habilitar CMEK.

Antes de comenzar

Antes de usar CMEK en Cloud Tasks, completa los siguientes pasos:

  1. Habilita las APIs.

    Consola

    1. Habilita las API de Cloud KMS and Cloud Tasks.

      Habilita las API

    gcloud

    1. En la consola de Google Cloud, activa Cloud Shell.

      Activar Cloud Shell

      En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

    2. Configura tu proyecto predeterminado. Este debería ser el proyecto que contiene los recursos de Cloud Tasks que deseas proteger con CMEK. Si necesitas ejecutar un comando en un proyecto diferente, como el proyecto que contiene tus recursos de Cloud KMS, esta página incluirá la marca --project en el comando de gcloud CLI y te indicará qué proyecto debes especificar.

      gcloud config set project PROJECT_ID
      

      Reemplaza PROJECT_ID por el ID del proyecto que contiene tus recursos de Cloud Tasks.

    3. Actualiza los componentes de gcloud.

      gcloud components update
      

    4. Habilita las API de Cloud KMS y Cloud Tasks para el proyecto en el que se almacenarán tus claves de encriptación.

      gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com 
      --project=PROJECT_ID

      Reemplaza PROJECT_ID por el ID del proyecto que almacenará tus claves de encriptación. Este podría ser el mismo proyecto que tus recursos de Cloud Tasks, pero para limitar el acceso a tus claves de Cloud KMS, considera configurar Cloud KMS en un proyecto separado.

  2. Cloud KMS produce Registros de auditoría de Cloud cuando las claves están habilitadas, inhabilitadas o utilizadas por los recursos de Cloud Tasks 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 decidiste qué permisos y funciones específicos de registro se aplican a tu caso de uso. Para obtener más detalles, consulta la información del registro de auditoría de Cloud KMS.

  3. Obtener roles de Identity and Access Management

    A fin de obtener los permisos que necesitas para usar CMEK con Cloud Tasks, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

    • Habilita o inhabilita CMEK: roles/cloudtasks.admin
    • Observa la clave en uso: roles/cloudtasks.viewer

    Si quieres obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

    Es posible que también puedas obtener los permisos necesarios mediante funciones personalizadas, o bien otras funciones predefinidas.

Crea un llavero de claves y una clave de Cloud KMS globales

Si ya tienes un llavero de claves en la misma región que tus recursos de Cloud Tasks y deseas usar esa clave y ese llavero, omite esta sección. De lo contrario, usa estas instrucciones para crear tu clave y llavero de claves de Cloud KMS.

  1. Crea un llavero de claves.

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

Recupera el ID de una clave de Cloud KMS

El ID de recurso de una clave de Cloud KMS es obligatorio cuando habilitas CMEK para Cloud Tasks.

Consola

  1. En la consola de Google Cloud, ve a la página Administración de claves y selecciona la pestaña Inventario de claves.

    Ir a Inventario de claves

  2. Busca la clave con el ID de recurso que quieres recuperar y haz clic en Acciones.

  3. Haz clic en Copiar nombre del recurso.

    El ID de 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
    

gcloud

  1. Enumera todas las claves de un llavero de claves determinado:

    gcloud kms keys list --keyring=KEY_RING --location=LOCATION --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • KEY_RING: es el nombre del llavero de claves.
    • LOCATION: Es la región del llavero de claves.
    • PROJECT_ID: El ID del proyecto que contiene el llavero de claves

    El resultado incluye el ID de cada clave. Por ejemplo:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    

Otorga al agente de servicio de Cloud Tasks acceso a la clave

Debes otorgar al agente de servicio de Cloud Tasks la función de encriptador y desencriptador de CryptoKey de Cloud KMS para que pueda acceder a la clave de Cloud KMS:

Consola

  1. En la consola de Google Cloud, ve a la página Identity and Access Management.

    Ir a IAM

  2. Selecciona la casilla de verificación Incluir asignaciones de roles proporcionadas por Google.

  3. Escribe cloudtasks.iam.gserviceaccount.com en el filtro para buscar la cuenta de servicio de Cloud Tasks.

    La cuenta de servicio de Cloud Tasks tiene el formato service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com.

  4. Haz clic en el ícono de lápiz de Editar principal.

  5. En el panel que se abre, haz clic en Agregar otro rol.

  6. Busca y selecciona la función Encriptador/Desencriptador de CryptoKey de Cloud KMS.

  7. Haz clic en Guardar.

gcloud

gcloud kms keys add-iam-policy-binding KEY_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Reemplaza lo siguiente:

  • KEY_ID: Es el ID de recurso completamente calificado para tu clave. Para obtener instrucciones sobre cómo encontrar esto, consulta Recupera el ID de una clave de Cloud KMS. No incluyas un número de versión de clave. Si incluyes un número de versión de clave, es posible que este comando falle.
  • PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud. Para encontrar el número del proyecto, ve a la página Panel de la consola de Google Cloud o ejecuta el siguiente comando:

    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, una tarea en la región habilitada para CMEK 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 Inhabilita Cloud KMS.

Habilita CMEK para Cloud Tasks

Puedes habilitar CMEK con la API o gcloud CLI. Para Cloud Tasks, las CMEK están habilitadas por región. No están habilitados para tareas individuales. Cuando las CMEK están habilitadas para una región determinada en Cloud Tasks, todas las tareas en esa región están protegidas por CMEK.

API

Para habilitar CMEK, llama al método Update CMEK config. La API de Cloud Tasks proporciona el método Update CMEK config en las API de REST y de RPC:

gcloud

Para habilitar CMEK con Google Cloud CLI, usa el siguiente comando:

gcloud tasks cmek-config update --location=LOCATION --kms-key-name=KEY_ID

Reemplaza lo siguiente:

  • LOCATION: Es la región del recurso de Cloud Tasks.
  • KEY_ID: Es el ID de recurso completamente calificado para tu clave. Para obtener instrucciones sobre cómo encontrar esto, consulta Recupera el ID de una clave de Cloud KMS. No incluyas un número de versión de clave. Si incluyes un número de versión de clave, es posible que este comando falle.

Para verificar que la clave se habilitó de forma correcta, sigue las instrucciones en la sección Cómo identificar la clave en uso.

Habilitar para tareas preexistentes

Las CMEK no protegen las tareas que se crearon antes de habilitar las CMEK para Cloud Tasks. Para proteger tareas preexistentes con CMEK, sigue estos pasos:

  1. Habilita CMEK (consulta la sección sobre cómo habilitar CMEK).
  2. Reemplaza las tareas preexistentes. Existen dos formas principales de hacerlo. La mejor manera de hacerlo depende de lo que consideres importante:

    • Ejecución continua: Para garantizar la entrega continua ("al menos una vez"), primero puedes volver a crear la tarea y, luego, borrar la tarea preexistente después de verificar que la tarea nueva funciona como se espera. Esto puede generar ejecuciones duplicadas, ya que la tarea antigua y la nueva pueden ejecutarse antes de que borres la antigua.

    • Prevención de duplicaciones: Para evitar ejecuciones duplicadas ("entrega como máximo una vez"), primero puedes borrar la tarea anterior y, luego, volver a crearla. Esto puede provocar la pérdida de ejecuciones debido al tiempo transcurrido entre la eliminación de la tarea anterior y la creación de la nueva.

Identificar la clave en uso

A fin de identificar la clave CMEK en uso para tus recursos de Cloud Tasks, ejecuta el siguiente comando de gcloud CLI en la terminal:

gcloud tasks cmek-config describe --location=LOCATION

Reemplaza LOCATION por la región de tus recursos de Cloud Tasks.

Si no hay resultado, las CMEK no están configuradas para la ubicación especificada.

Inhabilita CMEK para Cloud Tasks

Puedes inhabilitar CMEK con la API o gcloud CLI. Para Cloud Tasks, las CMEK están inhabilitadas por región. No se inhabilita mediante tareas individuales. Cuando las CMEK están inhabilitadas para una región determinada en Cloud Tasks, las tareas en esa región no están protegidas por CMEK.

La inhabilitación de CMEK afecta las tareas creadas en el futuro, no las que se crearon antes:

  • Tareas nuevas: no están protegidas por CMEK.
  • Tareas preexistentes: Las tareas que se crearon mientras las CMEK estaban habilitadas permanecen encriptadas y continúan ejecutándose mientras la clave de Cloud KMS permanezca activa.

API

Para inhabilitar las CMEK, puedes llamar al método Update CMEK config y borrar la clave de Cloud KMS si la reemplazas por una string vacía. La API de Cloud Tasks proporciona el método Update CMEK config en las API de REST y de RPC:

gcloud

Para inhabilitar CMEK con Google Cloud CLI, usa el siguiente comando:

gcloud tasks cmek-config update --location=LOCATION --clear-kms-key

Reemplaza lo siguiente:

  • LOCATION: Es la región del recurso de Cloud Tasks.

Quitar Cloud KMS

Si deseas revocar el acceso a los datos de tus tareas, puedes quitar Cloud KMS. Existen tres maneras de hacerlo:

  • Inhabilita la clave de encriptación administrada por el cliente. Cuando se inhabilita una clave CMEK, se suspende el acceso a todos los datos protegidos por esa versión mientras la clave está inhabilitada. No puedes acceder a tareas ni crearlas con una clave inhabilitada. Si intentas ejecutar una tarea protegida por CMEK mientras la clave está inhabilitada, se mostrará un error UNKNOWN en Cloud Logging. Puedes volver a habilitar la clave más adelante si lo deseas. Cuando inhabilitas una clave de encriptación administrada por el cliente, el cambio puede tardar hasta 5 minutos en aplicarse.

  • Destruye la clave de encriptación administrada por el cliente. Cuando se destruye una clave CMEK, se suspende el acceso a todos los datos protegidos por esa versión de clave de forma permanente. No puedes crear tareas con una clave destruida ni acceder a ella. Si se creó una tarea mientras se habilitaban las CMEK y, luego, se destruye la clave, la tarea se encripta con tu clave, pero no se puede ejecutar. Si la tarea intenta ejecutarse, Cloud Logging registra un error UNKNOWN. Cuando destruyes una clave de encriptación administrada por el cliente, el cambio puede tardar hasta 5 minutos en aplicarse.

  • Revoca la función cloudkms.cryptoKeyEncrypterDecrypter de IAM del agente de servicio de Cloud Tasks. Esto afecta a todas las tareas del proyecto de Google Cloud que admiten la encriptación mediante CMEK. No puedes crear tareas nuevas integradas con CMEK ni ver ningún recurso encriptado con CMEK.

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

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.