Configuração segura da fila

Esta página fornece sugestões para proteger a criação e a configuração de filas. A chave é restringir os métodos de gestão de filas a um pequeno conjunto de pessoas ou entidades. Para organizações de grande dimensão, pode ser necessário usar uma conta de serviço para executar software que aplique a configuração adequada da fila.

A ideia geral é separar os utilizadores e outras entidades em três categorias:

  1. Administradores de filas: os utilizadores neste grupo têm autorização para chamar métodos de gestão de filas do Cloud Tasks ou carregar ficheiros queue.yaml. Este grupo está restrito a um conjunto muito pequeno de utilizadores para reduzir o risco de danificar a configuração da fila, especialmente ao misturar inadvertidamente os métodos de gestão de filas do queue.yaml e do Cloud Tasks.
  2. Trabalhadores do Cloud Tasks: os utilizadores neste grupo têm autorização para realizar interações comuns com o Cloud Tasks, como colocar tarefas em fila e retirar tarefas da fila. Não têm autorização para chamar métodos de gestão de filas do Cloud Tasks.
  3. Implementadores do App Engine: para projetos que tenham apps do App Engine, os utilizadores neste grupo têm autorização para implementar a app. Não têm autorização para carregar ficheiros queue.yaml nem fazer chamadas API Cloud Tasks, o que permite aos administradores da fila aplicar as políticas adequadas.

Neste esquema, os utilizadores que são administradores de filas não devem ser também trabalhadores do Cloud Tasks, uma vez que isso anularia o objetivo da separação.

Se o seu projeto usar exclusivamente métodos de gestão de filas do Cloud Tasks, também pode fazer sentido que os administradores de filas não sejam também implementadores do App Engine, uma vez que isto permitiria o carregamento de um ficheiro queue.yaml incorreto.

Pequenos projetos e organizações

As pequenas organizações e projetos podem atribuir funções de gestão de identidade e acesso (IAM) diretamente aos utilizadores para os colocar nos grupos acima. Isto faz sentido para as equipas que preferem a simplicidade de configuração ou que fazem alterações de configuração da fila ou implementações de apps do App Engine manualmente.

Adicione utilizadores a estes grupos da seguinte forma:

Administrador de filas

  1. Como administrador do projeto, conceda a função cloudtasks.queueAdmin aos utilizadores que têm autorização para fazer chamadas API de gestão de filas do Cloud Tasks ou carregar ficheiros queue.yaml.

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

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • EMAIL: o email do utilizador membro
  2. Como utilizador com a função cloudtasks.queueAdmin, seguindo as práticas recomendadas acima, escolha um dos seguintes métodos para alterar a configuração da fila.

    1. Use a API Cloud Tasks para alterar a configuração da fila.

    2. Carregue queue.yaml com gcloud:

      gcloud app deploy queue.yaml

Trabalhador do Cloud Tasks

Uma vez que existem frequentemente muitos utilizadores autorizados a interagir com o Cloud Tasks, pode atribuir funções a contas de serviço em vez de a utilizadores individuais. Este tipo de utilização é comum na produção. Para mais informações, consulte o artigo Projetos e organizações de grande dimensão.

  1. Como administrador do projeto, conceda funções aos utilizadores que têm autorização para interagir com o Cloud Tasks, mas não para alterar a configuração da fila:

    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.

Enquanto utilizador com uma ou mais das funções concedidas acima, pode interagir com a API Cloud Tasks.

App Engine Deployer

  1. Como administrador do projeto, conceda funções aos utilizadores que têm autorização para implementar apps do App Engine, mas não têm autorização para modificar a configuração da fila nem 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto
    • EMAIL: o email do utilizador membro
  2. Como utilizador com as funções concedidas acima, implemente uma app do App Engine.

    gcloud app deploy app.yaml

Projetos e organizações de grande dimensão

As organizações e os projetos de grande dimensão podem usar contas de serviço para separar funções e responsabilidades. Isto faz sentido para equipas com uma infraestrutura complexa para alterar a configuração da fila e, talvez, também implementar apps do App Engine.

Para seguir o princípio do menor privilégio e simplificar a gestão de acesso, estas instruções usam a representação da conta de serviço. Para saber mais sobre este padrão, consulte o artigo Use a simulação da conta de serviço na Google Cloud documentação de autenticação.

Seguem-se as instruções para configurar estas contas de serviço.

Administrador de filas

  1. Como administrador do projeto, crie a conta de serviço.

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
  2. Conceda a função cloudtasks.queueAdmin à conta de serviço para que possa carregar ficheiros queue.yaml e fazer chamadas à API de gestão 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.

  3. Permitir seletivamente a representação da conta de serviço "Queue Admin" que criou.

    Normalmente, deve ser um pequeno grupo de diretores que atuam como administradores da fila. Conceda a estes responsáveis a função iam.serviceAccountTokenCreator na conta de serviço "Administrador da fila" que criou. Para saber como, consulte o artigo Conceda ou revogue uma única função na documentação da IAM.

  4. Seguindo as práticas recomendadas descritas em Use a gestão de filas ou o queue.yaml, escolha um dos seguintes métodos para alterar a configuração da fila:

    • Use o Cloud Tasks para alterar a configuração da fila.

    • Carregue queue.yaml com a CLI gcloud

Trabalhador do Cloud Tasks

  1. Como administrador do projeto, crie a conta de serviço.

    gcloud iam service-accounts create cloud-tasks-worker \
    --display-name "Cloud Tasks Worker"
  2. Conceda funções à conta de serviço para que possa interagir com o Cloud Tasks, mas não alterar a configuração da fila.

    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.

  3. Permitir seletivamente a representação da conta de serviço "Cloud Tasks Worker" que criou.

    Para os principais que interagem com o Cloud Tasks, conceda a função iam.serviceAccountTokenCreator na conta de serviço "Trabalhador do Cloud Tasks" que criou. Para saber como, consulte Conceda ou revogue uma única função na documentação da IAM.

App Engine Deployer

  1. Como administrador do projeto, crie a conta de serviço.

    gcloud iam service-accounts create app-engine-deployer \
    --display-name "App Engine Deployer"
  2. Conceda funções à conta de serviço para que possa implementar apps 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.

  3. Permitir seletivamente a representação da conta de serviço "Implementador do App Engine" que criou.

    Para os principais que implementam serviços do App Engine, conceda a função iam.serviceAccountTokenCreator na conta de serviço "Implementador do App Engine" que criou. Para saber como, consulte Conceda ou revogue uma única função na documentação da IAM.

Limitar o acesso a filas únicas

Se tiver várias filas num projeto e quiser limitar o acesso a filas individuais, pode usar políticas de IAM ao nível da fila em vez de ao nível do projeto. Para limitar o acesso por fila, use o comando gcloud tasks queues add-iam-policy-binding. Por 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 o seguinte:

  • QUEUE_NAME: o nome da sua fila
  • LOCATION: a localização da sua fila
  • PROJECT_ID: o ID do seu projeto

O que se segue?