En esta página se ofrecen sugerencias para proteger la creación y la configuración de colas. La clave es restringir los métodos de gestión de colas a un pequeño grupo de personas o entidades. En las organizaciones de gran tamaño, puede 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 otras entidades en tres categorías:
- Administradores de colas: los usuarios de este grupo tienen permiso para llamar a los métodos de gestión de colas de Cloud Tasks o para subir archivos
queue.yaml
. Este grupo se limita a un conjunto de usuarios muy pequeño para reducir el riesgo de que se sobrescriba la configuración de la cola, sobre todo si se mezclan por error los métodos de gestión de colas dequeue.yaml
y Cloud Tasks. - Trabajadores de Cloud Tasks: los usuarios de este grupo tienen permiso para realizar interacciones comunes con Cloud Tasks, como poner en cola y sacar de la cola tareas. No pueden llamar a métodos de gestión de colas de Cloud Tasks.
- Encargados del despliegue de App Engine: en los proyectos que tienen aplicaciones de App Engine, los usuarios de este grupo tienen permiso para desplegar la aplicación. No pueden subir archivos
queue.yaml
ni hacer llamadas a la API Cloud Tasks, lo que permite que los administradores de colas apliquen las políticas adecuadas.
En este esquema, los usuarios que son administradores de colas no deben ser también trabajadores de Cloud Tasks, ya que eso sería contrario al propósito de la separación.
Si tu proyecto usa exclusivamente métodos de gestión de colas de Cloud Tasks, puede que no sea conveniente que los administradores de colas también sean responsables de la implementación de App Engine, ya que esto permitiría que se subiera un archivo queue.yaml
erróneo.
Pequeños proyectos y organizaciones
Los proyectos y las organizaciones pequeños pueden asignar roles de Gestión de Identidades y Accesos (IAM) directamente a los usuarios para colocarlos en los grupos anteriores. Esto es conveniente para los equipos que prefieren la simplicidad de la configuración o que realizan cambios en la configuración de la cola o implementaciones de la aplicación App Engine a mano.
Añade usuarios a estos grupos de la siguiente manera:
Administrador de cola
Como administrador de un proyecto, asigna el rol
cloudtasks.queueAdmin
a los usuarios que tengan permiso para hacer llamadas a la API de gestión de colas de Cloud Tasks o para subir archivosqueue.yaml
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/cloudtasks.queueAdmin
Haz los cambios siguientes:
PROJECT_ID
: el ID de tu proyectoEMAIL
: correo del usuario miembro
Como usuario con el rol
cloudtasks.queueAdmin
, siguiendo las prácticas recomendadas anteriores, elige uno de los siguientes métodos para cambiar la configuración de la cola.Usa la API de Cloud Tasks para cambiar la configuración de la cola.
Sube
queue.yaml
congcloud
:gcloud app deploy queue.yaml
Trabajador de Cloud Tasks
Como suele haber muchos usuarios que pueden interactuar con Cloud Tasks, puedes asignar roles a cuentas de servicio en lugar de a usuarios concretos. Este tipo de uso es habitual en producción. Para obtener más información, consulta Proyectos y organizaciones grandes.
Como administrador del proyecto, asigna roles a los usuarios que tengan 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
Sustituye
PROJECT_ID
por el ID de tu proyecto.
Como usuario con uno o varios de los roles indicados anteriormente, puedes interactuar con la API Cloud Tasks.
implementador de App Engine
Como administrador de un proyecto, asigna roles a los usuarios que tengan permiso para desplegar aplicaciones de App Engine, pero no para modificar la configuración de las colas ni para 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
Haz los cambios siguientes:
PROJECT_ID
: el ID de tu proyectoEMAIL
: correo del usuario miembro
Como usuario con las funciones otorgadas anteriormente, despliega una aplicación de App Engine.
gcloud app deploy app.yaml
Grandes proyectos y organizaciones
Los grandes proyectos y organizaciones pueden usar cuentas de servicio para separar deberes y responsabilidades. Esto es útil para los equipos con una infraestructura compleja para cambiar la configuración de las colas y, quizás, también para desplegar aplicaciones de App Engine.
Para seguir el principio de mínimos accesos y simplificar la gestión de acceso, estas instrucciones usan la suplantación de cuentas de servicio. Para obtener más información sobre este patrón, consulta Usar la suplantación de identidad de cuentas de servicio en la documentación sobre autenticación Google Cloud .
Estas son las instrucciones para configurar estas cuentas de servicio.
Administrador de cola
Como administrador de proyecto, crea la cuenta de servicio.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
Concede el rol
cloudtasks.queueAdmin
a la cuenta de servicio para que pueda subir archivosqueue.yaml
y hacer llamadas a la API de gestió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
Sustituye
PROJECT_ID
por el ID de tu proyecto.Permite de forma selectiva la suplantación de identidad de la cuenta de servicio "Administrador de colas" que has creado.
Normalmente, se trata de un grupo reducido de directores que actúan como administradores de la cola. Concede a estas principales el rol
iam.serviceAccountTokenCreator
en la cuenta de servicio "Administrador de colas" que has creado. Para saber cómo hacerlo, consulta el artículo Conceder o revocar un solo rol de la documentación de gestión de identidades y accesos.Sigue las prácticas recomendadas descritas en Usar la gestión de colas o queue.yaml y elige uno de los siguientes métodos para cambiar la configuración de la cola:
Usa Cloud Tasks para cambiar la configuración de la cola.
Subir
queue.yaml
con gcloud CLI
Trabajador de Cloud Tasks
Como administrador de proyecto, crea la cuenta de servicio.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
Concede roles 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
Sustituye
PROJECT_ID
por el ID de tu proyecto.Permite de forma selectiva la suplantación de identidad de la cuenta de servicio "Trabajador de Cloud Tasks" que has creado.
En el caso de las entidades que interactúan con Cloud Tasks, concede el rol
iam.serviceAccountTokenCreator
a la cuenta de servicio "Trabajador de Cloud Tasks" que has creado. Para saber cómo hacerlo, consulta el artículo Conceder o revocar un solo rol de la documentación de gestión de identidades y accesos.
implementador de App Engine
Como administrador de proyecto, crea la cuenta de servicio.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
Concede roles a la cuenta de servicio para que pueda desplegar 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
Sustituye
PROJECT_ID
por el ID de tu proyecto.Permite de forma selectiva la suplantación de la cuenta de servicio "App Engine Deployer" que has creado.
En el caso de las entidades que despliegan servicios de App Engine, asigna el rol
iam.serviceAccountTokenCreator
a la cuenta de servicio "Desplegador de App Engine" que has creado. Para saber cómo hacerlo, consulta el artículo Conceder o revocar un solo rol de la documentación de Gestión de Identidades y Accesos.
Limitar el acceso a colas concretas
Si tienes varias colas en un proyecto y quieres limitar el acceso a colas concretas, puedes usar políticas de gestión de identidades y accesos 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
Haz los cambios siguientes:
QUEUE_NAME
: el nombre de tu colaLOCATION
: la ubicación de tu colaPROJECT_ID
: el ID de tu proyecto
Siguientes pasos
- Cuentas de servicio
- Comprender las cuentas de servicio
- Gestionar acceso a proyectos, carpetas y organizaciones
- Crear y gestionar cuentas de servicio
- Usar la suplantación de identidad de cuenta de servicio