Configuración de la 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: Es 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: Es 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, en estas instrucciones, se usa la suplantación de cuentas de servicio. Para obtener más información sobre este patrón, consulta Usa la suplantación 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. Permite de manera selectiva el suplantación de identidad de la cuenta de servicio “Administrador de colas” que creaste.

    Por lo general, debe ser un pequeño grupo de principales que actúan como administradores de colas. Otorga a estas principales el rol iam.serviceAccountTokenCreator en la cuenta de servicio “Administrador de colas” que creaste. Si quieres obtener información para hacerlo, consulta Cómo otorgar o revocar una función en la documentación de IAM.

  4. Sigue las prácticas recomendadas que se describen en Usa la administración de colas o colas.yaml y elige uno de 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. Permite de manera selectiva el suplantación de identidad de la cuenta de servicio “Trabajador de Cloud Tasks” que creaste.

    Para las principales que interactúan con Cloud Tasks, otorga la función iam.serviceAccountTokenCreator en la cuenta de servicio “Trabajador de Cloud Tasks” que creaste. Si quieres obtener información para hacerlo, consulta Cómo otorgar o revocar una función 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. Permite de manera selectiva el suplantación de identidad de la cuenta de servicio del “implementador de App Engine” que creaste.

    Para las principales que implementan servicios de App Engine, otorga la función iam.serviceAccountTokenCreator a la cuenta de servicio “Implementador de App Engine” que creaste. Para obtener información sobre cómo hacerlo, consulta Cómo otorgar o revocar una función en la documentación de IAM.

Limita el acceso a colas individuales

Si tienes varias colas en un proyecto y quieres limitar el acceso a colas individuales, puedes usar las políticas de IAM a nivel de cola en lugar de a nivel de 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: Es la ubicación de la fila.
  • PROJECT_ID: Es el ID de tu proyecto.

¿Qué sigue?