1. Visão geral
Neste laboratório, você vai implantar o portal de funcionários que permite que eles visualizem, atualizem e excluam pedidos no app Cymbal Eats. Você vai usar o Identity Aware Proxy (IAP) para proteger o acesso ao portal sem usar uma rede privada virtual (VPN). O IAP simplifica a implementação de um modelo de acesso de confiança zero e leva menos tempo do que uma VPN para trabalhadores remotos, tanto no local quanto em ambientes de nuvem, com um único ponto de controle para gerenciar o acesso aos seus apps.
O que é o Identity-Aware Proxy?
O Identity-Aware Proxy (IAP) é um serviço do Google Cloud que intercepta solicitações enviadas ao seu aplicativo, autentica o autor delas por meio do serviço de identidade do Google e só permite a transmissão quando elas vêm de um usuário autorizado a acessar o aplicativo. Além disso, o IAP pode modificar os cabeçalhos da solicitação para incluir informações sobre o usuário autenticado.
O que você vai aprender
- Como configurar um grupo de endpoints de rede sem servidor (NEG)
- Como configurar um balanceador de carga
- Como ativar o IAP para restringir o acesso
- Como restringir o acesso usando o IAP
2. Configuração e requisitos
Configuração de ambiente personalizada
- Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.
- O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google É possível atualizar o local a qualquer momento.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como
PROJECT_ID
. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto. - Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto inteiro. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Configuração do ambiente
- Criar variáveis de ambiente relacionadas a projetos e recursos
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- Ative as APIs do IAP e do serviço de gerenciamento de recursos do Cloud
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- Clone o repositório do app de exemplo e navegue até o diretório
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Implante o portal do funcionário usando o script de configuração. Aguarde a conclusão do script antes de passar para a próxima etapa
./setup.sh
Exemplo de saída
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Clique no link do URL do serviço.
3. Como configurar um grupo de endpoints de rede sem servidor (NEG)
Você vai criar um grupo de endpoints de rede sem servidor( NEG sem servidor) para o serviço do Cloud Run da interface do funcionário. Os NEGs sem servidor permitem usar aplicativos sem servidor do Google Cloud com balanceamento de carga HTTP(S) externo.
- Crie um grupo de endpoints da rede para o serviço de interface do funcionário.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
Exemplo de saída
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
Criar um serviço de back-end e adicionar o NEG sem servidor
Um serviço de back-end define como o Cloud Load Balancing distribui tráfego. A configuração do serviço de back-end contém um conjunto de valores, como o protocolo usado para se conectar a back-ends, várias configurações de distribuição e sessão, verificações de integridade e tempos limite. Essas configurações fornecem um controle refinado sobre o comportamento do balanceador de carga.
- Criar um serviço de back-end
gcloud compute backend-services create employee-ui-iap-backend \
--global
Exemplo de saída
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- Adicione o NEG sem servidor como um back-end ao serviço de back-end
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Exemplo de saída
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Crie um mapa de URL para encaminhar solicitações recebidas para o serviço de back-end
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. Como configurar os componentes do balanceador de carga
O diagrama a seguir mostra que o balanceador de carga usa um back-end NEG sem servidor para direcionar solicitações a um serviço do Cloud Run sem servidor.
Reservar um endereço IP estático
- Reservar um endereço IPv4 estático e armazenar o domínio
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Exemplo de saída
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Armazenar o domínio nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Criar um recurso de certificado SSL gerenciado pelo Google
- Criar um recurso de certificado SSL gerenciado pelo Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Exemplo de saída
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
Criar um proxy HTTPS de destino
- Crie o proxy HTTPS de destino para encaminhar solicitações ao mapa de URLs.
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Exemplo de saída
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
Configurar regras de encaminhamento
- Crie uma regra de encaminhamento para encaminhar as solicitações recebidas para o proxy
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
Exemplo de saída
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Como restringir a entrada no serviço do Cloud Run
Restringir o tráfego de entrada para aceitar apenas solicitações internas e recebidas pelo balanceamento de carga HTTP(S).
- Atualizar o serviço para permitir apenas o tráfego de entrada de solicitações internas e solicitações pelo balanceador de carga HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Exemplo de saída
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- Clique no link do URL do serviço.
O acesso ao URL do serviço do Cloud Run agora aparece como proibido.
5. Como ativar o Cloud Identity-Aware Proxy (IAP) no balanceador de carga
Com o IAP, é possível estabelecer uma camada de autorização central para aplicativos acessados por HTTPS. É possível usar um modelo de controle de acesso no nível do aplicativo em vez de firewalls no nível da rede.
Configurar a tela de consentimento OAuth
Uma marca é a tela de consentimento OAuth que contém informações de marca para os usuários. As marcas podem ser restritas a usuários internos ou públicos. Uma marca interna permite que o fluxo OAuth seja acessado por um membro da mesma organização do Google Workspace que o projeto. Uma marca pública torna o fluxo OAuth acessível para qualquer pessoa com acesso à Internet.
- Criar uma marca
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
Exemplo de saída
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Como criar um cliente OAuth do IAP
- Crie um cliente usando o nome da marca da etapa anterior
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Exemplo de saída
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- Armazenar o nome, o ID e a chave secreta do cliente
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- No Console do Cloud, selecione o projeto no menu suspenso de seleção de projetos.
- Acesse a tela de consentimento do OAuth no Console do Cloud.
- Clique em TORNAR EXTERNO em "Tipo de usuário".
- Selecione "Em teste" como status de publicação
- Clique em CONFIRMAR.
6. Como restringir o acesso com o IAP
Restrinja o acesso ao serviço de back-end usando o IAP e verifique se o aplicativo está inacessível.
- Ativar o IAP no serviço de back-end
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
Verificar a configuração do IAP
- Verificar se o certificado SSL está ATIVO
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Conseguir o URL do serviço
echo https://$DOMAIN
Exemplo de saída
https://34.102.234.98.nip.io
- Clique no URL do serviço para abrir o portal do funcionário.
- Faça login usando suas credenciais do laboratório.
- Feche o navegador.
Conceder acesso de usuário ao portal de funcionários
- Adicione uma vinculação de política do IAM para o papel de
'roles/iap.httpsResourceAccessor'
ao usuário criado na etapa anterior
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Exemplo de saída
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Como testar o acesso ao serviço
Confirmar que o acesso ao portal de funcionários foi concedido
- Conseguir o URL do serviço
echo https://$DOMAIN
Exemplo de saída
https://34.102.234.98.nip.io
- Clique no URL do serviço para abrir o portal do funcionário.
Agora você tem acesso ao portal de funcionários.
(Opcional) Implante todas as dependências. A implantação desses microsserviços pode levar cerca de 20 minutos.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Parabéns!
Parabéns, você concluiu o codelab.
O que vem em seguida:
Conheça outros codelabs da Cymbal Eats:
- Como acionar fluxos de trabalho do Cloud com o Eventarc
- Como acionar o processamento de eventos do Cloud Storage
- Como se conectar ao CloudSQL privado pelo Cloud Run
- Como se conectar a bancos de dados totalmente gerenciados do Cloud Run
- Como acionar jobs do Cloud Run com o Cloud Scheduler
- Como implantar com segurança no Cloud Run
- Como proteger o tráfego de entrada do Cloud Run
- Como se conectar ao AlloyDB particular do GKE Autopilot
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto ou mantenha o projeto e exclua cada um dos recursos.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.