Configurare IAP con la federazione delle identità della forza lavoro

Questa pagina mostra come configurare Identity-Aware Proxy (IAP) per utilizzare la federazione delle identità per la forza lavoro.

Quando configuri la federazione delle identità per la forza lavoro con IAP, puoi utilizzare un provider di identità (IdP) esterno per autenticare e autorizzare una forza lavoro, ovvero un gruppo di utenti, come dipendenti, partner e appaltatori, utilizzando Identity and Access Management (IAM), in modo che gli utenti possano accedere in sicurezza ai servizi di cui è stato eseguito il deployment suGoogle Cloud o on-premise.

La configurazione di IAP con la federazione delle identità per la forza lavoro ti consente di eseguire le seguenti operazioni per le tue applicazioni protette da IAP:

  • Reindirizzare un utente finale a un IdP esterno, ad esempio Okta, per accedere.
  • Configura una sessione di accesso compresa tra 15 minuti e 12 ore.
  • Consenti solo a utenti finali o insiemi di utenti finali specifici in un IdP di accedere alla tua applicazione.
  • Specifica il contesto in cui un utente finale può accedere a un'applicazione. Ad esempio, consenti l'accesso solo durante un'ora specifica del giorno.
Puoi utilizzare IAP con la federazione delle identità per la forza lavoro su tutte le risorse e i bilanciatori del carico esistenti supportati da IAP.

Configura IAP con la federazione delle identità per la forza lavoro per un'applicazione

La configurazione di IAP con la federazione delle identità per la forza lavoro comprende le seguenti attività principali:

  1. Configura un pool di forza lavoro e un provider.
  2. Crea un ID client OAuth e un secret.
  3. Abilita IAP e configuralo in modo che utilizzi la federazione delle identità per la forza lavoro.

Configura un provider e un pool di forza lavoro

Per configurare un pool di forza lavoro e un provider, segui le istruzioni per uno dei seguenti provider:

Quando imposti la durata della sessione, consulta Gestisci IAP con le sessioni di federazione delle identità per la forza lavoro.

Se vuoi mappare un indirizzo email da un IdP di terze parti a Google Cloud, devi aggiungere una mappatura degli attributi nel provider del pool di forza lavoro per google.email. Esempio: google.email=assertion.email.

Crea un ID client OAuth e un secret

Importante: l'ID client OAuth e il secret che crei nei passaggi seguenti vengono creati per l'infrastruttura della federazione delle identità per la forza lavoro. Questi sono diversi dall'ID client e dal secret richiesti quando si utilizza la configurazione OAuth personalizzata per abilitare IAP con le Google Identity.
  1. Segui le istruzioni per creare un ID client e un secret OAuth in un progetto nella stessa organizzazione del pool di forza lavoro che utilizzerai per questa configurazione. Il progetto non deve essere lo stesso in cui si trova la risorsa protetta da IAP. Quando crei l'ID client OAuth e il secret, segui questi passaggi:

    1. Utilizza un segnaposto per l'URI di reindirizzamento durante la creazione dell'ID client. Dopo aver creato l'ID client, esegui describe un client OAuth per ottenere il clientID generato.

    2. Quando hai il clientID, esegui update un client OAuth per aggiornare allowed-redirect-uris come segue: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      Dove CLIENT_ID è il clientID recuperato nel passaggio precedente.

    3. Dopo aver creato il client secret, esegui describe un client OAuth credenziali per ottenere il clientSecret generato.

    Salva clientId e clientSecret perché ti serviranno nei passaggi successivi.

Abilita IAP per utilizzare la federazione delle identità per la forza lavoro

Per abilitare IAP con la federazione delle identità per la forza lavoro, completa i seguenti passaggi.

Abilita IAP

Abilita IAP sulla risorsa.

console

  1. Nella console Google Cloud , apri la pagina IAP.
    Vai alla pagina IAP
  2. Seleziona un progetto. Il progetto deve appartenere alla stessa organizzazione del pool di forza lavoro che hai creato in precedenza. Il progetto non deve essere quello in cui hai creato l'ID client OAuth e il secret.
  3. Fai clic sulla scheda Applicazioni, quindi individua l'applicazione a cui vuoi limitare l'accesso utilizzando IAP.
  4. Nella colonna IAP, sposta l'opzione su On.

gcloud

Per utilizzare gcloud CLI per abilitare IAP, segui le procedure per il servizio applicabile:

API

  1. Crea un file settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. Abilita IAP su App Engine.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
    

    Per abilitare IAP su Compute Engine, utilizza il seguente URL: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.

Aggiorna le impostazioni IAP

Per configurare IAP in modo che utilizzi la federazione delle identità per la forza lavoro, devi configurare le seguenti impostazioni:

  • WorkforceIdentitySettings: l'ID client OAuth e il secret creati in precedenza.
  • IdentitySources: l'origine identità.

Per saperne di più, consulta le API IAP.

gcloud

  1. Utilizzando l'esempio seguente come riferimento, crea un file iap_settings.yaml.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.yaml
    access_settings:
      identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"]
      workforce_identity_settings:
        workforce_pools: ["$WORKFORCE_POOL_NAME"]
        oauth2:
          client_id: "$CLIENT_ID"
          client_secret: "$CLIENT_SECRET"
    EOF
    
  2. Esegui questo comando per aggiornare le impostazioni di IAP per la tua risorsa.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    Sostituisci quanto segue:

    • PROJECT: l'ID progetto.
    • RESOURCE_TYPE: il tipo di risorsa IAP. Il tipo di risorsa deve essere cloud-run (anteprima), app-engine, iap_web, compute, organization o folder. Per il tipo di risorsa cloud-run, utilizza il flag --region per indicare la regione in cui è stato eseguito il deployment del servizio Cloud Run.
    • SERVICE: il nome del servizio. Questo è facoltativo sia per app-engine che per compute.

    Per maggiori dettagli sul comando, consulta gcloud iap settings set.

API

  1. Utilizzando il seguente esempio come riferimento, crea un file di impostazioni iap_settings.json.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.json
    {
       "access_settings": {
         "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"],
         "workforce_identity_settings": {
           "workforce_pools": ["$WORKFORCE_POOL_NAME"],
           "oauth2": {
             "client_id": "$CLIENT_ID",
             "client_secret": "$CLIENT_SECRET",
           }
        }
      }
    }
    EOF
    
  2. Utilizza gcloud CLI per ottenere il nome della risorsa, quindi copia RESOURCE_NAME dall'output, perché ti servirà nel passaggio successivo.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    Sostituisci quanto segue:

    • PROJECT: l'ID progetto.
    • RESOURCE_TYPE: il tipo di risorsa IAP. Il tipo di risorsa deve essere appengine, iap_web, compute, organization, folder o cloud_run-$REGION (anteprima), dove $REGION è la regione in cui è stato eseguito il deployment del servizio Cloud Run.
    • SERVICE: il nome del servizio. Questo è facoltativo sia per app-engine che per compute.
  3. Sostituisci RESOURCE_NAME nel comando seguente con RESOURCE_NAME del passaggio precedente.

    curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
    

Concedi l'accesso alle risorse protette da IAP

Per accedere a una risorsa protetta da IAP, gli utenti finali devono avere il ruolo Utente applicazione web con protezione IAP sulla risorsa. Puoi concedere il ruolo Utente app web protetta da IAP a un singolo utente (entità) o a un insieme di utenti (insieme di entità, che corrisponde a un gruppo, a un attributo specifico o a un intero pool di utenti).

L'accesso illimitato alle risorse protette da IAP non è supportato.

console

  1. Nella console Google Cloud , apri la pagina IAP.
    Vai alla pagina IAP
  2. Seleziona la risorsa che vuoi proteggere con IAP.
  3. Fai clic su Aggiungi entità, quindi aggiungi gli identificatori delle entità dei gruppi o delle persone a cui vuoi concedere un ruolo IAM per la risorsa.
  4. In Assegna ruoli, seleziona IAP-Secured app web User.
  5. Fai clic su Aggiungi.

gcloud

Esegui questo comando.

gcloud iap web add-iam-policy-binding \
    --member=PRINCIPAL_IDENTIFIER \
    --role='roles/iap.httpsResourceAccessor' \
    --project=PROJECT_ID \
    --resource-type=RESOURCE_TYPE \
    --service=SERVICE \
    --condition=CONDITION

Sostituisci quanto segue:

  • PRINCIPAL_IDENTIFIER: l'identificatore dell'entità.
  • PROJECT_ID: l'ID progetto.
  • RESOURCE_TYPE: il tipo di risorsa IAP, che può essere app-engine o backend-services.
  • SERVICE: (Facoltativo) Il nome del servizio.
  • CONDITION: (facoltativo) condizioni IAM. Di seguito è riportato un esempio di condizione configurata con i livelli di accesso:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access on weekdays

API

Questo metodo non è consigliato perché interessa l'intera policy IAM di una risorsa. Un errore potrebbe rimuovere la policy da una risorsa.

  1. Ottieni le associazioni delle policy IAM esistenti.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d {} \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
    

    Sostituisci RESOURCE_NAME con il RESOURCE_NAME che hai ottenuto in un passaggio precedente.

  2. Nel file iam_policy_bindings.json che hai ottenuto nel passaggio precedente, rimuovi le righe version ed etag e aggiungi l'associazione che vuoi aggiungere per l'identificatore dell'entità. Per saperne di più, consulta Informazioni sulle policy di autorizzazione.

    {
      "bindings": [
        {
          // existing bindings
        },
        {
          "role": "roles/iap.httpsResourceAccessor",
          "members": [
          "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject"
          ],
          "condition": {
            "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels",
            "title": "iap-test-access-level",
            "description": "only access on weekdays"
          }
        }
      ]
    }
    
  3. Aggiorna le associazioni delle policy IAM.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{"policy":$(cat iam_policy_bindings.json)}" \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
    

    Sostituisci RESOURCE_NAME con il RESOURCE_NAME che hai ottenuto in un passaggio precedente.

Per saperne di più, consulta GetIamPolicy e SetIamPolicy.

(Facoltativo) Configura l'accesso sensibile al contesto

Facoltativamente, puoi configurare regole di accesso sensibile al contesto per l'autorizzazione avanzata.

Per configurare i livelli di accesso, consulta Creazione e applicazione dei livelli di accesso. I livelli di accesso basati sulle informazioni del dispositivo non sono disponibili quando utilizzi la federazione delle identità per la forza lavoro. Puoi comunque utilizzare i livelli di accesso basati sul contesto della richiesta con condizioni relative all'indirizzo IP, all'ora e alla data.

Autenticazione programmatica

IAP supporta l'autenticazione JWT dei account di servizio per le applicazioni configurate con la federazione delle identità per la forza lavoro. Per le istruzioni, consulta Autenticazione con un account di servizio account.

Limitazioni per l'utilizzo dei pool di forza lavoro

* Per ogni applicazione abilitata per IAP, è possibile configurare un solo pool di forza lavoro, che può contenere un solo provider. * Il pool di forza lavoro, l'ID client e il secret OAuth e le applicazioni abilitate per IAP devono trovarsi tutti nella stessa organizzazione. * I livelli di accesso per le informazioni relative ai dispositivi non sono supportati. * Sono supportate solo le seguenti configurazioni delle impostazioni IAP: * CorsSettings * CsmSettings * AccessDeniedPageSettings.accessDeniedPageUri * CookieDomain * L'accesso programmatico con la federazione delle identità per la forza lavoro è supportato solo per gli account di servizio Google.

Risoluzione dei problemi

Per informazioni sulla risoluzione dei problemi, consulta Risoluzione dei problemi e domande frequenti.