Attivazione di IAP per Cloud Run

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 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 lo utilizza per autenticarsi in Cloud Run utilizzando l'intestazione 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 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:

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à chiesto 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: 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
  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, 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 e clientauthconfig.clients.getWithSecret. Queste autorizzazioni vengono concesse in base ai ruoli, ad esempio il ruolo Editor del progetto. Per scoprire di più, consulta Gestire l'accesso alle risorse protette da IAP.
  2. 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.
  3. 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

gcloud

  1. 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]
  2. 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'
    
  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 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 
Se visualizzi questo errore, significa che stai tentando di attivare l'IAP su un servizio Cloud Run tramite lgcloud CLI. La configurazione di IAP tramite l'interfaccia alla gcloud CLI 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 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.