Configuração de fila segura

Nesta página, você encontra sugestões para proteger a criação e a 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:

  1. 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 filas queue.yaml e Cloud Tasks.
  2. 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.
  3. 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

  1. 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 arquivos queue.yaml.

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

    Substitua:

    • PROJECT_ID: ID do projeto
    • EMAIL: o e-mail do usuário participante.
  2. 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.

    1. Altere a configuração da fila com a API Cloud Tasks.

    2. Faça upload de queue.yaml com gcloud:

      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.

  1. 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

  1. 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 projeto
    • EMAIL: o e-mail do usuário participante.
  2. 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 a representação de conta de serviço. Para saber mais sobre esse padrão, consulte Usar a representação de 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

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

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
    
  2. Conceda o papel cloudtasks.queueAdmin à conta de serviço para que ela possa fazer upload de arquivos de queue.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.

  3. Permita seletivamente a representação da conta de serviço "Administrador de filas" que você criou.

    Geralmente, é um pequeno grupo de principais que atuam como administradores de fila. Conceda a esses principais o papel iam.serviceAccountTokenCreator na conta de serviço "Administrador de fila" que você criou. Para saber como fazer isso, consulte Conceder ou revogar um único papel na documentação do IAM.

  4. Seguindo as práticas recomendadas descritas em Usar o gerenciamento de filas ou o arquivo enfileir.yaml, escolha um dos métodos a seguir para alterar a configuração da fila:

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

    • Fazer upload de queue.yaml com a CLI gcloud

Worker 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. 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.

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

    Para principais que interagem com o Cloud Tasks, conceda o papel iam.serviceAccountTokenCreator na conta de serviço "Worker do Cloud Tasks" que você criou. Para saber como, consulte Conceder ou revogar um único papel na documentação do IAM.

Implantador do App Engine

  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 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.

  3. Permita seletivamente a representação da conta de serviço do "Implantador do App Engine" que você criou.

    Para os principais que implantam serviços do App Engine, conceda o papel iam.serviceAccountTokenCreator na conta de serviço do "Implantador do App Engine" 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 filas individuais, use as políticas do IAM no nível da fila, em vez do 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 fila.
  • LOCATION: o local da fila.
  • PROJECT_ID: ID do projeto

A seguir