1. Panoramica
In questo lab eseguirai il deployment del portale per i dipendenti che consente loro 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 virtuale privata (VPN). IAP semplifica l'implementazione di un modello di accesso Zero Trust e richiede meno tempo di una VPN per i lavoratori remoti sia on-premise che in ambienti cloud, con un unico punto di controllo per la gestione dell'accesso alle tue app.
Che cos'è Identity-Aware Proxy?
Identity-Aware Proxy (IAP) è un servizio Google Cloud che intercetta le richieste inviate alla tua applicazione, autentica l'utente che effettua 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 serverless (NEG)
- Come configurare un bilanciatore del carico
- Come attivare IAP per limitare l'accesso
- Come limitare l'accesso utilizzando gli acquisti in-app
2. Configurazione e requisiti
Configurazione dell'ambiente a tuo ritmo
- 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 del progetto è il nome visualizzato per i partecipanti al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; in genere non è importante quale sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà invariato per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un Numero 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 le API/risorse Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non del tutto. Per arrestare le risorse in modo da non generare costi oltre questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono partecipare al programma Prova senza costi di 300$.
Configurazione dell'ambiente
- Creare 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
- Attiva 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 passare 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 all'URL del servizio
3. Configurazione di un gruppo di endpoint di rete serverless (NEG)
Creerai un gruppo di endpoint di rete serverless( NEG serverless) per il servizio Cloud Run dell'interfaccia utente per i dipendenti. I NEG serverless ti consentono di utilizzare le app serverless di Google Cloud con il bilanciamento del carico HTTP(S) esterno.
- Crea un gruppo di endpoint di rete per il servizio dell'interfaccia utente per i 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 la modalità di distribuzione del traffico da parte di Cloud Load Balancing. La configurazione del servizio di backend contiene un insieme di valori, ad esempio il protocollo utilizzato per connettersi 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 al 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 memorizza 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].
- Memorizza 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 gestita da Google
- Crea una risorsa del certificato SSL gestita 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 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:
Configurare le regole di inoltro
- Crea una regola di inoltro 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].
Limitare l'accesso in entrata al servizio Cloud Run
Limita il traffico in entrata in modo da accettare solo le richieste interne e quelle provenienti tramite il bilanciamento del carico HTTP(S).
- Aggiorna il servizio in modo da consentire solo il traffico in entrata proveniente da richieste interne e richieste 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 all'URL del servizio
L'accesso all'URL del servizio Cloud Run ora viene visualizzato come vietato.
5. Attivazione di Cloud Identity-Aware Proxy (IAP) sul bilanciatore del carico
IAP consente di definire un livello di autorizzazione centrale per le applicazioni accessibili tramite HTTPS. Puoi utilizzare un modello di controllo dell'accesso a livello di applicazione anziché firewall a livello di rete.
Configurazione della schermata per il consenso OAuth
Un brand è la schermata di consenso OAuth che contiene informazioni sul branding per gli utenti. I brand potrebbero essere riservati agli 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.
- Creare 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]
- Memorizza 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 RENDE ESTERNO in Tipo di utente.
- Seleziona Test come stato di pubblicazione
- Fai clic su CONFERMA.
6. Limitare l'accesso con IAP
Limita l'accesso al servizio di backend utilizzando IAP, quindi verifica che l'applicazione non sia accessibile.
- Attivare l'IAP sul 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 degli acquisti in-app
- Verifica che il certificato SSL sia ACTIVE
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- Ottenere l'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 con le tue credenziali del lab.
- Chiudi il browser
Concedere l'accesso utente al portale per i dipendenti
- Aggiungi un'associazione del criterio 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].
Testare l'accesso al servizio
Conferma che l'accesso al portale dei dipendenti è stato concesso
- Ottenere l'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 dei dipendenti.
(Facoltativo) Esegui il deployment di tutte le dipendenze. Il deployment di questi microservizi potrebbe 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 dei flussi di lavoro cloud con Eventarc
- Attivare l'elaborazione degli eventi da Cloud Storage
- Connessione a Cloud SQL privato da Cloud Run
- Connessione ai database completamente gestiti da Cloud Run
- Attivazione di job Cloud Run con Cloud Scheduler
- Eseguire il deployment in sicurezza in Cloud Run
- Protezione del traffico in entrata di Cloud Run
- Connessione ad AlloyDB privato 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 è eliminare il progetto che hai creato per il tutorial.