1. Panoramica
In questo lab eseguirai il deployment del portale per i dipendenti che consente ai dipendenti di visualizzare, aggiornare ed eliminare gli ordini dall'app Cymbal Eats. Utilizzerai Identity Aware Proxy (IAP) per proteggere l'accesso al portale senza utilizzare una rete privata virtuale (VPN). IAP semplifica l'implementazione di un modello di accesso Zero Trust e richiede meno tempo rispetto a una VPN per i lavoratori da remoto, sia on-premise che in ambienti cloud, con un unico punto di controllo per la gestione degli accessi alle app.
Che cos'è Identity-Aware Proxy?
Identity-Aware Proxy (IAP) è un servizio di Google Cloud che intercetta le richieste inviate alla tua applicazione, autentica l'utente che fa la richiesta utilizzando Google Identity Service e fa passare solo le richieste che provengono da un utente autorizzato ad accedere all'applicazione. Inoltre, può modificare le intestazioni della richiesta per includere informazioni sull'utente autenticato.
Cosa imparerai a fare
- Come configurare un gruppo di endpoint di rete (NEG) serverless
- Come configurare un bilanciatore del carico
- Abilitare IAP per limitare l'accesso
- Come limitare l'accesso utilizzando IAP
2. Configurazione e requisiti
Configurazione dell'ambiente autogestito
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Configurazione dell'ambiente
- Crea variabili di ambiente relative a progetti e risorse
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
- Abilita le API di servizio IAP e Cloud Resource Manager
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- clona il repository dell'app di esempio e vai alla directory
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- Esegui il deployment del portale dei dipendenti utilizzando lo script di configurazione. Attendi il completamento dello script prima di andare al passaggio successivo
./setup.sh
Output di esempio
... 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
- Fai clic sul link URL del servizio
3. Configurazione di un gruppo di endpoint di rete (NEG) serverless
Creerai un gruppo di endpoint di rete serverless( NEGless NEG) per il servizio Cloud Run dell'interfaccia utente dei dipendenti. I NEG serverless consentono di utilizzare le app serverless di Google Cloud con bilanciamento del carico HTTP(S) esterno.
- Creare un gruppo di endpoint di rete per il servizio UI dei dipendenti.
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
Output di esempio
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].
Crea un servizio di backend e aggiungi il NEG serverless
Un servizio di backend definisce il modo in cui Cloud Load Balancing distribuisce il traffico. La configurazione del servizio di backend contiene un insieme di valori, ad esempio il protocollo utilizzato per la connessione ai backend, varie impostazioni di distribuzione e sessione, controlli di integrità e timeout. Queste impostazioni forniscono un controllo granulare sul comportamento del bilanciatore del carico.
- Crea un servizio di backend
gcloud compute backend-services create employee-ui-iap-backend \
--global
Output di esempio
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
- Aggiungi il NEG serverless come backend del servizio di backend
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
Output di esempio
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- Crea una mappa URL per instradare le richieste in entrata al servizio di backend
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. Configurazione dei componenti del bilanciatore del carico
Il seguente diagramma mostra che il bilanciatore del carico utilizza un backend NEG serverless per indirizzare le richieste a un servizio Cloud Run serverless.
Prenota un indirizzo IP statico
- Prenota un indirizzo IPv4 statico e archivia il dominio
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
Output di esempio
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- Archivia il dominio nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
Crea una risorsa del certificato SSL gestito da Google
- Crea una risorsa del certificato SSL gestito da Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
Output di esempio
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
Crea un proxy HTTPS di destinazione
- Crea il proxy HTTPS di destinazione per instradare le richieste alla mappa di URL
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
Output di esempio
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:
Configura regole di forwarding
- Crea una regola di forwarding per instradare le richieste in entrata al 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
Output di esempio
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
Limitazione del traffico in entrata nel servizio Cloud Run
Limita il traffico in entrata in modo che accetti solo le richieste interne e quelle provenienti dal bilanciamento del carico HTTP(S).
- Aggiorna il servizio per consentire solo il traffico in entrata da richieste e richieste interne tramite il bilanciatore del carico HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
Output di esempio
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
- Fai clic sul link URL del servizio
L'accesso all'URL del servizio Cloud Run ora risulta vietato.
5. Abilitazione di Cloud Identity-Aware Proxy (IAP) sul bilanciatore del carico
IAP consente di stabilire un livello di autorizzazione centrale per le applicazioni a cui si accede tramite HTTPS. Puoi utilizzare un modello di controllo dell'accesso a livello di applicazione anziché un modello di controllo dell'accesso a livello di rete.
Configurare la schermata per il consenso OAuth
Un brand è la schermata per il consenso OAuth che contiene informazioni di branding per gli utenti. I brand possono essere limitati a utenti interni o pubblici. Un brand interno consente a un membro della stessa organizzazione Google Workspace del progetto di accedere al flusso OAuth. Un brand pubblico rende il flusso OAuth accessibile a chiunque abbia accesso a internet.
- Crea un brand
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
Output di esempio
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
Creazione di un client OAuth IAP
- Crea un cliente utilizzando il nome del brand del passaggio precedente
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
Output di esempio
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]
- Archivia il nome, l'ID e il secret del client
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)')
- Nella console Cloud, seleziona il progetto dal menu a discesa di selezione del progetto.
- Vai alla schermata per il consenso OAuth nella console Cloud
- Fai clic su IMPOSTA ESTERNO sotto Tipo di utente.
- Seleziona Test come stato di pubblicazione
- Fai clic su CONFERMA
6. Limitazione dell'accesso con IAP
Limita l'accesso al servizio di backend utilizzando IAP, quindi verifica che l'applicazione non sia accessibile.
- Abilita IAP nel servizio di backend
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
Verifica la configurazione IAP
- Verifica che il certificato SSL sia ATTIVO
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Recupera URL del servizio
echo https://$DOMAIN
Output di esempio
https://34.102.234.98.nip.io
- Fai clic sull'URL del servizio per aprire il portale per i dipendenti.
- Accedi utilizzando le tue credenziali del lab.
- Chiudi il browser.
Concedi agli utenti l'accesso al portale per i dipendenti
- Aggiungi un'associazione di criteri IAM per il ruolo
'roles/iap.httpsResourceAccessor'
per l'utente creato nel passaggio precedente
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
Output di esempio
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
Test dell'accesso al servizio
Conferma che l'accesso al portale dei dipendenti è stato concesso
- Recupera URL del servizio
echo https://$DOMAIN
Output di esempio
https://34.102.234.98.nip.io
- Fai clic sull'URL del servizio per aprire il portale per i dipendenti.
Ora dovresti avere accesso al portale per i dipendenti.
(Facoltativo) Il deployment di tutte le dipendenze. Il deployment di questi microservizi può richiedere circa 20 minuti.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. Complimenti
Complimenti, hai completato il codelab.
Passaggi successivi
Esplora altri codelab di Cymbal Eats:
- Attivazione di Cloud Workflows con Eventarc
- Attivazione dell'elaborazione degli eventi da Cloud Storage
- Connessione a Cloud SQL privato da Cloud Run
- Connessione a database completamente gestiti da Cloud Run
- Attivazione di job Cloud Run con Cloud Scheduler
- Deployment sicuro su Cloud Run
- Protezione del traffico in entrata di Cloud Run
- Connessione ad AlloyDB privata da GKE Autopilot
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto che hai creato per il tutorial.