Abilitazione di IAP per Cloud Run

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

Limitazioni note

  • I servizi Cloud Run con HTTP/2 abilitato dietro un bilanciatore del carico delle applicazioni classico e protetti con IAP riscontrano un loop di reindirizzamento infinito su richiesta. Google consiglia di utilizzare un Application Load Balancer esterno globale quando si utilizza un servizio abilitato per HTTP/2 protetto con IAP. Per ulteriori dettagli, consulta la pagina relativa alle 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 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 il ruolo dell'account di servizio IAP service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com con il ruolo Invoker di Cloud Run. IAP genera un token ID e utilizza il token per l'autenticazione in Cloud Run mediante l'intestazione X-Serverless-Authorization.

  • IAP esegue l'autenticazione in Cloud Run utilizzando l'intestazione X-Serverless-Authorization. Cloud Run passa questa intestazione al servizio dopo aver eliminato la firma. Se il tuo servizio è progettato per inoltrare la richiesta a un altro servizio Cloud Run che richiede l'autenticazione IAM, aggiorna il servizio in modo da 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 l'autenticazione degli utenti. Solo gli utenti all'interno dell'organizzazione possono accedere all'applicazione abilitata per IAP. Se vuoi consentire l'accesso agli utenti esterni alla tua organizzazione, vedi Abilitare IAP per applicazioni esterne.

Abilitazione di IAP

Console

Il client OAuth gestito da Google non è disponibile quando si abilita IAP utilizzando la console Google Cloud.

Se non hai configurato la schermata per il consenso OAuth del progetto, ti verrà chiesto di farlo. Per configurare la schermata per il consenso OAuth, consulta Configurazione della schermata per il consenso OAuth.

Configurazione dell'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 i membri.
  4. Nel riquadro laterale a destra, fai clic su Aggiungi membro.
  5. Nella finestra di dialogo Aggiungi membri, inserisci gli account dei gruppi o delle persone che devono disporre del ruolo Utente applicazione web con protezione IAP per il progetto. I seguenti tipi di account possono essere membri:

    • Account Google: utente@gmail.com. Può essere anche un account Google Workspace, ad esempio utente@google.com o un altro dominio di Workspace.
    • Gruppo Google: admins@googlegroups.com
    • Account di servizio: server@example.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 abilitare IAP:
    • Almeno un protocollo nella configurazione del 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 scoprire di più, vedi Gestione dell'accesso alle risorse protette con IAP.
  2. Nella finestra Attiva IAP che viene visualizzata, fai clic su Attiva per confermare che vuoi che IAP protegga la risorsa. Dopo aver attivato IAP, IAP richiede le credenziali di accesso per tutte le connessioni al bilanciatore del carico. L'accesso verrà concesso solo agli account con il ruolo Utente applicazione web con protezione IAP per il progetto.
  3. Segui le istruzioni in Controllo dell'accesso con IAM per autorizzare IAP a inviare 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 chiamante 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 con ambito globale o regionale, a seconda che il servizio di backend del bilanciatore del carico sia globale o regionale. Utilizza l'ID client OAuth e il client secret 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 abilitato IAP, puoi utilizzare Google Cloud CLI per gestire 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 tuo servizio Cloud Run in modo da consentire l'accesso solo per i client interni e il bilanciatore del carico esterno, bloccando tutte le richieste dirette dalla rete internet pubblica.

Segui i passaggi in Limitazione del traffico in entrata per Cloud Run per configurare l'impostazione del traffico in entrata per il tuo servizio Cloud Run su 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 un servizio Cloud Run tramite gcloud CLI. La configurazione di IAP tramite gcloud CLI include il passaggio aggiuntivo per il provisioning di un account di servizio IAP nel tuo 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 richiamare il servizio Cloud Run. Assicurati di aver concesso il ruolo Invoker di Cloud Run 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 richiede l'autorizzazione run.routes.invoke

Durante l'anteprima 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 di apportare modifiche che provocano errori, 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 fosse selezionata. Contatta l'assistenza di Cloud Run per rimuovere questi progetti dalla lista consentita Solo anteprima.

Passaggi successivi

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