Attivazione di IAP per Cloud Run

Esistono due modi per attivare IAP per i tuoi servizi Cloud Run, direttamente su un servizio Cloud Run o sul servizio di backend che funge da frontend per i servizi Cloud Run.

Ti consigliamo di abilitare IAP direttamente su Cloud Run. In questo modo vengono protetti l'endpoint run.app e, se configuri un bilanciatore del carico, anche l'endpoint del bilanciatore del carico.

Se hai bisogno di una gestione centralizzata degli accessi o vuoi instradare il traffico verso più regioni, continua con le procedure seguenti.

Questa pagina spiega come proteggere un servizio Cloud Run con IAP da un servizio di backend o un bilanciatore del carico. Se esegui Cloud Run in più regioni collegate allo stesso servizio di backend globale del bilanciatore del carico, segui le istruzioni riportate in questa pagina per configurare IAP una sola volta per il servizio di backend.

Limitazioni note

  • Quando abiliti IAP su un bilanciatore del carico, IAP protegge il traffico solo tramite il bilanciatore del carico e non con il traffico che potrebbe raggiungere il servizio Cloud Run tramite il relativo URL run.app. Per consentire solo il traffico autorizzato da IAP, consulta Configurazione di Cloud Run per limitare l'accesso.

  • IAP esegue l'autenticazione su Cloud Run utilizzando l'intestazione X-Serverless-Authorization. Cloud Run passa questo header al tuo servizio dopo aver rimosso 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 per rimuovere prima questo header.

  • IAP non è compatibile con Cloud CDN.

  • L'IAP aumenta la latenza. Abilita IAP solo per le istanze che non sono sensibili alla latenza.

Prima di iniziare

Per abilitare IAP per le risorse Cloud Run in IAP, 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 abilitata perIAPn-app. Se vuoi consentire l'accesso a utenti esterni all'organizzazione, consulta Abilitare IAP per applicazioni esterne.

Abilitare IAP da un servizio di backend o un bilanciatore del carico

Per abilitare IAP da IAP dietro un servizio di backend o un bilanciatore del carico, segui queste istruzioni.

Console

Il client OAuth gestito da Google non è disponibile quando abiliti 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.

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 membri.
  4. Nel riquadro laterale a destra, fai clic su Aggiungi entità.
  5. Nella finestra di dialogo Aggiungi entità, inserisci gli account di gruppi o persone 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ò essere anche un account Google Workspace, ad esempio user@google.com o un altro dominio workspace.
    • Gruppo Google: admins@googlegroups.com
    • Service account: 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, nella sezione APPLICAZIONI, trova il servizio di backend del bilanciatore del carico a cui vuoi limitare l'accesso. Per attivare IAP per una risorsa, fai clic sull'opzione di attivazione/disattivazione IAP. Per abilitare 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 dai ruoli, ad esempio il ruolo Editor progetto. Per saperne di più, consulta 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 tua risorsa. Dopo aver attivato 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.

    • Preside: service-[PROJECT-NUMBER]@gcp-sa-iap.
    • Ruolo: Cloud Run Invoker

    Il account di servizio IAP viene creato quando IAP è abilitato. Se il account di servizio IAP non è presente nell'elenco dei principal, puoi crearlo eseguendo questo comando gcloud:

    gcloud beta services identity create
        --service=iap.googleapis.com
        --project=PROJECT_ID
    

gcloud

  1. Se non l'hai ancora fatto nel progetto, crea l'agente di servizio IAP eseguendo questo comando. Se hai già creato l'agente di servizio, l'esecuzione del comando non lo duplica.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Concedi l'autorizzazione di invoker al account di servizio creato nel passaggio precedente eseguendo il comando seguente.
    gcloud run services add-iam-policy-binding [SERVICE-NAME] \
    --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.'  \
    --role='roles/run.invoker'
    
  3. Attiva 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 attivare IAP.

Dopo aver attivato IAP, puoi utilizzare Google Cloud CLI per manipolare una policy di accesso IAP utilizzando il ruolo Identity and Access Management roles/iap.httpsResourceAccessor. Per saperne di più, consulta Gestire l'accesso alle risorse protette da IAP.

Terraform

  1. Se non l'hai ancora fatto, crea l'agente di servizio IAP in un progetto eseguendo il seguente comando. Se hai già creato l'agente di servizio, l'esecuzione del comando non lo duplica.
    resource "google_project_service" "project" {
      project = "your-project-id"
      service = "iap.googleapis.com"
    }
    
  2. Concedi l'autorizzazione di invoker all'agente di servizio creato nel passaggio precedente eseguendo questo comando.
    resource "google_cloud_run_service_iam_binding" "binding" {
      location = google_cloud_run_v2_service.default.location
      service  = google_cloud_run_v2_service.default.name
      role = "roles/run.invoker"
      members = [
        "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com",
      ]
    }
    
  3. Attiva IAP eseguendo il comando globale o regionale a seconda del bilanciatore del carico. Utilizza l'ID client OAuth e il client secret del passaggio precedente.

    • Ambito globale

      resource "google_compute_backend_service" "default" {
        name                  = "tf-test-backend-service-external"
        protocol              = "HTTPS"
        load_balancing_scheme = "EXTERNAL_MANAGED"
        iap {
          enabled              = true
          oauth2_client_id     = "abc"
          oauth2_client_secret = "xyz"
        }
      }
      

    • Ambito regionale

      resource "google_compute_region_backend_service" "default" {
        name                  = "tf-test-backend-service-external"
        protocol              = "HTTPS"
        load_balancing_scheme = "EXTERNAL_MANAGED"
        iap {
          enabled              = true
          oauth2_client_id     = "abc"
          oauth2_client_secret = "xyz"
        }
      }
      

Configurazione di Cloud Run per limitare l'accesso

Per impedire l'instradamento del traffico tramite l'URL run.app predefinito di un servizio Cloud Run, disattiva l'URL predefinito. In caso contrario, configura le impostazioni di traffico in entrata per limitare il traffico in entrata di rete per Cloud Run.

Risolvere gli errori

Autorizzazione negata per l'accesso a Cloud Run

 Your client does not have permission to get URL from this server 
  • IAP utilizza le autorizzazioni del account di servizio IAP per richiamare il servizio Cloud Run. Assicurati di aver concesso il ruolo Invocatore di Cloud Run al seguente account di servizio: service-[PROJECT-NUMBER]@gcp-sa-iap..

  • Se hai concesso il ruolo Invoker di Cloud Run al account di servizio precedente e il problema persiste, esegui nuovamente il deployment del servizio Cloud Run.

L'errore dell'agente di servizio causa l'errore di impostazione di IAM

L'attivazione di IAP su un nuovo progetto per la prima volta può causare il seguente errore:

Setting IAM permissions failed

Ciò è dovuto all'errore dell'agente di servizio Cloud Run. Per risolvere il problema, riabilita IAP o imposta manualmente il criterio IAM.

Impossibile configurare IAP tramite gcloud CLI

 The IAP service account is not provisioned 

Se visualizzi questo errore, esegui il seguente comando:

gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]

Il 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 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 di sola anteprima.

Passaggi successivi

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