En esta página, se proporcionan sugerencias para implementar prácticas recomendadas a fin de proteger la creación y la configuración de colas, lo que incluye minimizar los errores descritos en Usa la administración de colas o queue.yaml. 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.
- 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 inadvertidamentequeue.yaml
y los métodos de administración de colas de Cloud Tasks. - 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.
- 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
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 archivosqueue.yaml
.gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member user:[EMAIL] \ --role roles/cloudtasks.queueAdmin
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.Usar la API de Cloud Tasks para cambiar la configuración de las colas
Sube
queue.yaml
congcloud
: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.
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
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
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
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.
Por lo general, las instrucciones a continuación son adecuadas cuando la configuración de la cola y la interacción con Cloud Tasks, y la posible implementación de la aplicación de App Engine, se realizan directamente a través de un software. Esto también permite proteger la configuración de las colas sin necesidad de que todos los miembros del equipo comprendan el contenido de esta página.
Por ejemplo, puedes crear una aplicación web o una herramienta de línea de comandos que todos los usuarios deban emplear para crear, actualizar y borrar colas. Si esa herramienta usa métodos de administración de colas de Cloud Tasks o queue.yaml
es un detalle de implementación de la herramienta por el que los usuarios no deben preocuparse. Si la herramienta es la única entidad en el grupo de administradores de colas, puedes garantizar que nadie mezclará por error los métodos de administración de colas de Cloud Tasks y el uso de queue.yaml
.
A continuación, se brindan instrucciones para configurar estas cuentas de servicio.
Administrador de colas
Como administrador del proyecto, crea la cuenta de servicio.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
Otorga la función
cloudtasks.queueAdmin
a la cuenta de servicio para que pueda subir archivosqueue.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
Otorga la función
iam.serviceAccountActor
a usuarios humanos, grupos y otras entidades que pueden cambiar la configuración de la cola. Debería ser un número muy reducido de personas (p. ej., los administradores) con permiso para responder en caso de emergencia.gcloud iam service-accounts add-iam-policy-binding \ queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
Crea una clave de cuenta de servicio de modo que un usuario humano o alguna otra entidad puedan asumir la identidad de la cuenta de servicio.
gcloud iam service-accounts keys create \ --iam-account queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ ~/queue-admin-service-account-key.json
Como usuario o entidad de otro tipo con la función
iam.serviceAccountActor
, supone la identidad de la cuenta de servicio.gcloud auth activate-service-account queue-admin@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/queue-admin-service-account-key.json
Sigue las prácticas recomendadas anteriores y selecciona solo 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
congcloud
:gcloud app deploy queue.yaml
Trabajador de Cloud Tasks
Como administrador del proyecto, crea la cuenta de servicio.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
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
Otorga la función
iam.serviceAccountActor
a usuarios humanos, grupos y otras entidades que pueden usar la API de Cloud Tasks en tu proyecto.gcloud iam service-accounts add-iam-policy-binding \ cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
Crea una clave de cuenta de servicio de modo que un usuario humano o alguna otra entidad puedan asumir la identidad de la cuenta de servicio.
gcloud iam service-accounts keys create \ --iam-account cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ ~/cloud-tasks-worker-service-account-key.json
Como usuario o entidad de otro tipo con la función
iam.serviceAccountActor
, supone la identidad de la cuenta de servicio.gcloud auth activate-service-account cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/cloud-tasks-worker-service-account-key.json
Usa la API de Cloud Tasks.
Implementador de App Engine
Como administrador del proyecto, crea la cuenta de servicio.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
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
Otorga la función
iam.serviceAccountActor
a usuarios humanos, grupos y otras entidades que pueden implementar la aplicación de App Engine.gcloud iam service-accounts add-iam-policy-binding \ app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --member user:[EMAIL] \ --role roles/iam.serviceAccountActor
Crea una clave de cuenta de servicio de modo que un usuario humano o alguna otra entidad puedan asumir la identidad de la cuenta de servicio.
gcloud iam service-accounts keys create \ --iam-account app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ ~/app-engine-deployer-service-account-key.json
Como usuario o entidad de otro tipo con la función
iam.serviceAccountActor
, supone la identidad de la cuenta de servicio.gcloud auth activate-service-account app-engine-deployer@[PROJECT_ID].iam.gserviceaccount.com \ --key-file ~/app-engine-deployer-service-account-key.json
Implementa la aplicación de App Engine.
gcloud app deploy app.yaml
Limita el acceso a colas únicas
Para limitar el acceso por cola, usa el comando gcloud tasks queues add-iam-policy-binding
que especifica la cola mediante el argumento QUEUE. Por ejemplo, para una cola llamada my-queue
, sucede lo siguiente:
gcloud tasks queues add-iam-policy-binding my-queue --location=my-location \
--member=serviceAccount:cloud-tasks-worker@[PROJECT_ID].iam.gserviceaccount.com \
--role=roles/cloudtasks.enqueuer
Más información sobre las cuentas de servicio
Para obtener una explicación completa de las cuentas de servicio, consulta las siguientes páginas:
- Cuentas de servicio
- Comprende la cantidad de perfiles de servicios
- Administra el acceso a proyectos, carpetas y organizaciones
- Crea y administra cuentas de servicio