2
respostas

Access control

Como restringir acesso a aplicação web (gcloud run deploy) a determinados emails? i.e. usuários autenticados (browser).

2 respostas

Olá!

Excelente pergunta. A sua dúvida é muito relevante para a segurança de aplicações no Cloud Run. É algo que não se faz diretamente no comando gcloud run deploy, mas sim usando o sistema de controle de acesso do Google Cloud, o IAM (Identity and Access Management).

Para restringir o acesso a determinados e-mails em uma aplicação do Cloud Run, você precisa seguir este fluxo:

Configurar a autenticação da aplicação:
A sua aplicação precisa ser configurada para receber requisições com um token de autenticação, como um ID token do Google. A aplicação então valida esse token para garantir que a requisição veio de um usuário autenticado.

Gerenciar permissões no IAM:
A parte de "restringir a determinados e-mails" é feita diretamente no IAM. O Cloud Run usa o IAM para controlar quem pode invocar (invoke) a sua aplicação.

No console do Google Cloud, navegue até a página do Cloud Run.

Selecione o serviço que você quer restringir.

Vá até a aba Permissões ou Membros (depende da versão do console).

Clique em Adicionar (ou Adicionar Membro).

Adicione os e-mails dos usuários que você quer dar acesso.

Atribua a eles o papel de Invocador do Cloud Run (roles/run.invoker).

Muito importante: Remova a permissão de allUsers ou allAuthenticatedUsers, caso ela exista. Isso torna a aplicação pública.

Depois de fazer isso, apenas os e-mails que você adicionou no IAM com o papel de Invocador do Cloud Run terão permissão para acessar a sua URL do serviço. O Google Cloud fará a autenticação do usuário e, se o e-mail não tiver a permissão, a requisição será negada antes mesmo de chegar à sua aplicação.

Se você precisa de um nível de granularidade ainda maior, você pode usar o IAP (Identity-Aware Proxy). O IAP é um serviço que funciona como um gateway de autenticação para as suas aplicações, permitindo que você restrinja o acesso a um grupo de e-mails, um domínio, ou até mesmo um grupo de segurança.

A solução mais simples para o seu caso é usar o IAM, como eu descrevi acima.

Espero que essa explicação ajude a resolver a sua dúvida!

Prezado João
Primeiramente, agradeço bastante dedicar tempo para com detalhes úteis compartilhar essa abordagem.
Valeu.
A seguir, breve resumo.

  • hoje, mesmo sem allusers e concedendo roles/run.invoker ao email user90@domain.com, ele não consegue chegar na url (403!)
  • via curl no shell é possível, justamente gerando o token que mencionaste
  • o que considero é como permitir ao usuário uma experiência de navegação sem ter que incluir token a cada request.

outro aspecto ainda

  • qual seria o arg da url?
  • aparentemente "identity-token" é passado como header
  • mas usuários, como poderiam fazer configurações configurando header? não é natural.

IAP

  • chegamos nessa abordagem
  • todavia, somente vale para projetos atrelados a organização!
  • aparentemente, not useful for learning experience