Configuración de cola segura

En esta página, se proporcionan sugerencias para proteger la creación y configuración de colas. La clave es restringir los métodos de administración de colas a un pequeño conjunto de personas o entidades. En el caso de las organizaciones grandes, podría ser necesario usar una cuenta de servicio para ejecutar software que aplique una configuración de colas adecuada.

La idea general es separar a los usuarios y a las demás entidades en tres categorías.

  1. Administradores de colas: Los usuarios de este grupo tienen permiso para llamar a los métodos de administración de colas de Cloud Tasks o para subir archivos queue.yaml. Este grupo está restringido a un pequeño conjunto de usuarios a fin de reducir el riesgo de configuración de la cola, en particular cuando se mezcla inadvertidamente queue.yaml y los métodos de administración de colas de Cloud Tasks.
  2. Trabajadores de Cloud Tasks: Los usuarios de este grupo tienen permiso para realizar interacciones comunes con Cloud Tasks como poner tareas en una cola o quitarlas. No tienen permiso para llamar a los métodos de administración de colas de Cloud Tasks.
  3. Implementadores de App Engine: Para los proyectos que tienen aplicaciones de App Engine, los usuarios de este grupo tienen permiso para implementar la aplicación. No pueden subir archivos queue.yaml ni realizar llamadas a la API de Cloud Tasks, lo que permite a los administradores de colas aplicar las políticas adecuadas.

En este esquema, los usuarios que son administradores de colas no deberían ser también trabajadores de Cloud Tasks, ya que en ese caso la separación sería inútil.

Si tu proyecto usa los métodos de administración de colas de Cloud Tasks exclusivamente, tal vez sea conveniente que los administradores de colas no sean también implementadores de App Engine, ya que esto haría posible que alguien suba un archivo queue.yaml por error.

Proyectos y organizaciones pequeños

Las organizaciones y los proyectos pequeños pueden asignar funciones de administración de identidades y accesos (IAM) directamente a los usuarios para ubicarlos en los grupos anteriores. Esto tiene sentido para los equipos que prefieren una configuración más simple o que hacen cambios en la configuración de las colas o implementaciones de aplicaciones de App Engine manualmente.

Para agregar usuarios a estos grupos, sigue estos pasos:

Administrador de colas

  1. Como administrador del proyecto, otorga la función cloudtasks.queueAdmin a los usuarios que pueden realizar llamadas a la API de administración de colas de Cloud Tasks o subir archivos queue.yaml.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/cloudtasks.queueAdmin

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto.
    • EMAIL: El correo electrónico del usuario miembro
  2. Como usuario con la función cloudtasks.queueAdmin, sigue las prácticas recomendadas anteriores y elige uno de los siguientes métodos para cambiar la configuración de la cola.

    1. Usar la API de Cloud Tasks para cambiar la configuración de las colas

    2. Sube queue.yaml con gcloud:

      gcloud app deploy queue.yaml

Trabajador de Cloud Tasks

Como a menudo hay muchos usuarios autorizados a interactuar con Cloud Tasks, puedes asignar funciones a las cuentas de servicio en lugar de usuarios individuales. Este tipo de uso es común en la producción. Para obtener más información, consulta Proyectos y organizaciones grandes.

  1. Como administrador del proyecto, otorga funciones a los usuarios que tienen permiso para interactuar con Cloud Tasks, pero no para cambiar la configuración de las colas:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

    Reemplaza PROJECT_ID por el ID de tu proyecto.

Como usuario con una o más de las funciones otorgadas en los pasos anteriores, puedes interactuar con la API de Cloud Tasks.

Implementador de App Engine

  1. Como administrador del proyecto, otorga funciones a los usuarios que tienen permiso para implementar aplicaciones de App Engine, pero no tienen permitido modificar las configuraciones de las colas ni interactuar con las tareas:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/storage.admin

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID de tu proyecto.
    • EMAIL: El correo electrónico del usuario miembro
  2. Como usuario con las funciones otorgadas en los pasos anteriores, implementa una aplicación de App Engine:

    gcloud app deploy app.yaml

Proyectos y organizaciones grandes

Los proyectos y las organizaciones grandes pueden usar cuentas de servicio para separar los deberes y las responsabilidades. Esto tiene sentido para los equipos con infraestructura compleja a fin de cambiar la configuración de las colas y, quizás, implementar aplicaciones de App Engine.

Para seguir el principio de privilegio mínimo y simplificar la administración de accesos, estas instrucciones usan identidad de cuenta de servicio. Para obtener más información sobre esto, el patrón, consulta Usa la identidad de cuentas de servicio en la documentación de autenticación de Google Cloud.

A continuación, se brindan instrucciones para configurar estas cuentas de servicio.

Administrador de colas

  1. Como administrador del proyecto, crea la cuenta de servicio.

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
  2. Otorga la función cloudtasks.queueAdmin a la cuenta de servicio para que pueda subir archivos queue.yaml y realizar llamadas a la API de administración de colas de Cloud Tasks.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.queueAdmin

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  3. Permitir de forma selectiva la suplantación del "Administrador de colas" cuenta de servicio que crear.

    Por lo general, debe ser un pequeño grupo de directores que actúan como administradores de filas. Otorga a estas principales el iam.serviceAccountTokenCreator en el rol “Administrador de colas” de la cuenta de servicio que creaste. Para obtener más información, consulta Cómo otorgar o revocar un solo rol en la documentación de IAM.

  4. Sigue las prácticas recomendadas que se describen en Usa Queue Management o queue.yaml, y elige una de las los siguientes métodos para cambiar la configuración de las colas:

    • Usar Cloud Tasks para cambiar la configuración de las colas

    • Sube queue.yaml con gcloud CLI

Trabajador de Cloud Tasks

  1. Como administrador del proyecto, crea la cuenta de servicio.

    gcloud iam service-accounts create cloud-tasks-worker \
    --display-name "Cloud Tasks Worker"
  2. Otórgale funciones a la cuenta de servicio para que pueda interactuar con Cloud Tasks, pero no cambiar la configuración de las colas.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  3. Permitir de forma selectiva la suplantación del “Trabajador de Cloud Tasks” cuenta de servicio que creaste.

    Para las principales que interactúan con Cloud Tasks, otorga el permiso iam.serviceAccountTokenCreator rol en el “Trabajador de Cloud Tasks” la cuenta de servicio que creaste. Para aprender a hacerlo, ver Cómo otorgar o revocar un solo rol en la documentación de IAM.

Implementador de App Engine

  1. Como administrador del proyecto, crea la cuenta de servicio.

    gcloud iam service-accounts create app-engine-deployer \
    --display-name "App Engine Deployer"
  2. Otorga funciones a la cuenta de servicio para que pueda implementar aplicaciones de App Engine, pero no queue.yaml.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/storage.admin

    Reemplaza PROJECT_ID por el ID de tu proyecto.

  3. Permitir de forma selectiva la suplantación del “Implementador de App Engine” cuenta de servicio que creaste.

    Para las principales que implementan servicios de App Engine, otorga el permiso iam.serviceAccountTokenCreator en el rol de “implementador de App Engine” de la cuenta de servicio que creaste. Para aprender cómo, consulta Cómo otorgar o revocar un solo rol en la documentación de IAM.

Limita el acceso a colas únicas

Si tienes varias filas en un proyecto y deseas limitar el acceso a filas individuales, puedes usar políticas de IAM a nivel de la fila en lugar de a nivel del proyecto. Para limitar el acceso por cola, usa el comando gcloud tasks queues add-iam-policy-binding. Por ejemplo:

  gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \
  --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer

Reemplaza lo siguiente:

  • QUEUE_NAME: Es el nombre de la cola.
  • LOCATION: La ubicación de la fila
  • PROJECT_ID: Es el ID de tu proyecto.

¿Qué sigue?