Applicazione serverless sicura con Identity-Aware Proxy (IAP)

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.

94b06525c85408ad.png

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

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

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

86416f68c0b8152a.png

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.

2abe669e53c27186.png

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

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

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

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

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

26cb0b2a9162e7ab.png

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

8505fde7e0784bf1.png

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.

d9740402a74370a8.png

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.

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

  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. 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)')
  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 IMPOSTA ESTERNO sotto Tipo di utente.
  2. Seleziona Test come stato di pubblicazione

27fd7de6e7b7ef21.png

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

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

  1. Verifica che il certificato SSL sia ATTIVO
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
  1. Recupera 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 utilizzando le tue credenziali del lab.

f7e0318388aa0739.png

  1. Chiudi il browser.

Concedi agli utenti l'accesso al portale per i dipendenti

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

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

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.