1. Visão geral
Neste laboratório, você vai implantar o portal do funcionário, que permite que os funcionários vejam, atualizem e excluam pedidos do 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 em ambientes locais e 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 aplicativo, autentica o usuário que faz a solicitação usando o 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, ele 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 (NEG) sem servidor
- 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 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 de serviço do IAP e do Resource Manager 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 "URL do serviço".

3. Configurar um grupo de endpoints de rede (NEG) sem servidor
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 apps sem servidor do Google Cloud com balanceamento de carga HTTP(S) externo.

- Crie um grupo de endpoints de rede para o serviço da 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 resposta
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 seu balanceador de carga.
- Criar um serviço de back-end
gcloud compute backend-services create employee-ui-iap-backend \
--global
Exemplo de resposta
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 resposta
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 de 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 resposta
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 resposta
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
Crie 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 resposta
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 rotear 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
Restrinja o tráfego de entrada para aceitar apenas solicitações internas e solicitações recebidas por meio do balanceamento de carga HTTP(S).

- Atualize 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 "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
Ele também permite que você estabeleça 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 permissão OAuth que contém informações de branding 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 resposta
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 resposta
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.
- Navegue até a tela de permissão OAuth no console do Cloud.

- Clique em "TORNAR EXTERNO" em "Tipo de usuário".
- Selecione "Teste" como o 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)'
- Receber 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 do funcionário
- Adicione uma vinculação de política do IAM para o papel de
'roles/iap.httpsResourceAccessor'para o 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].
Testar o acesso ao serviço
Confirmar se o acesso ao portal do funcionário foi concedido
- Receber 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 do funcionário.
(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.
Qual é a próxima etapa?
Confira outros codelabs do Cymbal Eats:
- Como acionar o Cloud Workflows com o Eventarc
- Acionamento do processamento de eventos do Cloud Storage
- Como se conectar ao CloudSQL particular pelo Cloud Run
- Como se conectar a bancos de dados totalmente gerenciados pelo 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 pelo Autopilot do GKE
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.