Questa pagina spiega come proteggere un servizio Cloud Run con Identity-Aware Proxy (IAP).
Limitazioni note
IAP non protegge il dominio fornito da Cloud Run per un servizio di cui hai eseguito il deployment. Per assicurarti che solo l'IAP abbia l'autorizzazione per accedere al servizio, utilizza l'autenticazione IAM sul servizio Cloud Run. Per consentire a IAP di accedere al servizio Cloud Run, concedi al ruolo dell'account di servizio IAP
service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
il ruolo Invoker di Cloud Run. IAP genera un token ID e lo utilizza per autenticarsi in Cloud Run utilizzando l'intestazioneX-Serverless-Authorization
.IAP si autentica in Cloud Run utilizzando l'intestazione
X-Serverless-Authorization
. Cloud Run passa questo header al tuo servizio dopo averne rimosso la firma. Se il tuo servizio è progettato per inoltrare la richiesta a un altro servizio Cloud Run che richiede l'autenticazione IAM, aggiornalo per rimuovere prima questo intestazione.IAP non è compatibile con Cloud CDN.
Prima di iniziare
Per abilitare IAP per Cloud Run, devi disporre di:
- Un progetto della console Google Cloud con la fatturazione abilitata.
- Un gruppo di uno o più servizi Cloud Run, gestito da un bilanciatore del carico.
- Scopri di più sulla configurazione di un bilanciatore del carico HTTPS esterno.
- Scopri come configurare un bilanciatore del carico HTTPS interno.
- Un nome di dominio registrato all'indirizzo del bilanciatore del carico.
- Il codice dell'applicazione per verificare che tutte le richieste abbiano un'identità.
- Scopri di più sul recupero dell'identità dell'utente.
IAP utilizza un client OAuth gestito da Google per autenticare gli utenti. Solo gli utenti all'interno dell'organizzazione possono accedere all'applicazione con funzionalità IAP. Se vuoi consentire l'accesso a utenti esterni all'organizzazione, consulta Attivare l'IAP per le applicazioni esterne.
Attivazione di IAP
Console
Il client OAuth gestito da Google non è disponibile quando attivi l'IAP utilizzando la console Google Cloud.
Se non hai configurato la schermata per il consenso OAuth del progetto, ti verrà richiesto di farlo. Per configurare la schermata per il consenso OAuth, consulta Configurare la schermata per il consenso OAuth.
Configurare l'accesso IAP
- Vai alla pagina Identity-Aware Proxy.
- Seleziona il progetto che vuoi proteggere con IAP.
- In APPLICAZIONI, seleziona la casella di controllo accanto al servizio di backend del bilanciatore del carico a cui vuoi aggiungere membri.
- Nel riquadro laterale a destra, fai clic su Aggiungi membro.
Nella finestra di dialogo Aggiungi membri, inserisci gli account di gruppi o privati che devono avere il ruolo Utente applicazione web con protezione IAP per il progetto. I seguenti tipi di account possono essere membri:
- Account Google: user@gmail.com. Può anche essere un account Google Workspace, ad esempio user@google.com o un altro dominio Workspace.
- Gruppo Google: admins@googlegroups.com
- Account di servizio: server@example.iam.gserviceaccount.com
- Dominio Google Workspace: example.com
Seleziona Cloud IAP > Utente applicazione web con protezione IAP dall'elenco a discesa Ruoli.
Fai clic su Salva.
Attivazione di IAP
- Nella pagina IAP, in APPLICAZIONI, individua il servizio di backend del bilanciatore del carico a cui vuoi limitare l'accesso. Per attivare l'IAP per una risorsa, fai clic sull'opzione di attivazione/disattivazione IAP.
Per attivare IAP:
- Almeno un protocollo nella configurazione frontend del bilanciatore del carico deve essere HTTPS. Scopri di più sulla configurazione di un bilanciatore del carico.
- Devi disporre delle autorizzazioni
compute.backendServices.update
,clientauthconfig.clients.create
eclientauthconfig.clients.getWithSecret
. Queste autorizzazioni vengono concesse in base ai ruoli, ad esempio il ruolo Editor del progetto. Per saperne di più, consulta Gestire l'accesso alle risorse protette da IAP.
- Nella finestra Attiva IAP visualizzata, fai clic su Attiva per confermare che vuoi che la risorsa venga protetta da IAP. Dopo aver attivato l'IAP, sono necessarie le credenziali di accesso per tutte le connessioni al bilanciatore del carico. Solo gli account con il ruolo Utente applicazione web con protezione IAP nel progetto avranno accesso.
Segui le istruzioni riportate in Controllo dell'accesso con IAM per autorizzare IAP a inviare traffico al servizio di backend Cloud Run.
- Principale:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
- Ruolo: Cloud Run Invoker
- Principale:
gcloud
- Se non l'hai ancora fatto, crea un account di servizio eseguendo il seguente comando. Se hai già creato un account di servizio, l'esecuzione del comando non crea account di servizio duplicati.
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- Concedi l'autorizzazione invoker all'account di servizio creato nel passaggio precedente eseguendo il seguente comando.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker'
Abilita IAP eseguendo il comando a livello globale o regionale, a seconda che il servizio di backend del bilanciatore del carico sia globale o regionale. Utilizza l'ID client e il secret OAuth del passaggio precedente.
Ambito globale
gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
Ambito regionale
Sostituisci quanto segue:gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
- BACKEND_SERVICE_NAME: il nome del servizio di backend.
- REGION_NAME: la regione in cui vuoi attivare IAP.
Dopo aver attivato l'IAP, puoi utilizzare Google Cloud CLI per manipolare un criterio di accesso IAP utilizzando il ruolo Identity and Access Management roles/iap.httpsResourceAccessor
. Per ulteriori informazioni, consulta Gestire i ruoli e le autorizzazioni.
Configurare Cloud Run per limitare l'accesso
Puoi configurare il servizio Cloud Run in modo da consentire l'accesso solo ai client interni e al bilanciatore del carico esterno, che blocca tutte le richieste dirette dall'internet pubblico.
Segui i passaggi descritti in Limitazione dell'ingresso per Cloud Run per configurare l'impostazione di ingresso del servizio Cloud Run su Internal and Cloud Load Balancing.
Risolvere gli errori
The IAP service account is not provisioned
gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
Your client does not have permission to get URL from this server
IAP utilizza le autorizzazioni dell'account di servizio IAP per invocare il servizio Cloud Run. Assicurati di aver concesso il ruolo Cloud Run Invoker al seguente account di servizio:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
.Se hai concesso il ruolo Invoker di Cloud Run all'account di servizio precedente e il problema persiste, esegui nuovamente il deployment del servizio Cloud Run.
L'account di servizio IAP non ha bisogno dell'autorizzazione run.routes.invoke
Durante l'anteprima di IAP con Cloud Run,
Cloud Run non ha eseguito il controllo delle autorizzazioni run.routes.invoke
per le chiamate da IAP che utilizzano il ruolo Invoker di Cloud Run. Con la disponibilità generale (GA), Cloud Run esegue questo controllo delle autorizzazioni.
Per evitare modifiche che causano interruzioni, alcuni progetti dei clienti che dipendevano da questo comportamento durante l'anteprima sono stati inseriti in una lista consentita in modo che l'autorizzazione non venisse controllata. Contatta l'assistenza Cloud Run per rimuovere questi progetti dalla lista consentita solo per l'anteprima.
Passaggi successivi
Per aiutarti a configurare l'IAP per Cloud Run con Terraform, consulta un esempio di codice Terraform.