De forma predeterminada, Cloud Tasks encripta el contenido del cliente almacenado 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 CMEK en Cloud Tasks, lo haces 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 inactivó (por inhabilitar o borrar la clave, o inhabilitar la CMEK), la tarea se encripta con tu clave, pero no se puede ejecutar.
Las tareas no se protegen con CMEK en los siguientes casos:
- La tarea se creó antes de habilitar CMEK
- La tarea no está 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 a4.0.0
: El paquetegoogle-gax
de NPM para Node.js tiene compatibilidad limitada en versiones anteriores a4.0.0
. Para estas versiones, CMEK solo es compatible con la regiónus-central1
. Incluso si solo tienes tareas en esa región, se recomienda que actualices a la versión4.0.0
o una posterior.Servicio Taskqueue integrado en App Engine: Las tareas creadas con el servicio Taskqueue integrado en App Engine no están protegidas por CMEK, incluso si se encuentran en una región para la que está habilitado. Habilitar CMEK no evita la creación ni la operación (por ejemplo, la ejecución o eliminación) de estas tareas.
Colas de extracción: Si habilitas las CMEK, puedes crear y ejecutar tareas en las colas de extracción, pero estas tareas no están protegidas por las CMEK. Las listas 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 la terminal:
gcloud tasks queues describe QUEUE_NAME
Reemplaza
QUEUE_NAME
por el nombre de tu fila.Si el
type
que aparece espull
, tu fila es una fila de extracción. Si eltype
que se indica espush
, esta limitación no afecta a 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 está habilitado el enrutamiento a nivel de la cola, no puedes habilitar CMEK. Para verificar si tienes habilitado el enrutamiento a nivel de la cola, haz lo siguiente:
Ejecuta el siguiente comando de gcloud CLI en la terminal:
Reemplazagcloud tasks queues describe QUEUE_NAME
QUEUE_NAME
por el nombre de tu fila.En el resultado, busca el campo
httpTarget
y comprueba si se configuróuriOverride
. Si se especifica unhost
, tu fila tiene habilitado el enrutamiento a nivel de la fila y no es compatible con las CMEK. Para quitar el enrutamiento a nivel de la cola, consulta Cómo actualizar o quitar el enrutamiento a nivel de la cola. Si el resultado no muestrauriOverride
con unhost
especificado, tu fila no usa el enrutamiento a nivel de la fila.
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 untask_ttl
establecido en más de 60 días, no puedes habilitar las CMEK.
Antes de comenzar
Antes de usar CMEK en Cloud Tasks, completa los siguientes pasos:
Habilita las APIs.
Console
-
Enable the Cloud KMS and Cloud Tasks APIs.
gcloud
In the Google Cloud console, 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.
Configura tu proyecto predeterminado. Este debe 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.Actualiza los componentes de
gcloud
:gcloud components update
Habilita las APIs de Cloud KMS y Cloud Tasks del 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. Este puede 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 independiente.
-
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 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.
Obtener roles de Identity and Access Management
Para 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
-
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 mediante roles personalizados o cualquier otro rol predefinido.
-
Habilita o inhabilita CMEK:
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, sigue estas instrucciones para crear tu clave y llavero de Cloud KMS.
-
El llavero de claves debe estar en la región que contiene los recursos de Cloud Tasks que deseas proteger. Para obtener más información, consulta Ubicaciones de Cloud KMS y Ubicaciones de Cloud Tasks.
El llavero de claves y los recursos de Cloud Tasks protegidos por CMEK pueden estar en el mismo proyecto, pero para limitar el acceso a tus claves de Cloud KMS, considera configurar Cloud KMS en un proyecto independiente.
Cómo recuperar el ID de una clave de Cloud KMS
El ID de recurso de una clave de Cloud KMS es obligatorio cuando habilitas las CMEK para Cloud Tasks.
Console
En la consola de Google Cloud , ve a la página Administración de claves y selecciona la pestaña Inventario de claves.
Para la clave con el ID de recurso que quieres recuperar, haz clic en more_vert Acciones.
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
gcloud
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
El resultado incluye el ID de clave 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 Identity and Access Management (IAM) de encriptador/desencriptador de CryptoKey de Cloud KMS para que pueda acceder a la clave de Cloud KMS:
Console
En la consola de Google Cloud , ve a la página IAM (Identity and Access Management).
Selecciona la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google.
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
.Haz clic en el ícono de lápiz Editar principal.
En el panel que se abre, haz clic en Agregar otro rol.
Busca y selecciona el rol de Encriptador/desencriptador de CryptoKey de Cloud KMS.
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
: El ID de recurso completamente calificado de tu clave. Para obtener instrucciones sobre cómo encontrar este ID, consulta Cómo recuperar 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
: El número de proyecto de Google Cloud . Para encontrar el número de 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 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 CMEK, no se podrá acceder a los datos. En este documento, consulta
Cómo inhabilitar CMEK para Cloud Tasks.
Habilita CMEK para Cloud Tasks
Puedes habilitar CMEK con la API o gcloud CLI. En el caso de Cloud Tasks, la CMEK está habilitada por región. No se habilita en tareas individuales. Cuando se habilitan las CMEK para una región determinada en Cloud Tasks, todas las tareas de esa región están protegidas por ellas.
gcloud
Para habilitar 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 TasksKEY_ID
: El ID de recurso completamente calificado de tu clave. Para obtener instrucciones sobre cómo encontrar este ID, consulta Cómo recuperar 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.
REST
Para habilitar la CMEK, llama 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:
- REST: Usa el método
updateCmekConfig
. - RPC: Usa el método
UpdateCmekConfigRequest
.
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 función para tareas preexistentes
CMEK no protege las tareas que se crearon antes de habilitar CMEK para Cloud Tasks. Para proteger tareas preexistentes con CMEK, sigue estos pasos:
- Habilita CMEK (consulta la sección sobre cómo habilitar CMEK).
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 ("al menos una vez" de la entrega), primero puedes volver a crear la tarea y, luego, borrar la tarea preexistente después de verificar que la tarea nueva funcione como se espera. Esto puede generar ejecuciones duplicadas, ya que la tarea anterior y la nueva pueden ejecutarse antes de que borres la anterior.
Prevención de duplicados: Para evitar ejecuciones duplicadas ("a lo mucho una vez" de entrega), primero puedes borrar la tarea anterior y, luego, volver a crearla. Esto puede provocar ejecuciones perdidas 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 para 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 la política 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:
- Requerir CMEK para todos los recursos nuevos de Cloud Tasks
- Cómo restringir las claves de Cloud KMS de un proyecto de Cloud Tasks
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 tareas existentes, debes habilitar CMEK para las tareas preexistentes.
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 exigir 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
En la consola de Google Cloud , ve a la página Políticas de la organización.
En Filtrar, busca la siguiente restricción:
constraints/gcp.restrictNonCmekServices
En la columna Nombre, haz clic en Restringir los servicios que pueden crear recursos sin CMEK.
Haz clic en
Administrar política.En la página Editar política, en Fuente de la política, selecciona Anular la política del elemento superior.
En Reglas, haz clic en Agregar una regla.
En la lista Valores de la política, selecciona Personalizado.
En la lista Tipo de política, selecciona Rechazar.
En el campo Valores personalizados, ingresa lo siguiente:
is:cloudtasks.googleapis.com
Haz clic en Listo y, luego, en Establecer política.
gcloud
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 aplicas esta restricción.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 fila en el proyecto. El proceso falla, a menos que especifiques una clave de Cloud KMS.
Restringe las claves de Cloud KMS de 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
En la consola de Google Cloud , ve a la página Políticas de la organización.
En Filtrar, busca la siguiente restricción:
constraints/gcp.restrictCmekCryptoKeyProjects
En la columna Nombre, haz clic en Restringir los proyectos que pueden proporcionar CryptoKeys de KMS para CMEK.
Haz clic en
Administrar política.En la página Editar política, en Fuente de la política, selecciona Anular la política del elemento superior.
En Reglas, haz clic en Agregar una regla.
En la lista Valores de la política, selecciona Personalizado.
En la lista Tipo de política, selecciona Permitir.
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
.Haz clic en Listo y, luego, en Establecer política.
gcloud
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.
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 fila con una clave de Cloud KMS de un proyecto diferente. El proceso fallará.
Inhabilita CMEK para Cloud Tasks
Puedes inhabilitar CMEK con la API o gcloud CLI. Para Cloud Tasks, la CMEK está inhabilitada por región. No se inhabilita con tareas individuales. 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.
Inhabilitar la CMEK afecta a las tareas que se creen en el futuro, no a las tareas que se crearon en el pasado:
- Tareas nuevas: No están protegidas por CMEK.
Tareas preexistentes: Las tareas que se crearon mientras la CMEK estaba habilitada permanecen encriptadas y se siguen ejecutando mientras la clave de Cloud KMS permanezca activa.
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 de tu recurso de Cloud Tasks.
REST
Para inhabilitar 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:
- REST: Usa el método
updateCmekConfig
. - RPC: Usa el método
UpdateCmekConfigRequest
.
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 tareas ni crearlas con una clave inhabilitada. Si intentas ejecutar una tarea protegida por CMEK mientras la clave está inhabilitada, se genera un error
UNKNOWN
en Cloud Logging. Si lo deseas, puedes volver a habilitar la clave más adelante. 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. Si se destruye una clave CMEK, se suspende de forma permanente el acceso a todos los datos protegidos por esa versión de clave. No puedes acceder a 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 destruyas 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 proyecto de Google Cloud que admiten encriptación con CMEK. No puedes crear tareas nuevas integradas en 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 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 de los precios actuales, consulta Precios de Cloud KMS.