Configura IAP con federazione delle identità per la forza lavoro

Questa pagina mostra come configurare Identity-Aware Proxy (IAP) per l'utilizzo della 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, un gruppo di utenti, ad esempio dipendenti, partner e contrattisti, utilizzando Identity and Access Management (IAM), in modo che gli utenti possano accedere in modo sicuro ai servizi di cui è stato eseguito il deployment su Google Cloud o on-premise.

Se configuri IAP con la federazione delle identità per la forza lavoro, puoi eseguire le seguenti operazioni in relazione alle applicazioni protette da IAP:

  • Reindirizza un utente finale a un IdP esterno, come Okta, per accedere.
  • Configura una sessione di accesso di durata compresa tra 15 minuti e 12 ore.
  • Consenti solo a utenti finali o set di utenti finali specifici di un IdP di accedere alla tua applicazione.
  • Specifica il contesto con cui un utente finale può accedere a un'applicazione. Ad esempio, consenti l'accesso solo a una determinata ora 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.

Configurare 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. Creare un ID client OAuth e un secret.
  3. Abilita IAP e configuralo per utilizzare la federazione delle identità per la forza lavoro.

Configura un pool di forza lavoro e un provider

Per configurare un pool e un provider di forza lavoro, segui le istruzioni in Federazione delle identità per la forza lavoro e, quando imposti la durata della sessione, consulta Gestire le sessioni IAP con 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.

Creare un ID client OAuth e un secret

  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 necessariamente lo stesso in cui si trova la risorsa protetta da IAP. Quando crei l'ID client OAuth e il secret:

    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 valore clientID generato.

    2. Una volta installato clientID, esegui update un client OAuth per aggiornare allowed-redirect-uris a quanto segue: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      Dove CLIENT_ID è l'elemento clientID recuperato nel passaggio precedente.

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

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

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

console

  1. Nella console Google Cloud, apri la pagina IAP.
    Vai alla pagina IAP
  2. Seleziona un progetto. Il progetto deve trovarsi nella stessa organizzazione del pool di forza lavoro creato in precedenza. Il progetto non deve essere necessariamente quello in cui hai creato l'ID client OAuth e il secret.
  3. Fai clic sulla scheda Applications (Applicazioni) e individua l'applicazione a cui vuoi limitare l'accesso tramite IAP.
  4. Nella colonna IAP, imposta 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.

Aggiornare le impostazioni IAP

Per configurare IAP per l'utilizzo della 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 ulteriori informazioni, consulta il documento 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 IAP per la 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 app-engine, iap_web, compute, organization o folder.
    • SERVICE: il nome del servizio. Questo passaggio è facoltativo per app-engine e compute.

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

API

  1. Utilizzando l'esempio seguente 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 il valore 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 app-engine, iap_web, compute, organization o folder.
    • SERVICE: il nome del servizio. Questo passaggio è facoltativo per app-engine e 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 a risorse protette con IAP

Per accedere a una risorsa protetta da IAP, gli utenti finali devono disporre del ruolo Utente applicazione web con protezione IAP per la risorsa. Puoi concedere il ruolo Utente applicazione web con protezione IAP a un singolo utente (entità) o a un insieme di utenti (set di entità, mappato a un gruppo, a un attributo specifico o a un intero pool di utenti).

L'accesso senza restrizioni alle risorse protette con 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 principali dei gruppi o delle persone a cui vuoi concedere un ruolo IAM per la risorsa.
  4. In Assegna ruoli, seleziona Utente applicazione web con protezione IAP.
  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: gli identificatori principali.
  • PROJECT_ID: l'ID progetto.
  • RESOURCE_TYPE: il tipo di risorsa IAP, che può essere app-engine o backend-services.
  • SERVICE: il nome del servizio. Questo campo è facoltativo quando resource-type è app-engine.
  • (Facoltativo) CONDITION: condizioni IAM. Di seguito è riportata una condizione di esempio 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 in weekdays

API

Questo metodo non è consigliato perché interessa l'intero criterio IAM di una risorsa. Un errore potrebbe rimuovere il criterio da una risorsa.

  1. Ottieni le associazioni di criteri 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 valore RESOURCE_NAME che hai ottenuto in un passaggio precedente.

  2. Al file iam_policy_bindings.json ottenuto dal passaggio precedente, rimuovi le righe della versione e dell'etag, quindi aggiungi l'associazione che vuoi aggiungere per l'identificatore principale. Per maggiori informazioni, consulta Comprendere i criteri 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 in week days"
          }
        }
      ]
    }
    
  3. Aggiorna le associazioni di criteri 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 valore RESOURCE_NAME che hai ottenuto in un passaggio precedente.

Per ulteriori informazioni, consulta GetIamPolicy e SetIamPolicy.

(Facoltativo) Configurare l'accesso sensibile al contesto

Se vuoi, 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 si utilizza la federazione delle identità per la forza lavoro. Puoi comunque utilizzare i livelli di accesso basati sul contesto delle richieste con condizioni basate su indirizzo IP, ora e data.

Limitazioni quando si lavora con i pool di forza lavoro

  • IAP supporta un solo pool di forza lavoro, che può contenere un solo provider.
  • Il pool di forza lavoro, l'ID client OAuth, il secret e le applicazioni abilitate per IAP devono trovarsi tutti nella stessa organizzazione.
  • I livelli di accesso per le informazioni relative al dispositivo non sono supportati.
  • Sono supportate solo le seguenti configurazioni delle impostazioni IAP:
  • L'accesso programmatico con la federazione delle identità per la forza lavoro non è supportato.