Attivazione di IAP per Cloud Run

Esistono due modi per attivare l'IAP per i servizi Cloud Run: direttamente su un servizio Cloud Run o sul servizio di backend di fronte ai 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 riportate di seguito.

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 l'IAP una volta per il servizio di backend.

Limitazioni note

  • Quando attivi 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 dall'IAP, consulta Configurare Cloud Run per limitare l'accesso.

  • 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.

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

Prima di iniziare

Per abilitare l'IAP per le risorse Cloud Run in IAP, devi disporre di quanto segue:

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 da un servizio di backend o un bilanciatore del carico

Per attivare l'IAP da IAP dietro un servizio di backend o un bilanciatore del carico, segui le istruzioni riportate di seguito.

Console

Il client OAuth gestito da Google non è disponibile quando attivi l'IAP utilizzando la Google Cloud console.

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 entità.
  5. Nella finestra di dialogo Aggiungi entità, 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

    L'account di servizio IAP viene creato quando IAP è abilitato. Se l'account di servizio IAP non è presente nell'elenco di principali, puoi crearlo eseguendo il seguente comando gcloud:

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

gcloud

  1. Se non l'hai già fatto nel progetto, crea l'agente di servizio IAP eseguendo il seguente 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 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 l'accesso alle risorse protette da IAP.

Terraform

  1. Se non l'hai già 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 invoker all'agente di servizio creato nel passaggio precedente eseguendo il seguente 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. Abilita IAP eseguendo il comando globale o regionale, a seconda del bilanciatore del carico. Utilizza l'ID client e il secret OAuth 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"
        }
      }
      

Configurare Cloud Run per limitare l'accesso

Per impedire che il traffico venga instradato 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 in Limita il traffico in entrata di rete per Cloud Run.

Risolvere gli errori

Autorizzazione negata all'accesso a Cloud Run

 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'errore dell'agente di servizio causa un errore IAM impostato

L'attivazione di acquisti in-app in un nuovo progetto per la prima volta può causare il seguente errore:

Setting IAM permissions failed

Questo perché l'agente di servizio Cloud Run non è riuscito. Per risolvere il problema, riattiva l'IAP o imposta manualmente il criterio IAM.

Impossibile configurare l'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]

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 dell'autorizzazione 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 fosse 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.