Attivazione di IAP per Cloud Run

Questa pagina spiega come proteggere un servizio Cloud Run con Identity-Aware Proxy (IAP).

Limitazioni note

  • Servizi Cloud Run con HTTP/2 abilitato dietro un bilanciatore del carico delle applicazioni classico protetto con IAP un loop di reindirizzamento infinito su richiesta. Google consiglia di utilizzare una Bilanciatore del carico delle applicazioni esterno globale quando utilizzando un servizio abilitato per HTTP/2 protetto con IAP. Per ulteriori dettagli, vedi Modalità del bilanciatore del carico.

  • IAP non protegge il dominio fornito da Cloud Run per un servizio di cui è stato eseguito il deployment. Per assicurarti che solo IAP disponga dell'autorizzazione per accedere al servizio, utilizza l'autenticazione IAM sul servizio Cloud Run. Per consentire a IAP di accedere al servizio Cloud Run, concedi il ruolo service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com dell'account di servizio IAP con il ruolo Invoker di Cloud Run. IAP genera un token ID e lo utilizza per eseguire l'autenticazione in Cloud Run utilizzando X-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 Cloud Run che richiede l'autenticazione IAM, aggiorna il servizio per rimuovere prima questa intestazione.

  • IAP non è compatibile con Cloud CDN.

Prima di iniziare

Per abilitare IAP per Cloud Run, è necessario quanto segue:

IAP utilizza un client OAuth gestito da Google per autenticare gli utenti. Solo gli utenti dell'organizzazione possono accedere alla piattaforma abilitata per IAP un'applicazione. Se vuoi consentire l'accesso a utenti esterni all'organizzazione, consulta Abilitazione di IAP per 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

  1. Vai alla pagina Identity-Aware Proxy.
  2. Seleziona il progetto che vuoi proteggere con IAP.
  3. In APPLICAZIONI, seleziona la casella di controllo accanto al servizio di backend del bilanciatore del carico a cui vuoi aggiungere membri.
  4. Nel riquadro laterale a destra, fai clic su Aggiungi membro.
  5. 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: utente@gmail.com. Può anche essere un account Google Workspace, ad esempio utente@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
  6. Seleziona Cloud IAP > Utente applicazione web con protezione IAP dall'elenco a discesa Ruoli.

  7. Fai clic su Salva.

Attivazione di IAP

  1. Nella pagina IAP, in APPLICAZIONI, trova il servizio di backend del bilanciatore del carico a cui vuoi limitare l'accesso. Per attivare IAP per una risorsa, fai clic sul pulsante 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 e clientauthconfig.clients.getWithSecret. Queste autorizzazioni vengono concesse in base ai ruoli, ad esempio il ruolo Editor di progetto. Per saperne di più, vedi Gestione dell'accesso alle risorse protette da IAP.
  2. Nella finestra Attiva IAP visualizzata, fai clic su Attiva per confermare che vuoi che IAP protegga la risorsa. Dopo aver attivato IAP, sono richieste le credenziali di accesso per tutte le connessioni al bilanciatore del carico. Verrà concesso l'accesso solo agli account con il ruolo Utente applicazione web con protezione IAP nel progetto.
  3. Segui le istruzioni in Controllo dell'accesso con IAM per autorizzare IAP a inviare il traffico al servizio Cloud Run di backend.

    • Entità: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
    • Ruolo: Invoker di Cloud Run

gcloud

  1. Se non lo hai già fatto, crea un account di servizio eseguendo questo 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]
  2. Concedi l'autorizzazione calloutr all'account di servizio, creato nel passaggio precedente, eseguendo questo 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'
    
  3. 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

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    Sostituisci quanto segue:

    • BACKEND_SERVICE_NAME: il nome del servizio di backend.
    • REGION_NAME: la regione in cui vuoi abilitare IAP.

Dopo aver attivato 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, vedi Gestire i ruoli e le autorizzazioni.

Configurazione di 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 in Limitazione del traffico in entrata per Cloud Run per configurare l'impostazione di traffico in entrata del tuo servizio Cloud Run Interno e Cloud Load Balancing.

Risolvere gli errori

 The IAP service account is not provisioned 
Se visualizzi questo errore, stai tentando di abilitare IAP su una Servizio Cloud Run tramite gcloud CLI. La configurazione di IAP tramite l'interfaccia a riga di comando gcloud include il passaggio aggiuntivo del provisioning di un account di servizio IAP nel progetto utilizzando il seguente comando: 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 l'accesso a Cloud Esegui il ruolo Invoker sul seguente account di servizio: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com.

  • Se hai concesso il ruolo Invoker di Cloud Run alla precedente dell'account di servizio e stai ancora riscontrando questo problema, esegui nuovamente il deployment dal servizio Cloud Run.

L'account di servizio IAP non richiede l'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 Disponibilità generale (GA), Cloud Run esegue questa autorizzazione verifica.

Per evitare di interrompere le modifiche, alcuni progetti dei clienti dipendevano da questo comportamento durante l'anteprima sono state inserite in una lista consentita in modo che l'autorizzazione selezionata. Contatta l'assistenza di Cloud Run per la rimozione di questi progetti presenti nella lista consentita Solo anteprima.

Passaggi successivi

Per configurare IAP per Cloud Run con Terraform, esplorare un esempio di codice Terraform.