Esta página traz sugestões para proteger a criação e configuração de filas. A chave é restringir os métodos de gerenciamento de filas a um pequeno conjunto de pessoas ou entidades. Para grandes organizações, pode ser necessário usar uma conta de serviço para executar o software que impõe a configuração adequada da fila.
A ideia geral é separar usuários e outras entidades em três categorias:
- Administradores de filas: os usuários neste grupo têm permissão para chamar métodos de gerenciamento de filas do Cloud Tasks ou fazer upload de arquivos
queue.yaml
. Esse grupo é restrito a um conjunto muito pequeno de usuários, a fim de reduzir o risco de destruição da configuração da fila, misturando inadvertidamente os métodos de gerenciamento de filasqueue.yaml
e Cloud Tasks. - Workers do Cloud Tasks: os usuários deste grupo têm permissão para realizar interações comuns com o Cloud Tasks, como tarefas de enfileiramento e desenfileiramento. Eles não tem permissão para chamar os métodos de gerenciamento de filas do Cloud Tasks.
- Implantadores do App Engine: para projetos que têm aplicativos do App Engine, os usuários deste grupo têm permissão para implantar o aplicativo. Eles não têm permissão para fazer upload de arquivos
queue.yaml
ou fazer chamadas de API Cloud Tasks, permitindo, assim, que os administradores da fila apliquem as políticas adequadas.
Nesse esquema, os usuários que são administradores de filas não são também trabalhadores do Cloud Tasks, já que isso anularia a finalidade da separação.
Se o projeto usa exclusivamente métodos de gerenciamento de filas do Cloud Tasks, talvez os administradores de filas também não devam ser implantadores do App Engine, já que isso permite o upload de um arquivo queue.yaml
incorreto.
Pequenos projetos e organizações
Os pequenos projetos e organizações podem atribuir papéis do gerenciamento de identidade e acesso (IAM, na sigla em inglês) diretamente aos usuários para inseri-los nos grupos acima. Isso faz sentido para as equipes que preferem a simplicidade de configuração ou que fazem mudanças de configuração de filas ou implantações manuais de aplicativos do App Engine.
Adicione usuários a esses grupos da seguinte maneira:
Administrador de filas
Como administrador do projeto, conceda o papel
cloudtasks.queueAdmin
aos usuários que têm permissão para fazer chamadas de API de gerenciamento de filas do Cloud Tasks ou fazer upload de arquivosqueue.yaml
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member user:EMAIL \ --role roles/cloudtasks.queueAdmin
Substitua:
PROJECT_ID
: ID do projetoEMAIL
: o e-mail do usuário membro
Como um usuário com o papel
cloudtasks.queueAdmin
, seguindo as práticas recomendadas acima, escolha um dos seguintes métodos para alterar a configuração da fila.Altere a configuração da fila com a API Cloud Tasks.
Faça upload de
queue.yaml
comgcloud
:gcloud app deploy queue.yaml
Worker do Cloud Tasks
Como geralmente há muitos usuários autorizados a interagir com o Cloud Tasks, é possível atribuir papéis a contas de serviço em vez de usuários individuais. Esse tipo de uso é comum na produção. Para mais informações, consulte Grandes projetos e organizações.
Como administrador do projeto, atribua papéis aos usuários que têm permissão para interagir com o Cloud Tasks, mas não podem alterar a configuração de filas:
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
Substitua
PROJECT_ID
pelo ID do seu projeto.
Um usuário com um ou mais dos papéis acima poderá interagir com a API Cloud Tasks.
Implantador do App Engine
Como administrador do projeto, atribua papéis aos usuários que têm permissão para implantar aplicativos do App Engine, mas que não têm permissão para modificar a configuração de filas ou interagir com tarefas:
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
Substitua:
PROJECT_ID
: ID do projetoEMAIL
: o e-mail do usuário membro
Como um usuário com os papéis atribuídos acima, implante um aplicativo do App Engine.
gcloud app deploy app.yaml
Grandes projetos e organizações
Grandes projetos e organizações podem usar contas de serviço para separar tarefas e responsabilidades. Isso é útil para equipes que usam uma infraestrutura complexa para alterar a configuração de filas e, talvez, implantar aplicativos do App Engine.
Para seguir o princípio de privilégio mínimo e simplificar o gerenciamento de acesso, estas instruções usam representação de conta de serviço. Para saber mais sobre isso, padrão, consulte Usar a representação da conta de serviço na documentação de autenticação do Google Cloud.
Veja a seguir as instruções para configurar essas contas de serviço.
Administrador de filas
Como administrador do projeto, crie a conta de serviço.
gcloud iam service-accounts create queue-admin \ --display-name "Queue Admin"
Conceda o papel
cloudtasks.queueAdmin
à conta de serviço para que ela possa fazer upload de arquivos dequeue.yaml
e fazer chamadas de API de gerenciamento de filas do Cloud Tasks.gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudtasks.queueAdmin
Substitua
PROJECT_ID
pelo ID do seu projeto.Permita seletivamente a representação da conta de serviço "Administrador da fila" que você criou.
Geralmente deve ser um pequeno grupo de principais que atuam como fila administradores. Conceda a esses principais o
iam.serviceAccountTokenCreator
em "Administrador de filas" conta de serviço que você criou. Para saber como, consulte Conceder ou revogar um único papel na documentação do IAM.Seguir as práticas recomendadas descritas em Use o gerenciamento de filas ou o arquivo "queue.yaml", escolha uma métodos a seguir para alterar a configuração de filas:
Use o Cloud Tasks para alterar a configuração da fila.
Fazer upload de
queue.yaml
com a CLI gcloud
Worker do Cloud Tasks
Como administrador do projeto, crie a conta de serviço.
gcloud iam service-accounts create cloud-tasks-worker \ --display-name "Cloud Tasks Worker"
Atribua papéis à conta de serviço para possibilitar a interação com o Cloud Tasks, mas não a alteração da configuração de filas.
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
Substitua
PROJECT_ID
pelo ID do seu projeto.Permita seletivamente a representação da conta de serviço "Cloud Tasks Worker" que você criou.
Para os principais que interagem com o Cloud Tasks, conceda o
iam.serviceAccountTokenCreator
no "Cloud Tasks Worker" conta de serviço que você criou. Para saber como, consulte Conceder ou revogar um único papel na documentação do IAM.
Implantador do App Engine
Como administrador do projeto, crie a conta de serviço.
gcloud iam service-accounts create app-engine-deployer \ --display-name "App Engine Deployer"
Conceda papéis à conta de serviço para que ela possa implantar aplicativos do App Engine, mas não
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
Substitua
PROJECT_ID
pelo ID do seu projeto.Permita seletivamente a falsificação da conta de serviço "Implantador do App Engine" criada por você.
Para principais que implantam serviços do App Engine, conceda o
iam.serviceAccountTokenCreator
no "Implantador do App Engine" conta de serviço que você criou. Para saber como, consulte Conceder ou revogar um único papel na documentação do IAM.
Como limitar o acesso a filas únicas
Se você tiver várias filas em um projeto e quiser limitar o acesso a determinadas
as filas, use as políticas do IAM no nível da fila em vez de
no nível do projeto. Para limitar o acesso por fila, use o comando
gcloud tasks queues add-iam-policy-binding
. Exemplo:
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
Substitua:
QUEUE_NAME
: o nome da filaLOCATION
: o local da filaPROJECT_ID
: ID do projeto
A seguir
- Contas de serviço
- Como entender as contas de serviço
- Gerenciar o acesso a projetos, pastas e organizações
- Como criar e gerenciar contas de serviço
- Usar a representação da conta de serviço