Usar claves de encriptado gestionadas por el cliente

De forma predeterminada, Cloud Tasks encripta el contenido de los clientes en reposo. Cloud Tasks 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 Cloud Tasks. 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. Además, Cloud KMS te permite ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y gestione 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 acceder a tus recursos de Cloud Tasks 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).

Qué se protege con CMEK

Cuando habilitas la CMEK en Cloud Tasks, lo haces en una región. Cuando está habilitada, 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 crea una tarea mientras CMEK está habilitado y, más adelante, la clave se inactiva (porque se inhabilita o se elimina, o porque se inhabilita CMEK), la tarea se cifra con tu clave, pero no se puede ejecutar.

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

  • La tarea se creó antes de habilitar CMEK
  • La tarea no está en la región en la que está habilitada la 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 inferiores a 4.0.0: el paquete NPM google-gax para Node.js tiene una compatibilidad limitada con las versiones anteriores a 4.0.0. En estas versiones, la CMEK solo se admite en la región us-central1. Aunque solo tengas tareas en esa región, te recomendamos que actualices a la versión 4.0.0 o a una posterior.

  • Servicio de colas de tareas integrado de App Engine: las tareas creadas con el servicio de colas de tareas integrado de App Engine no están protegidas por CMEK, aunque se encuentren en una región en la que esté habilitada. Habilitar las claves de cifrado gestionadas por el cliente no impide que se creen o se realicen operaciones (por ejemplo, ejecutar o eliminar) en estas tareas.

  • Colas de extracción: si habilitas CMEK, puedes crear y ejecutar tareas en colas de extracción, pero estas tareas no están protegidas con CMEK. Las colas de extracción no son habituales. Para comprobar si tu cola es de extracción, ejecuta el siguiente comando de la CLI de gcloud en tu terminal:

    gcloud tasks queues describe QUEUE_NAME

    Sustituye QUEUE_NAME por el nombre de tu cola.

    Si el valor de type es pull, tu cola es una cola de extracción. Si el valor de type listed es push, esta limitación no afecta a las tareas de tu cola.

  • Rutas a nivel de cola: cuando CMEK está habilitada, no puedes aplicar rutas a nivel de cola. Además, si el enrutamiento a nivel de cola está habilitado, no puedes habilitar CMEK. Para comprobar si tienes habilitado el enrutamiento a nivel de cola, sigue estos pasos:

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

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

    2. En el resultado, busca el campo httpTarget y comprueba si se ha definido uriOverride. Si se especifica un host, tu cola tiene habilitado el enrutamiento a nivel de cola y no es compatible con CMEK. Para quitar el enrutamiento a nivel de cola, consulta Actualizar o quitar el enrutamiento a nivel de cola. Si el resultado no muestra uriOverride con un host especificado, significa que tu cola no usa el enrutamiento a nivel de cola.

  • TTL de la tarea: cuando CMEK está habilitado, no puedes definir task_ttl en un valor superior a 60 días. Si el valor de task_ttl es superior a 60 días, no puedes habilitar CMEK.

Antes de empezar

Antes de usar CMEK en Cloud Tasks, sigue estos pasos:

  1. Habilita las APIs.

    Consola

    1. Enable the Cloud KMS and Cloud Tasks 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. Configura tu proyecto predeterminado. Debe ser el proyecto que contenga los recursos de Cloud Tasks que quieras proteger con CMEK. Si necesitas ejecutar un comando en otro proyecto, como el que contiene tus recursos de Cloud KMS, esta página incluirá la marca --project en el comando de la CLI de gcloud y te indicará qué proyecto debes especificar.

      gcloud config set project PROJECT_ID

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

    3. Actualiza gcloud componentes.

      gcloud components update

    4. Habilita las APIs Cloud KMS y Cloud Tasks en el proyecto que almacenará tus claves de cifrado.

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

      Sustituye PROJECT_ID por el ID del proyecto que almacenará tus claves de cifrado. Puede ser el mismo proyecto que tus recursos de Cloud Tasks, pero, para limitar el acceso a tus claves de Cloud KMS, te recomendamos que configures Cloud KMS en un proyecto independiente.

  2. Cloud KMS genera registros de auditoría de Cloud cuando se habilitan o inhabilitan claves, o cuando los recursos de Cloud Tasks 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. Obtener roles de Gestión de Identidades y Accesos.

    Para obtener los permisos que necesitas para usar CMEK con Cloud Tasks, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu proyecto:

    • Habilita o inhabilita las claves de cifrado gestionadas por el cliente: roles/cloudtasks.admin
    • Para ver la clave en uso, haz lo siguiente: roles/cloudtasks.viewer

    Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

    También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

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

    Si ya tienes un conjunto de claves en la misma región que tus recursos de Cloud Tasks y quieres usar esa clave y ese conjunto de claves, sáltate esta sección. Si no es así, sigue estas instrucciones para crear tu clave y tu conjunto de claves de Cloud KMS.

    1. Crea un conjunto de claves.

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

    Recuperar el ID de una clave de Cloud KMS

    Se necesita el ID de recurso de una clave de Cloud KMS para habilitar CMEK en Cloud Tasks.

    Consola

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

      Ir a Inventario de claves

    2. En la clave cuyo ID de recurso quieras obtener, haz clic en Acciones.

    3. Haga clic en Copiar nombre de 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. Para mostrar todas las claves de un conjunto de claves determinado, haz lo siguiente:

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

      Haz los cambios siguientes:

      • KEY_RING: el nombre del conjunto de claves
      • LOCATION: la región del conjunto de claves
      • PROJECT_ID: el ID del proyecto que contiene el conjunto de claves

      La salida incluye el ID de cada clave. Por ejemplo:

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

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

    Debes conceder el rol de gestión de identidades y accesos Agente de servicio de Cloud Tasks Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS para que pueda acceder a la clave de Cloud KMS:

    Consola

    1. En la Google Cloud consola, ve a la página IAM (IAM).

      Ir a IAM

    2. Selecciona la casilla Incluir concesiones de roles proporcionadas por Google.

    3. Busca la cuenta de servicio de Cloud Tasks escribiendo cloudtasks.iam.gserviceaccount.com en el filtro.

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

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

    5. En el panel que se abre, haz clic en Añadir otro rol.

    6. Busca y selecciona el rol Encargado del encriptado y desencriptado de claves 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

    Haz los cambios siguientes:

    • KEY_ID: ID de recurso completo de tu clave. Para obtener instrucciones sobre cómo encontrarlo, consulta Recuperar el ID de una clave de Cloud KMS. No incluyas un número de versión de clave. Si incluye un número de versión de clave, es posible que este comando falle.
    • 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:

      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, una tarea de tu región habilitada para CMEK puede 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 las claves de cifrado gestionadas por el cliente en Cloud Tasks.

    Habilitar CMEK para Cloud Tasks

    Puedes habilitar CMEK mediante la API o la CLI de gcloud. En Cloud Tasks, la CMEK se habilita por región. No se habilita por tareas individuales. Cuando la CMEK está habilitada en una región determinada de Cloud Tasks, todas las tareas de esa región están protegidas por la CMEK.

    gcloud

    Para habilitar CMEK con la CLI de Google Cloud, ejecuta el siguiente comando:

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

    Haz los cambios siguientes:

    • LOCATION: la región de tu recurso de Cloud Tasks
    • KEY_ID: ID de recurso completo de tu clave. Para obtener instrucciones sobre cómo encontrarlo, consulta Recuperar el ID de una clave de Cloud KMS. No incluyas un número de versión de la clave. Si incluye un número de versión de la clave, es posible que este comando falle.

    REST

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

    Para verificar que la clave se ha habilitado correctamente, sigue las instrucciones de la sección Identificar la clave en uso.

    Habilitar en tareas ya creadas

    CMEK no protege las tareas que se crearon antes de habilitar CMEK en Cloud Tasks. Para proteger las tareas que ya existen con CMEK, sigue estos pasos:

    1. Habilita las claves de cifrado gestionadas por el cliente (consulta la sección sobre cómo habilitar las claves de cifrado gestionadas por el cliente).
    2. Sustituye las tareas predefinidas. Hay dos formas principales de hacerlo. La mejor forma de hacerlo depende de lo que te interese:

      • Ejecución continua: para asegurar la ejecución continua (entrega "al menos una vez"), primero puedes volver a crear la tarea y, después, eliminar la tarea anterior tras verificar que la nueva funciona correctamente. Esto puede provocar que se ejecuten dos veces, ya que tanto la tarea antigua como la nueva pueden ejecutarse antes de que elimines la antigua.

      • Prevención de duplicados: para evitar que se ejecuten tareas duplicadas ("como máximo una vez"), puedes eliminar la tarea antigua y volver a crearla. Esto puede provocar que se pierdan ejecuciones debido al tiempo transcurrido entre la eliminación de la tarea antigua y la creación de la nueva.

    Identificar la clave en uso

    Para identificar la clave CMEK que se está usando en tus recursos de Cloud Tasks, ejecuta el siguiente comando de gcloud CLI:

    gcloud tasks cmek-config describe --location=LOCATION

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

    Si no hay ningún resultado, significa que CMEK no está configurado en la ubicación especificada.

    Aplicar una política de organización de CMEK

    Cloud Tasks está integrado con dos restricciones de políticas de la organización para ayudar a asegurar el uso de CMEK en toda la organización:

    • constraints/gcp.restrictNonCmekServices se usa para requerir protección con CMEK.
    • constraints/gcp.restrictCmekCryptoKeyProjects se usa para limitar las claves de Cloud KMS que se utilizan para la protección con CMEK.
    .

    Esta integración le permite especificar los siguientes requisitos de cumplimiento de cifrado para los recursos de Cloud Tasks de su organización:

    Consideraciones al aplicar políticas de organización

    Antes de aplicar cualquier política de organización de CMEK, debes tener en cuenta lo siguiente.

    Prepararse para un retraso de propagación

    Después de definir o actualizar una política de la organización, la nueva política puede tardar hasta 15 minutos en aplicarse.

    Tener en cuenta los recursos disponibles

    Los recursos ya creados no están sujetos a las políticas de la organización que se creen posteriormente. Por ejemplo, una política de organización no se aplica de forma retroactiva a las tareas que ya existen. Se puede seguir accediendo a esos recursos sin una CMEK y, si procede, siguen cifrados con las claves que ya tenían. Si quieres aplicar la política a las tareas que ya tienes, debes habilitar las claves de cifrado gestionadas por el cliente para las tareas que ya tienes.

    Verificar los permisos necesarios para definir una política de la organización

    Puede que sea difícil obtener el permiso para definir o actualizar la política de la organización con fines de prueba. Debes tener el rol Administrador de políticas de la organización, que solo se puede asignar a nivel de organización (no a nivel de proyecto o carpeta).

    Aunque el rol debe concederse a nivel de organización, sigue siendo posible especificar una política que solo se aplique a un proyecto o una carpeta concretos.

    Requerir CMEKs para todos los recursos nuevos de Cloud Tasks

    Puedes usar la restricción constraints/gcp.restrictNonCmekServices para exigir que se usen CMEKs para proteger todos los recursos de Cloud Tasks nuevos de una organización.

    Si se define, esta política de organización provoca que fallen todas las solicitudes de creación de recursos sin una clave de Cloud KMS especificada.

    Una vez que hayas definido esta política, solo se aplicará a los recursos nuevos del proyecto. Los recursos que ya tengas y a los que no se les haya aplicado ninguna clave de Cloud KMS seguirán existiendo y se podrá acceder a ellos sin problemas.

    Consola

    1. En la Google Cloud consola, ve a la página Políticas de la organización.

      Ir a Políticas de organización

    2. En Filtrar, busca la siguiente restricción:

      constraints/gcp.restrictNonCmekServices
      
    3. En la columna Nombre, haga clic en Restringir los servicios que pueden crear recursos sin CMEK.

    4. Haz clic en Gestionar política.

    5. En la página Editar política, vaya a Fuente de la política y seleccione Anular política del recurso superior.

    6. En Reglas, haz clic en Añadir una regla.

    7. En la lista Valores de la política, selecciona Personalizado.

    8. En la lista Tipo de política, selecciona Denegar.

    9. En el campo Valores personalizados, introduce lo siguiente:

      is:cloudtasks.googleapis.com
      
    10. Haz clic en Hecho y, a continuación, en Definir política.

    gcloud

    1. Crea un archivo temporal /tmp/policy.yaml para almacenar la política:

        name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
        spec:
          rules:
          - values:
              deniedValues:
              - is:cloudtasks.googleapis.com

      Sustituye PROJECT_ID por el ID del proyecto en el que vas a aplicar esta restricción.

    2. Ejecuta el comando org-policies set-policy:

      gcloud org-policies set-policy /tmp/policy.yaml

    Para verificar que la política se ha aplicado correctamente, puedes intentar crear una cola en el proyecto. El proceso falla a menos que especifiques una clave de Cloud KMS.

    Restringir las claves de Cloud KMS de un proyecto de Cloud Tasks

    Puedes usar la restricción constraints/gcp.restrictCmekCryptoKeyProjects para limitar las claves de Cloud KMS que puedes usar para proteger un recurso en un proyecto de Cloud Tasks.

    Por ejemplo, puedes especificar una regla similar a la siguiente: "Para todos los recursos de Cloud Tasks de projects/my-company-data-project, las claves de Cloud KMS que se usen en este proyecto deben proceder de projects/my-company-central-keys O projects/team-specific-keys".

    Consola

    1. En la Google Cloud consola, ve a la página Políticas de la organización.

      Ir a Políticas de organización

    2. En Filtrar, busca la siguiente restricción:

      constraints/gcp.restrictCmekCryptoKeyProjects
      
    3. En la columna Nombre, haga clic en Restringir los proyectos que pueden proporcionar CryptoKeys de KMS para CMEK.

    4. Haz clic en Gestionar política.

    5. En la página Editar política, vaya a Fuente de la política y seleccione Anular política del recurso superior.

    6. En Reglas, haz clic en Añadir una regla.

    7. En la lista Valores de la política, selecciona Personalizado.

    8. En la lista Tipo de política, selecciona Permitir.

    9. En el campo Valores personalizados, introduce lo siguiente:

      under:projects/KMS_PROJECT_ID
      

      Sustituye KMS_PROJECT_ID por el ID del proyecto en el que se encuentran las claves de Cloud KMS que quieres usar.

      Por ejemplo, under:projects/my-kms-project.

    10. Haz clic en Hecho y, a continuación, en Definir política.

    gcloud

    1. Crea un archivo temporal /tmp/policy.yaml para almacenar la política:

        name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
        spec:
          rules:
          - values:
              allowedValues:
              - under:projects/KMS_PROJECT_ID

      Sustituye lo siguiente:

      • PROJECT_ID: el ID del proyecto en el que vas a aplicar esta restricción.
      • KMS_PROJECT_ID: el ID del proyecto en el que se encuentran las claves de Cloud KMS que quieres usar.
    2. Ejecuta el comando org-policies set-policy:

      gcloud org-policies set-policy /tmp/policy.yaml

    Para verificar que la política se ha aplicado correctamente, puedes intentar crear una cola con una clave de Cloud KMS de otro proyecto. El proceso fallará.

    Inhabilitar las claves de cifrado gestionadas por el cliente en Cloud Tasks

    Puedes inhabilitar CMEK mediante la API o la CLI de gcloud. En Cloud Tasks, la CMEK está inhabilitada por región. No se inhabilita por tareas individuales. Si la CMEK está inhabilitada en una región determinada de Cloud Tasks, las tareas de esa región no estarán protegidas por la CMEK.

    Si inhabilitas CMEK, afectará a las tareas que crees en el futuro, no a las que hayas creado anteriormente:

    • Las tareas nuevas no están protegidas por CMEK
    • Tareas creadas anteriormente: las tareas que se crearon mientras CMEK estaba habilitado permanecen cifradas y siguen ejecutándose mientras la clave de Cloud KMS esté activa.

    gcloud

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

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

    Haz los cambios siguientes:

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

    REST

    Para inhabilitar las CMEK, llama al método Update CMEK config y borra la clave de Cloud KMS sustituyéndola por una cadena vacía. La API Cloud Tasks proporciona el método Update CMEK config en las APIs REST y RPC:

    Quitar Cloud KMS

    Si quieres revocar el acceso a los datos de tus tareas, puedes quitar Cloud KMS. Hay tres formas de hacerlo:

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

    • Destruye la clave de encriptado gestionada por el cliente. Si destruyes una clave CMEK, se suspenderá de forma permanente el acceso a todos los datos protegidos por esa versión de la clave. No puedes acceder a las tareas ni crear tareas con una llave que se haya destruido. Si se crea una tarea mientras la CMEK está habilitada y la clave se destruye más adelante, la tarea se cifrará con tu clave, pero no se podrá ejecutar. Si la tarea intenta ejecutarse, Cloud Logging registra un error UNKNOWN. Cuando destruyes una clave de encriptado gestionada por el cliente, el cambio puede tardar hasta 5 minutos en aplicarse.

    • Revoca el rol de gestión de identidades y accesos cloudkms.cryptoKeyEncrypterDecrypterdel agente de servicio de Cloud Tasks. Esto afecta a todas las tareas del proyectoGoogle Cloud que admitan el cifrado con CMEK. No puedes crear tareas integradas con CMEK ni ver recursos cifrados con CMEK.

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

    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.