1. Visão geral
Neste laboratório, você vai implantar um portal para os funcionários acessarem, atualizarem e excluirem 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 que uma VPN para funcionários remotos, tanto no local quanto em ambientes de nuvem, com um único ponto de controle para gerenciar o acesso aos 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 autor delas por meio do serviço de identidade do Google e só permite a transmissão se elas vierem 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 Você pode atualizar 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. normalmente você não se importa com o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, que normalmente é identificado como
PROJECT_ID
. Se você não gostar do ID gerado, poderá gerar outro ID aleatório. Como alternativa, você pode tentar o seu próprio e ver se ele está disponível. Ela não pode ser alterada após essa etapa e permanecerá durante a duração do projeto. - Para sua informação, há um terceiro valor, um Número de 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 não gerar faturamento 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 ao projeto e aos 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 Cloud Resource Manager
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
- Implantar o portal dos funcionários usando o script de configuração. Aguarde a conclusão do script antes de prosseguir 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. Como 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 do Google Cloud sem servidor com balanceamento de carga HTTP(S) externo.
- Criar um grupo de endpoints de 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 seu 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
- Adicionar o NEG sem servidor como 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].
- Criar um mapa de URLs para encaminhar as solicitações recebidas ao 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
- Criar 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
- Criar 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 ao serviço do Cloud Run
Restrinja o tráfego de entrada para aceitar apenas solicitações internas e solicitações provenientes 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
O IAP permite 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 permissão 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 do 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 a 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]
- Armazene 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
- Acesse a tela de permissão OAuth no console do Cloud.
- Clique em CRIAR EXTERNO em "Tipo de usuário".
- Selecione "Teste" como o status "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
- Verifique se o certificado SSL está ATIVO
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Acessar 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 com suas credenciais do laboratório.
- Feche o navegador.
Permitir que o usuário acesse o portal do funcionário
- Adicione uma vinculação de política do IAM para o papel de
'roles/iap.httpsResourceAccessor'
do 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
Confirme se o acesso ao portal do funcionário foi concedido
- Acessar 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ê deve ter acesso ao portal do funcionário.
(Opcional) Implante todas as dependências. A implantação dos 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 no 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 no 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.