arrow_back

Implementação de vinculações de políticas do IAM de privilégio mínimo no Cloud Run [APPRUN]

Acesse mais de 700 laboratórios e cursos

Implementação de vinculações de políticas do IAM de privilégio mínimo no Cloud Run [APPRUN]

Laboratório 1 hora universal_currency_alt 5 créditos show_chart Introdutório
info Este laboratório pode incorporar ferramentas de IA para ajudar no seu aprendizado.
Acesse mais de 700 laboratórios e cursos

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:

  • IAM
  • Cloud Run

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

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

    Painel de credenciais

  2. 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.
  3. Na página "Escolha uma conta", clique em Usar outra conta. A página de login abre.

    Caixa de diálogo "Escolha uma conta" com a opção "Usar outra conta" destacada

  4. 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).
  1. 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. Menu do console do Cloud

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.

  1. No console do Cloud, clique no botão "Abrir o Cloud Shell" na barra de ferramentas superior direita.

    Ícone do Cloud Shell em destaque

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

ID do projeto em destaque no terminal do Cloud Shell

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.

  1. Ative a API Cloud Run

    gcloud services enable run.googleapis.com
  2. Crie uma variável de ambiente "LOCATION":

    LOCATION={{{project_0.default_region|REGION}}}
  3. 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.

  1. 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
  2. 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")
  3. 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.
  4. Clique em Cloud Run no Menu de navegação (navmenu) do console do Google Cloud.

  5. Clique no link para o billing-service.

  6. Clique em Registros para visualizar os registros de serviço.

  7. Adicione o filtro de registros minBalance para visualizar o saldo mínimo recebido na solicitação feita ao serviço.

  8. Para voltar à página de detalhes do serviço, clique em <- Detalhes do serviço.

  9. Selecione o billing-service marcando a caixa à esquerda da marca de verificação verde.

    A página do Cloud Run, que inclui o serviço de faturamento selecionado.

    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.

    O diagrama do Quickway Parking, em que o serviço de faturamento é acessível publicamente.

    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:

Diagrama do estacionamento Quickway, em que o serviço de faturamento exige autenticação.

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:

  1. Exclua o serviço implantado atual:

    gcloud run services delete billing-service
  2. Se for solicitado, digite Y e pressione Enter.

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

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

  1. No Menu de navegação (navmenu) do console do Google Cloud, selecione IAM e administrador > Contas de serviço.

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

  3. Nomeie a conta de serviço: Billing Initiator.

    Página Criar conta de serviço com o botão Criar e continuar destacado.

  4. Para criar a conta, clique em Criar e continuar e avance para a etapa Conceder acesso.

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

    O botão Continuar destacado.

  6. 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 recém-criada listada, juntamente com o status e a descrição.

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.

  1. No menu do terminal do Cloud Shell, abra um novo shell em uma guia separada clicando em Adicionar (adicionar).

    Execute os comandos restantes desta tarefa nesta janela do Cloud Shell.

  2. 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
  3. 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")
  4. 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}
  5. 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

  1. 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}'
  2. No Menu de navegação (navmenu) do console do Google Cloud, clique em Cloud Run.

  3. Clique no link para o billing-service.

  4. Clique em Registros para visualizar os registros de serviço.

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

Diagrama de requisitos mostrando o acesso a um segundo serviço de faturamento interno.

Implantar um segundo serviço

  1. Abra uma terceira janela ou guia do terminal do Cloud Shell.

  2. Crie uma variável de ambiente "LOCATION":

    LOCATION={{{project_0.default_region|REGION}}}
  3. 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
  4. 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

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

  1. Mude para a primeira janela do terminal do Cloud Shell.

  2. 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
  3. 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
  4. 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

  1. Volte para a segunda janela ou guia do terminal do Cloud Shell.

  2. 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.
  1. Mude para a terceira janela do terminal do Cloud Shell.

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

Antes de começar

  1. Os laboratórios criam um projeto e recursos do Google Cloud por um período fixo
  2. Os laboratórios têm um limite de tempo e não têm o recurso de pausa. Se você encerrar o laboratório, vai precisar recomeçar do início.
  3. No canto superior esquerdo da tela, clique em Começar o laboratório

Usar a navegação anônima

  1. Copie o nome de usuário e a senha fornecidos para o laboratório
  2. Clique em Abrir console no modo anônimo

Fazer login no console

  1. Faça login usando suas credenciais do laboratório. Usar outras credenciais pode causar erros ou gerar cobranças.
  2. Aceite os termos e pule a página de recursos de recuperação
  3. Não clique em Terminar o laboratório a menos que você tenha concluído ou queira recomeçar, porque isso vai apagar seu trabalho e remover o projeto

Este conteúdo não está disponível no momento

Você vai receber uma notificação por e-mail quando ele estiver disponível

Ótimo!

Vamos entrar em contato por e-mail se ele ficar disponível

Um laboratório por vez

Confirme para encerrar todos os laboratórios atuais e iniciar este

Use a navegação anônima para executar o laboratório

Para executar este laboratório, use o modo de navegação anônima ou uma janela anônima do navegador. Isso evita conflitos entre sua conta pessoal e a conta de estudante, o que poderia causar cobranças extras na sua conta pessoal.