Usar claves de encriptación administradas por el cliente

De forma predeterminada, Cloud Tasks encripta el contenido del cliente en reposo. Cloud Tasks controla 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, incluido Cloud Tasks. 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 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 Cloud Tasks 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).

Qué se protege con CMEK

Cuando habilitas la CMEK en Cloud Tasks, la habilitas 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 la CMEK estaba habilitada y, luego, la clave se inactiva (ya sea porque se inhabilita o se borra la clave, o porque se inhabilita la 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:

  • La tarea se creó antes de habilitar la CMEK
  • La tarea no se encuentra en la región para 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:

  • google-gax versiones anteriores a 4.0.0: El paquete google-gax de NPM para Node.js tiene asistencia limitada en versiones anteriores a 4.0.0. En estas versiones, la CMEK solo se admite 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 posterior.

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

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

    gcloud tasks queues describe QUEUE_NAME

    Reemplaza QUEUE_NAME por el nombre de tu fila.

    Si el type que aparece es pull, tu fila es una fila de extracción. Si el valor que se indica en type es push, esta limitación no afecta las tareas de tu cola.

  • Enrutamiento a nivel de la fila: Cuando CMEK está habilitado, no puedes aplicar el enrutamiento a nivel de la fila. Además, si el enrutamiento a nivel de la fila está habilitado, no podrás habilitar la CMEK. Para verificar si tienes habilitado el enrutamiento a nivel de la fila, haz lo siguiente:

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

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

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

  • TTL de la tarea: Cuando la CMEK está habilitada, no puedes establecer task_ttl en más de 60 días. Además, si tienes un valor de task_ttl establecido en más de 60 días, no podrás habilitar la CMEK.

Antes de comenzar

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

  1. Habilita las APIs.

    Console

    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 contiene los recursos de Cloud Tasks que deseas proteger con la 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 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 APIs de Cloud KMS y Cloud Tasks para el proyecto que almacenará 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. 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 los recursos de Cloud Tasks 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 del 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.

  3. Obtén roles de Identity and Access Management.

    Para obtener los permisos que necesitas para usar la 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
    • Visualiza la clave en uso: roles/cloudtasks.viewer

    Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

    También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

  4. 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 quieres usar esa clave y ese llavero, omite esta sección. De lo contrario, sigue estas instrucciones para crear tu llavero de claves y clave 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 la CMEK para Cloud Tasks.

    Console

    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. Para la clave con el ID del recurso que quieres recuperar, 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: 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 el rol de encriptador/desencriptador de CryptoKey de Cloud KMS de Identity and Access Management (IAM) para que pueda acceder a la clave de Cloud KMS:

    Console

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

      Ir a IAM

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

    3. Para encontrar la cuenta de servicio de Cloud Tasks, escribe 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 ícono de lápiz Editar principal.

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

    6. Busca y selecciona el rol 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 de tu clave. Para obtener instrucciones sobre cómo encontrarlo, consulta Cómo recuperar el ID de una clave de Cloud KMS. No incluyas un número de versión de clave. Si se incluye un número de versión de clave, es posible que este comando falle.
    • PROJECT_NUMBER: Es el número de tu proyecto 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:

      PROJECT=$(gcloud info --format='value(config.project)')
      gcloud projects describe ${PROJECT} --format="value(projectNumber)"

    Siempre que el agente de servicio tenga el rol de roles/cloudkms.cryptoKeyEncrypterDecrypter, una tarea en tu región habilitada para CMEK puede encriptar y desencriptar sus datos con la clave de CMEK. Si revocas este rol, o si inhabilitas o destruyes la clave de CMEK, no se podrá acceder a los datos. En este documento, consulta Cómo inhabilitar la CMEK para Cloud Tasks.

    Habilita la CMEK para Cloud Tasks

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

    gcloud

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

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

    Reemplaza lo siguiente:

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

    REST

    Puedes habilitar la CMEK llamando al método Update CMEK config. La API de Cloud Tasks proporciona el método Update CMEK config en las APIs de REST y RPC:

    Para verificar que la clave se haya habilitado correctamente, sigue las instrucciones de la sección Cómo identificar la clave en uso.

    Habilita la opción para tareas preexistentes

    La CMEK no protege las tareas que se crearon antes de habilitar la CMEK para Cloud Tasks. Para proteger tareas preexistentes con CMEK, haz lo siguiente:

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

      • Ejecución continua: Para garantizar la ejecución continua (entrega "al menos una vez"), primero puedes volver a crear la tarea y, luego, borrar la tarea existente después de verificar que la tarea nueva funcione según lo esperado. Esto puede generar ejecuciones duplicadas, ya que tanto la tarea anterior como la nueva pueden ejecutarse antes de que borres la tarea anterior.

      • Prevención de duplicados: Para evitar ejecuciones duplicadas (entrega "a lo sumo 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.

    Identifica la clave en uso

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

    gcloud tasks cmek-config describe --location=LOCATION

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

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

    Aplica una política de la organización de CMEK

    Cloud Tasks se integra con dos restricciones de políticas de la organización para ayudar a garantizar el uso de CMEK en una organización:

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

    Esta integración te permite especificar los siguientes requisitos de cumplimiento de encriptación para los recursos de Cloud Tasks en tu organización:

    Consideraciones para aplicar políticas de la organización

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

    Prepárate para una demora en la propagación

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

    Considera los recursos existentes

    Los recursos existentes no están sujetos a las políticas de la organización recién creadas. Por ejemplo, una política de la organización no se aplica de forma retroactiva a las tareas existentes. Se puede acceder a esos recursos sin una CMEK y, si corresponde, siguen encriptados con las claves existentes. Si deseas aplicar la política a las tareas existentes, debes habilitar CMEK para las tareas existentes.

    Verifica los permisos necesarios para establecer una política de la organización

    Es posible que sea difícil adquirir permisos para configurar o actualizar la política de la organización con fines de prueba. Se te debe otorgar el rol de administrador de políticas de la organización, que solo se puede otorgar a nivel de la organización (en lugar de a nivel de proyecto o carpeta).

    Aunque el rol se debe otorgar a nivel de la organización, aún es posible especificar una política que solo se aplique a un proyecto o una carpeta específicos.

    Requerir CMEK para todos los recursos nuevos de Cloud Tasks

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

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

    Después de establecer esta política, se aplica solo a los recursos nuevos del proyecto. Todos los recursos existentes sin las claves de Cloud KMS aplicadas seguirán existiendo y se podrá acceder a ellos sin problemas.

    Console

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

      Ir a Políticas de la organización

    2. Con el filtro, busca la siguiente restricción:

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

    4. Haz clic en Administrar política.

    5. En la página Editar política, en Fuente de la política, selecciona Anular la política del elemento superior.

    6. En Reglas, haz clic en Agregar una regla.

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

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

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

      is:cloudtasks.googleapis.com
      
    10. Haz clic en Listo y, luego, en Establecer 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

      Reemplaza PROJECT_ID por el ID del proyecto en el que aplicarás 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 haya aplicado correctamente, puedes intentar crear una cola en el proyecto. El proceso falla, a menos que especifiques una clave de Cloud KMS.

    Restringe las claves de Cloud KMS para un proyecto de Cloud Tasks

    Puedes usar la restricción constraints/gcp.restrictCmekCryptoKeyProjects para restringir 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 en projects/my-company-data-project, las claves de Cloud KMS que se usan en este proyecto deben provenir de projects/my-company-central-keys O projects/team-specific-keys".

    Console

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

      Ir a Políticas de la organización

    2. Con el filtro, busca la siguiente restricción:

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

    4. Haz clic en Administrar política.

    5. En la página Editar política, en Fuente de la política, selecciona Anular la política del elemento superior.

    6. En Reglas, haz clic en Agregar 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, ingresa lo siguiente:

      under:projects/KMS_PROJECT_ID
      

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

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

    10. Haz clic en Listo y, luego, en Establecer 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

      Reemplaza lo siguiente

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

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

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

    Inhabilita la CMEK para Cloud Tasks

    Puedes inhabilitar la CMEK con la API o gcloud CLI. En el caso de Cloud Tasks, la CMEK está inhabilitada por región. Las tareas individuales no la inhabilitan. Cuando la CMEK está inhabilitada para una región determinada en Cloud Tasks, las tareas de esa región no están protegidas por la CMEK.

    La inhabilitación de la CMEK afecta a las tareas creadas en el futuro, no a las tareas creadas en el pasado:

    • Tareas nuevas: No están protegidas por CMEK.
    • Tareas preexistentes: Las tareas que se crearon mientras CMEK estaba habilitado permanecen encriptadas y se siguen ejecutando mientras la clave de Cloud KMS permanezca activa.

    gcloud

    Para inhabilitar la 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 de tu recurso de Cloud Tasks.

    REST

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

    Quita Cloud KMS

    Si quieres 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. Inhabilitar una clave de CMEK suspende el acceso a todos los datos protegidos por esa versión de clave mientras la clave esté inhabilitada. No puedes acceder a las tareas ni crearlas con una clave inhabilitada. Si intentas ejecutar una tarea protegida por CMEK mientras la clave está inhabilitada, se generará un error UNKNOWN en Cloud Logging. Puedes volver a habilitar la llave 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. Destruir una clave CMEK suspende de forma permanente el acceso a todos los datos protegidos por esa versión de clave. No puedes acceder a las tareas ni crearlas con una clave que se haya destruido. Si se creó una tarea mientras la CMEK estaba habilitada 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 el rol de IAM cloudkms.cryptoKeyEncrypterDecrypter del agente de servicio de Cloud Tasks. Esto afecta a todas las tareas del proyectoGoogle Cloud que admiten la encriptación con CMEK. No puedes crear tareas nuevas integradas en CMEK ni ver recursos encriptados con CMEK.

    Aunque ninguna de estas operaciones garantiza la revocación de acceso instantánea, los cambios de IAM suelen entrar en vigencia más rápido. Para obtener más información, consulta Coherencia de recursos de Cloud KMS y Propagación del cambio 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.