Visão geral
O princípio do privilégio mínimo estabelece que um recurso deve ter acesso apenas ao conjunto exato de recursos necessários para funcionar. Por exemplo, se um serviço estiver fazendo um backup automatizado de banco de dados, ele deve ter permissões somente leitura para apenas um banco de dados. Da mesma forma, se um serviço for responsável apenas por criptografar dados, ele não deverá ter permissões para descriptografar dados.
No Cloud Run, se um serviço for implantado sem especificar uma conta, será usada uma conta de serviço padrão. A conta de serviço padrão usada é a conta do Compute Engine, que tem o papel amplo de Editor no projeto. Devido à herança de vinculação de políticas, essa conta de serviço tem permissões de leitura e gravação na maioria dos recursos do seu projeto. Apesar de ser conveniente, representa um risco de segurança, já que os recursos podem ser criados, modificados ou excluídos usando essa conta de serviço.
Para reduzir o risco e implementar o princípio do menor privilégio, você deve criar uma conta que sirva como identidade do serviço e conceder o conjunto mínimo de permissões necessárias para a funcionalidade do serviço.
Objetivos
Neste laboratório, você vai aprender a:
- Configurar o ambiente e ativar a API Cloud Run.
- Criar e implantar um serviço público do Cloud Run.
- Testar o serviço com solicitações não autenticadas.
- Criar uma conta de serviço com permissões mínimas.
- Usar a gcloud CLI para autenticar usando a conta de serviço e invocar um serviço do Cloud Run.
- Implementar o princípio de privilégio mínimo concedendo o conjunto de permissões necessárias para invocar um serviço no Cloud Run.
Pré-requisitos
Esses laboratórios exigem conhecimento intermediário do Google Cloud. Embora as etapas necessárias sejam abordadas no conteúdo, é útil ter familiaridade com qualquer um dos seguintes produtos:
Configuração e requisitos
Antes de clicar no botão "Começar o laboratório"
Importante: leia estas instruções.
Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático do Qwiklabs permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você receberá novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
O que é necessário
Veja os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome)
- Tempo disponível para concluir as atividades
Observação: não use seu projeto ou conta pessoal do Google Cloud neste laboratório.
Observação: se você estiver usando um Pixelbook, faça o laboratório em uma janela anônima.
Como começar o laboratório e fazer login no console
-
Clique no botão Começar o laboratório. Se for preciso pagar pelo laboratório, você verá um pop-up para selecionar a forma de pagamento.
Um painel aparece à esquerda contendo as credenciais temporárias que você precisa usar no laboratório.

-
Copie o nome de usuário e clique em Abrir console do Google.
O laboratório ativa os recursos e depois abre a página Escolha uma conta em outra guia.
Observação: abra as guias em janelas separadas, lado a lado.
-
Na página "Escolha uma conta", clique em Usar outra conta. A página de login abre.

-
Cole o nome de usuário que foi copiado do painel "Detalhes da conexão". Em seguida, copie e cole a senha.
Observação: é necessário usar as credenciais do painel "Detalhes da conexão". Não use suas credenciais do Google Cloud Ensina. Não use sua conta pessoal do Google Cloud, caso tenha uma neste laboratório (isso evita cobranças).
- Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Cloud abre nesta guia.
Observação: para acessar a lista dos produtos e serviços do Google Cloud, clique no Menu de navegação no canto superior esquerdo.
Ative o Google Cloud Shell
O Google Cloud Shell é uma máquina virtual com ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud.
O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
-
No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

-
Clique em Continuar.
O provisionamento e a conexão do ambiente podem demorar um pouco. Quando você estiver conectado, já estará autenticado, e o projeto estará definido com seu PROJECT_ID. Exemplo:

A gcloud é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- Para listar o nome da conta ativa, use este comando:
gcloud auth list
Saída:
Credentialed accounts:
- @.com (active)
Exemplo de saída:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Para listar o ID do projeto, use este comando:
gcloud config list project
Saída:
[core]
project =
Exemplo de saída:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Observação:
a documentação completa da gcloud está disponível no
guia com informações gerais sobre a gcloud CLI
.
Tarefa 1: configurar o ambiente
Configurar variáveis de ambiente no Cloud Shell para tornar o processo de provisionamento mais flexível.
-
Ative a API Cloud Run
gcloud services enable run.googleapis.com
-
Crie uma variável de ambiente "LOCATION":
LOCATION={{{project_0.default_region|REGION}}}
-
Defina a região padrão do Cloud Run:
gcloud config set run/region $LOCATION
Tarefa 2: criar e implantar um serviço público
Requisitos
A Quickway Parking tem um serviço de faturamento do Cloud Run que precisa ser mais seguro. Nessa tarefa, você vai:
- Implantar o serviço de faturamento de uma imagem.
- Testar o serviço ao invocá-lo sem nenhuma autenticação.
Como implantar com o Cloud Run
A equipe de desenvolvimento da Quickway já tem uma imagem do aplicativo de faturamento disponível no Google Cloud.
-
Implante a imagem do aplicativo de faturamento no Cloud Run:
gcloud run deploy billing-service \
--image gcr.io/qwiklabs-resources/gsp723-parking-service \
--region $LOCATION \
--allow-unauthenticated
-
Atribua o URL do novo serviço a uma variável de ambiente:
BILLING_SERVICE_URL=$(gcloud run services list \
--format='value(URL)' \
--filter="billing-service")
-
Invoque o serviço sem autorização:
curl -X POST -H "Content-Type: application/json" $BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 100}'
O serviço não gera nenhuma saída quando invocado.
-
Clique em Cloud Run no Menu de navegação (
) do console do Google Cloud.
-
Clique no link para o billing-service.
-
Clique em Registros para visualizar os registros de serviço.
-
Adicione o filtro de registros minBalance
para visualizar o saldo mínimo recebido na solicitação feita ao serviço.
-
Para voltar à página de detalhes do serviço, clique em <- Detalhes do serviço.
-
Selecione o billing-service marcando a caixa à esquerda da marca de verificação verde.

A equipe de segurança notou algo nas configurações do sistema. Você consegue identificar qual parte da configuração causou essa preocupação?
Analise mais de perto a autenticação aplicada. Atualmente, qualquer pessoa na Internet pode chamar o serviço de faturamento. Isso é indicado pela identidade allUsers que tem o papel de Invocador do Cloud Run.

A permissão --allow-unauthenticated
, foi implantada no início do serviço de faturamento, o que significa que ele é acessível publicamente e pode ser invocado sem qualquer autenticação.
Tipo |
Permissão |
Descrição |
Acesso ao URL |
--allow-unauthenticated |
Torna o serviço acessível ao público (usuários não autenticados podem acessá-lo). |
Principal de invocação |
allUsers |
Permite que o serviço seja invocado/acionado por qualquer pessoa. |
Ao remover --allow-unauthenticated
, você pode usar as permissões padrão do Cloud Run para proteger o serviço ou especificar explicitamente a permissão no-allow-unauthenticated
.
Tipo |
Permissão |
Descrição |
Acesso ao URL |
--no-allow-unauthenticated |
Protege o serviço com autenticação (apenas usuários autenticados podem acessá-lo). |
Principal de invocação |
nenhum |
Não permite que o serviço seja invocado/acionado por qualquer pessoa. |
Observação:lembre-se de que, no Google Cloud, você sempre deve tentar usar permissões de privilégio mínimo na sua solução.
Ao fazer essas mudanças, a equipe de segurança ficará muito mais satisfeita com o design geral.
Clique em Verificar meu progresso para conferir a tarefa realizada.
Implantar um serviço público do Cloud Run
Tarefa 3: autenticação de solicitações de serviço
A equipe atualiza o design do aplicativo para mostrar como as mudanças vão funcionar:

As principais mudanças são:
- Remoção do acesso público não autenticado para o serviço de faturamento.
- Criação de uma conta de serviço com as permissões adequadas para invocar o serviço de faturamento.
Atualizar o serviço para exigir autenticação
Agora que você entende melhor as permissões usadas com o Cloud Run, corrija as permissões de autenticação aplicadas ao serviço de faturamento:
-
Exclua o serviço implantado atual:
gcloud run services delete billing-service
-
Se for solicitado, digite Y e pressione Enter.
-
Reimplante o serviço de faturamento com a permissão --no-allow-authenticated
:
gcloud run deploy billing-service \
--image gcr.io/qwiklabs-resources/gsp723-parking-service \
--region $LOCATION \
--no-allow-unauthenticated
Ao reimplantar o serviço, ele não permite mais o acesso não autenticado no URL do serviço. E a permissão de acesso para invocar o serviço foi removida.
-
Aguarde alguns segundos e invoque o serviço de faturamento novamente como antes:
curl -X POST -H "Content-Type: application/json" $BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 100}'
Como esperado, a saída é um erro de permissões, porque o serviço agora exige autenticação.
Criar uma conta de serviço
Para invocar o serviço de faturamento, você vai precisar de uma identidade ou conta de serviço com as permissões apropriadas e vincular essa identidade ao serviço.
Isso pode ser feito no console do Google Cloud ou com a interface de linha de comando gcloud. Neste laboratório, você vai usar o console do Google Cloud para criar a conta de serviço e configurar a nova vinculação de política para o serviço de faturamento.
-
No Menu de navegação (
) do console do Google Cloud, selecione IAM e administrador > Contas de serviço.
-
Para criar uma nova conta de serviço que vai fornecer acesso autenticado, clique em Criar conta de serviço perto da parte de cima.
-
Nomeie a conta de serviço: Billing Initiator
.

-
Para criar a conta, clique em Criar e continuar e avance para a etapa Conceder acesso.
-
Para dar permissões à conta de serviço Billing Initiator e invocar o serviço de faturamento, selecione o menu suspenso Papel, role a barra lateral esquerda até Cloud Run
e selecione o papel Invocador do Cloud Run
.

-
Para concluir a configuração da conta de serviço, clique em Continuar e depois em Concluído.
A nova conta de serviço vai aparecer na parte de cima da lista de contas de serviço no console.

A conta de serviço Billing Initiator foi criada com a autorização para invocar um serviço do Cloud Run usando uma vinculação de política do IAM no seu projeto.
Clique em Verificar meu progresso para conferir a tarefa realizada.
Criar uma conta de serviço
Tarefa 4: invocar o serviço com autenticação
Agora que você tem uma conta de serviço com a permissão apropriada, pode usá-la para invocar seu serviço do Cloud Run.
Autenticar com a gcloud
A primeira etapa é definir a conta de serviço na gcloud para que ela possa ser usada para autenticar com o serviço.
-
No menu do terminal do Cloud Shell, abra um novo shell em uma guia separada clicando em Adicionar (
).
Execute os comandos restantes desta tarefa nesta janela do Cloud Shell.
-
Receba o e-mail de identidade da conta de serviço e salve-o em uma variável de ambiente:
BILLING_INITIATOR_EMAIL=$(gcloud iam service-accounts list --filter="Billing Initiator" --format="value(EMAIL)"); echo $BILLING_INITIATOR_EMAIL
-
Nesse terminal do Cloud Shell, atribua o URL do serviço de faturamento a uma variável de ambiente:
BILLING_SERVICE_URL=$(gcloud run services list \
--format='value(URL)' \
--filter="billing-service")
-
Para autenticar a gcloud usando a conta de serviço, gere um arquivo de chave:
gcloud iam service-accounts keys create key.json --iam-account=${BILLING_INITIATOR_EMAIL}
-
Autorize o acesso ao Cloud Run com uma conta de serviço:
gcloud auth activate-service-account --key-file=key.json
Invocar o serviço
-
Invoque o serviço de faturamento do Cloud Run com um token de identidade gerado pela conta de serviço:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 500}'
-
No Menu de navegação (
) do console do Google Cloud, clique em Cloud Run.
-
Clique no link para o billing-service.
-
Clique em Registros para visualizar os registros de serviço.
-
Adicione o filtro de registros minBalance
para visualizar o saldo mínimo atualizado recebido na solicitação feita ao serviço.
Clique em Verificar meu progresso para conferir a tarefa realizada.
Invocar um serviço do Cloud Run com autenticação
Tarefa 5: implementar o privilégio mínimo
Você usou uma conta de serviço com as permissões apropriadas para invocar um serviço do Cloud Run que antes era acessível a qualquer pessoa. Mas você usou os privilégios mínimos absolutos necessários para chamar esse serviço específico?
Para determinar se isso é verdade, implante um segundo serviço de faturamento que, presumimos, só deve ser acessível por outros serviços particulares internos, como o Cloud Scheduler.
Confira um diagrama desse requisito:

Implantar um segundo serviço
-
Abra uma terceira janela ou guia do terminal do Cloud Shell.
-
Crie uma variável de ambiente "LOCATION":
LOCATION={{{project_0.default_region|REGION}}}
-
Para simular um segundo serviço, implante a imagem do aplicativo de faturamento no Cloud Run:
gcloud run deploy billing-service-2 \
--image gcr.io/qwiklabs-resources/gsp723-parking-service \
--region $LOCATION \
--no-allow-unauthenticated
-
Atribua o URL do novo serviço a uma variável de ambiente:
BILLING_SERVICE_2_URL=$(gcloud run services list \
--format='value(URL)' \
--filter="billing-service-2")
Invocar o segundo serviço com a identidade da conta de serviço
-
No terceiro terminal do Cloud Shell, autorize o acesso ao Cloud Run com a mesma conta de serviço:
gcloud auth activate-service-account --key-file=key.json
-
Invoque o segundo serviço do Cloud Run com um token de identidade gerado pela conta de serviço:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_2_URL -d '{"userid": "1234", "minBalance": 900}'
Por que isso deu certo? Isso acontece porque, quando você criou a conta de serviço, as permissões de invocador do Cloud Run foram concedidas a essa conta no projeto. A herança faz com que os recursos do projeto, incluindo os dois serviços do Cloud Run, recebam essas permissões, assim, a conta de serviço pode ser usada para invocar os serviços.
Restringir as permissões da conta de serviço
Para implementar totalmente o privilégio mínimo, a conta de serviço só deve receber permissões no serviço de que precisa.
Nesta subtarefa, você vai remover a permissão concedida anteriormente à conta de serviço no projeto e adicionar as permissões apropriadas necessárias para invocar o serviço de faturamento original.
-
Mude para a primeira janela do terminal do Cloud Shell.
-
Neste terminal do Cloud Shell, receba o e-mail de identidade da conta de serviço e salve-o em uma variável de ambiente:
BILLING_INITIATOR_EMAIL=$(gcloud iam service-accounts list --filter="Billing Initiator" --format="value(EMAIL)"); echo $BILLING_INITIATOR_EMAIL
-
Remova a permissão da conta de serviço para o projeto:
gcloud projects remove-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=serviceAccount:${BILLING_INITIATOR_EMAIL} \
--role=roles/run.invoker
-
Adicione a permissão à conta de serviço no serviço de faturamento:
gcloud run services add-iam-policy-binding billing-service --region $LOCATION \
--member=serviceAccount:${BILLING_INITIATOR_EMAIL} \
--role=roles/run.invoker --platform managed
Invocar os serviços
-
Volte para a segunda janela ou guia do terminal do Cloud Shell.
-
Aguarde alguns segundos e invoque o primeiro serviço de faturamento do Cloud Run com um token de identidade gerado pela conta de serviço:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_URL -d '{"userid": "1234", "minBalance": 700}'
A propagação das permissões atualizadas leva alguns segundos. Depois disso, a invocação deve ser bem-sucedida.
-
Mude para a terceira janela do terminal do Cloud Shell.
-
Tente invocar o segundo serviço do Cloud Run com um token de identidade gerado pela mesma conta de serviço:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
$BILLING_SERVICE_2_URL -d '{"userid": "1234", "minBalance": 500}'
Agora você vai receber um erro de permissões indicando que a conta de serviço tem apenas o conjunto mínimo de permissões necessárias para invocar o primeiro serviço.
Clique em Verificar meu progresso para conferir a tarefa realizada.
Usar o princípio do menor privilégio para invocar um serviço do Cloud Run
Parabéns!
Neste laboratório, você aprendeu a reconfigurar um serviço implantado para proteger o acesso a ele e implementou o princípio de privilégio mínimo ao conceder permissões para acessar recursos no Google Cloud. Você:
- Implantou um serviço no Cloud Run.
- Usou a gcloud CLI para atualizar o serviço e exigir autenticação.
- Criou uma conta de serviço com as permissões necessárias para invocar o serviço.
- Definiu as permissões mínimas necessárias para invocar um serviço específico no Cloud Run, implementando o princípio do privilégio mínimo.
Assista a série de vídeos Serverless Expeditions para saber como usar esses produtos no seu projeto.
Finalize o laboratório
Clique em Terminar o laboratório após a conclusão. O Google Cloud Ensina remove os recursos usados e limpa a conta por você.
Você vai poder avaliar sua experiência no laboratório. Basta selecionar o número de estrelas, digitar um comentário e clicar em Enviar.
O número de estrelas indica o seguinte:
- 1 estrela = muito insatisfeito
- 2 estrelas = insatisfeito
- 3 estrelas = neutro
- 4 estrelas = satisfeito
- 5 estrelas = muito satisfeito
Feche a caixa de diálogo se não quiser enviar feedback.
Para enviar seu feedback, fazer sugestões ou correções, use a guia Suporte.
Copyright 2020 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.