Applicazione serverless sicura con Identity-Aware Proxy (IAP)

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.

94b06525c85408ad.png

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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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

  1. 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
  1. 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
  1. 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
  1. 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
  1. Fai clic sul link all'URL del servizio

86416f68c0b8152a.png

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.

2abe669e53c27186.png

  1. 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.

  1. 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
  1. 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].
  1. 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.

335f4674737a6514.png

Prenota un indirizzo IP statico

  1. 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].
  1. 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

  1. 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

  1. 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

  1. 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).

26cb0b2a9162e7ab.png

  1. 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
  1. Fai clic sul link all'URL del servizio

8505fde7e0784bf1.png

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.

d9740402a74370a8.png

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.

  1. 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

  1. 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]
  1. 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)')
  1. Nella console Cloud, seleziona il progetto dal menu a discesa di selezione del progetto.
  2. Vai alla schermata per il consenso OAuth nella console Cloud.

bcb460f3ab5241f4.png

  1. Fai clic su RENDE ESTERNO in Tipo di utente.
  2. Seleziona Test come stato di pubblicazione

27fd7de6e7b7ef21.png

  1. 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.

  1. 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

  1. Verifica che il certificato SSL sia ACTIVE
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. Ottenere l'URL del servizio
echo https://$DOMAIN

Output di esempio

https://34.102.234.98.nip.io
  1. Fai clic sull'URL del servizio per aprire il portale per i dipendenti.

352b600209c3fb33.png

  1. Accedi con le tue credenziali del lab.

f7e0318388aa0739.png

  1. Chiudi il browser

Concedere l'accesso utente al portale per i dipendenti

  1. 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

  1. Ottenere l'URL del servizio
echo https://$DOMAIN

Output di esempio

https://34.102.234.98.nip.io
  1. Fai clic sull'URL del servizio per aprire il portale per i dipendenti.

86416f68c0b8152a.png

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:

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.