Utilizzare client OAuth personalizzati con IAP

Questo documento descrive quando e come utilizzare i client OAuth personalizzati per Identity-Aware Proxy (IAP).

Per impostazione predefinita, IAP utilizza i client OAuth gestiti da Google per autenticare gli utenti. I client OAuth gestiti da Google possono essere utilizzati solo per gestire l'accesso per gli utenti interni che fanno parte di un'organizzazione.

Devi utilizzare una configurazione OAuth personalizzata per eseguire le seguenti operazioni:

  • Gestire l'accesso alle applicazioni abilitate per IAP per gli utenti esterni che non fanno parte della tua organizzazione.
  • Gestire l'accesso alle applicazioni web che si trovano in progetti non appartenenti a un' Google Cloud organizzazione.
  • Visualizzare informazioni sul brand personalizzate nelle schermate per il consenso durante l'autenticazione.

Puoi configurare i client OAuth personalizzati su IAP o direttamente sulla tua piattaforma.

Quando utilizzi client OAuth personalizzati, devi configurare la schermata per il consenso OAuth. Affinché il branding personalizzato venga visualizzato nella schermata per il consenso, devi inviare la tua applicazione per la verifica di Google. Per saperne di più sulla procedura di verifica, consulta Configurare la schermata per il consenso OAuth.

Quando configuri i client OAuth personalizzati, hai la responsabilità di creare e gestire le credenziali, il che include l'archiviazione sicura del client secret e la sua condivisione con i client autorizzati, se necessario.

Confrontare i client OAuth gestiti da Google e i client OAuth personalizzati

I client OAuth gestiti da Google non possono accedere in modo programmatico alle applicazioni protette da IAP. Tuttavia, le applicazioni protette da IAP che utilizzano il client OAuth gestito da Google possono comunque essere accessibili in modo programmatico utilizzando un client OAuth separato configurato tramite l'impostazione programmatic_clients o un JWT dell'account di servizio.

La tabella seguente fornisce un confronto tra il client OAuth gestito da Google e un client OAuth personalizzato.

Client OAuth gestito da Google Client OAuth personalizzato
Utenti Solo interno Interni ed esterni
Brand Google Cloud brand Brand di proprietà del cliente
Configurazione OAuth Configurata da Google Configurata dal cliente
Credenziali OAuth Gestite da Google Gestite dal cliente
Accesso all'applicazione Solo flusso del browser Flusso del browser e accesso programmatico

Configurare la pagina del branding

Per configurare la pagina del branding personalizzato utilizzando la Google Cloud console, procedi nel seguente modo:

  1. Nella Google Cloud console, vai alla pagina Branding di OAuth:

    Vai a Branding

  2. Fai clic su Inizia.

  3. In Nome app, inserisci il nome dell'applicazione per la schermata per il consenso.

  4. In Email di assistenza utenti, inserisci l'indirizzo email dell'amministratore per l'assistenza.

  5. Per Pubblico, seleziona Interno per limitare l'accesso agli utenti della tua organizzazione o Esterno per consentire l'accesso agli utenti esterni alla tua organizzazione.

  6. In Informazioni di contatto, inserisci l'indirizzo email dell'amministratore da contattare per le app protette dai client OAuth. Configurerai i client OAuth in un passaggio successivo.

  7. Per creare la configurazione OAuth, fai clic su Crea.

Configurare i client OAuth personalizzati in IAP

Questa sezione descrive come configurare i client OAuth personalizzati in IAP.

Puoi creare un client OAuth personalizzato per IAP utilizzando la Google Cloud console nei seguenti modi:

Indipendentemente dal metodo utilizzato, assicurati di aver configurato la pagina del branding prima di creare il client OAuth. Il formato dell'URI di reindirizzamento richiesto viene mostrato in entrambi i metodi.

Creare il client OAuth personalizzato

Questa sezione descrive come creare client OAuth personalizzati utilizzando la Google Cloud console. Puoi configurare i client OAuth IAP personalizzati a qualsiasi livello della gerarchia delle risorse.

Per creare client OAuth personalizzati per una risorsa utilizzando la Google Cloud console, utilizza uno dei seguenti metodi:

Metodo 1: creare un client OAuth utilizzando la Google Cloud console

Utilizza questo metodo quando vuoi creare il client OAuth separatamente, ad esempio prima di configurare IAP per le tue risorse. In questo caso, devi aggiungere manualmente l'URI di reindirizzamento IAP.

  1. Nella Google Cloud console, vai ad API e servizi > Credenziali.

  2. Fai clic su Crea credenziali, quindi seleziona ID client OAuth.

  3. Per Tipo di applicazione, seleziona Applicazione web.

  4. Nel campo Nome, inserisci un nome descrittivo per il client OAuth.

  5. Fai clic su Crea. Prendi nota dell'ID client generato.

  6. Dopo aver creato il client OAuth, vai alla sezione URI di reindirizzamento autorizzati della pagina dei dettagli del client OAuth per il client OAuth appena creato.

  7. Fai clic su Aggiungi URI e inserisci il seguente URI di reindirizzamento autorizzato specifico per IAP:

    https://iap.googleapis.com/v1/oauth/clientIds/YOUR_CLIENT_ID:handleRedirect

    Sostituisci YOUR_CLIENT_ID con l'ID client ottenuto nel passaggio precedente.

  8. Fai clic su Salva.

Metodo 2: creare un client OAuth utilizzando le credenziali generate automaticamente da IAP

Utilizza questo metodo per consentire a IAP di creare e configurare il client OAuth per te e aggiungere automaticamente l'URI di reindirizzamento richiesto.

  1. Nella Google Cloud console, vai alla pagina IAP.

    Vai a IAP

  2. Nella scheda Applicazioni, nell'elenco delle risorse, trova la risorsa che vuoi configurare.

    Per le risorse a livello di progetto, procedi nel seguente modo:

    • Crea il client OAuth utilizzando la Google Cloud console:

      1. Nella colonna Azioni, fai clic su Altre opzioni > Impostazioni.

      2. Nella finestra di dialogo Impostazioni, seleziona OAuth personalizzato.

      3. Se non hai configurato una schermata per il consenso, procedi nel seguente modo:

        1. Fai clic su Configura schermata per il consenso.

        2. Segui le istruzioni per configurare la pagina del branding fornite in precedenza in questo documento.

      4. Nella finestra di dialogo delle impostazioni di IAP, fai clic su Genera automaticamente le credenziali. IAP genera un nuovo client OAuth e un nuovo client secret da utilizzare con questa risorsa. Nella piattaforma di autenticazione Google, il campo URI di reindirizzamento autorizzati contiene una voce nel seguente formato:

        https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
      5. Per accedere all'ID client e al client secret, fai clic su Scarica credenziali. Le credenziali vengono salvate in un file in formato JSON. Poiché il file contiene credenziali sensibili per l'accesso alle risorse, assicurati che sia protetto o eliminato.

      6. Per salvare la configurazione OAuth di IAP e applicare il client OAuth a IAP, fai clic su Salva.

Applicare i client OAuth personalizzati a IAP

Questa sezione descrive come applicare i client OAuth a IAP. Puoi utilizzare questo metodo anziché applicare i client direttamente sulla tua piattaforma.

  1. Per creare il client OAuth personalizzato, segui le Google Cloud istruzioni della console fornite in precedenza in questo documento.

  2. Applica il client OAuth personalizzato.

    gcloud

    Per applicare il client OAuth personalizzato utilizzando gcloud CLI:

    1. Crea un file YAML delle impostazioni.

      cat << EOF > iap-oauth.yaml
      accessSettings:
      oauthSettings:
        clientId: CLIENT_ID
        clientSecret: CLIENT_SECRET
      EOF
      

      Sostituisci quanto segue:

      • CLIENT_ID: l'ID client delle credenziali OAuth che hai generato in precedenza.
      • CLIENT_SECRET: il client secret delle credenziali OAuth che hai generato in precedenza.
    2. Per impostare la configurazione OAuth, esegui una delle seguenti operazioni:

      • Per impostare la configurazione OAuth a livello di progetto, esegui il comando seguente:
      gcloud iap settings set iap-oauth.yaml

      Per impostare la configurazione a un altro livello della gerarchia delle risorse, utilizza uno dei seguenti flag anziché il flag --project. L'impostazione di client OAuth personalizzati a un livello della gerarchia delle risorse fornisce lo stesso branding personalizzato a tutti i servizi eseguiti all'interno di quel livello.

      * <pre>--folder=<var>FOLDER_ID</var></pre>
      * <code>--organization=<var>ORGANIZATION_ID</var></code>
      
      • Per impostare la configurazione su un servizio specifico, esegui il comando seguente:
      gcloud iap settings set iap-oauth.yaml \
          --project=PROJECT_ID \
          --resource-type= RESOURCE_TYPE \
          --region=REGION \
          --service=SERVICE_NAME

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID della risorsa progetto. Per impostare la configurazione a un altro livello, utilizza uno dei seguenti flag anziché il flag --project:

        • --folder=FOLDER_ID
        • --organization=ORGANIZATION_ID
      • RESOURCE_TYPE: sostituisci con uno dei seguenti tipi di risorse, a seconda della risorsa:

        • app-engine
        • backend-services
        • cloud-run
        • compute
        • folder
        • forwarding-rule
        • iap_web
        • organization
      • REGION: la regione in cui esegui il servizio Cloud Run.

      • SERVICE_NAME: il nome del tuo servizio.

    Terraform

    Per applicare il client OAuth personalizzato utilizzando Terraform:

    resource "google_iap_settings" "iap_settings" {
    name = IAP_RESOURCE_NAME
    access_settings {
      oauth_settings {
          oauth_client_id = CLIENT_ID
          oauth_client_secret = CLIENT_SECRET
      }
    }
    }
    

    Sostituisci quanto segue:

    • IAP_RESOURCE_NAME: il nome della risorsa iap_settings per il servizio, che ha il seguente formato: projects/PROJECT_NUMBER/iap_web/REGION/services/SERVICE_NAME
    • CLIENT_ID: l'ID client delle credenziali OAuth che hai generato in precedenza
    • CLIENT_SECRET: il client secret delle credenziali OAuth che hai generato in precedenza

    API REST

    1. Crea un file JSON delle impostazioni.

      cat << EOF > iap-oauth.json
      {
      "accessSettings": {
        "oauthSettings": {
          "clientId": "CLIENT_ID",
          "clientSecret": "CLIENT_SECRET"
        }
      }
      }
      EOF

      Sostituisci quanto segue:

      • CLIENT_ID: l'ID client delle credenziali OAuth che hai generato in precedenza.
      • CLIENT_SECRET: il client secret delle credenziali OAuth che hai generato in precedenza.
    2. Applica il file delle impostazioni.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)"
      -H "Content-Type: application/yaml" \
      "https://iap.googleapis.com/v1/projects/cb-managed-ingress-demo/iap_web/forwarding_rule-us-central1/services/psc-fr:iapSettings?update_mask=iapSettings.accessSettings.oauthSettings.oauthClientId,iapSettings.accessSettings.oauthSettings.oauthClientSecret" \
      -d @iap-oauth.json
      

Per verificare che le tue applicazioni web siano protette da IAP con i client OAuth, consulta Controllare l'accesso.

Configurazione precedente dei client OAuth personalizzati su una risorsa

Le sezioni seguenti descrivono i metodi precedenti per configurare i client OAuth personalizzati in IAP per determinati tipi di risorse. Puoi saltare questa sezione se hai utilizzato il metodo descritto in precedenza in questo documento.

App Engine

Questa sezione descrive come attivare i client OAuth personalizzati su App Engine.

gcloud

Prima di configurare il progetto e IAP, devi avere una versione aggiornata di gcloud CLI. Per istruzioni su come installare gcloud CLI, vedi Installa gcloud CLI.

  1. Per l'autenticazione, utilizza Google Cloud CLI ed esegui il seguente comando.
    gcloud auth login
  2. Per accedere, segui l'URL visualizzato.
  3. Dopo aver eseguito l'accesso, copia il codice di verifica visualizzato e incollalo nella riga di comando.
  4. Esegui il seguente comando per specificare il progetto che contiene la risorsa che vuoi proteggere con IAP.
    gcloud config set project PROJECT_ID
  5. Segui le istruzioni riportate in Creazione di client OAuth per IAP per configurare la schermata per il consenso OAuth e creare il client OAuth.
  6. Salva l'ID client OAuth e il client secret.
  7. Per abilitare IAP, esegui il seguente comando.
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

Dopo aver abilitato IAP, puoi utilizzare gcloud CLI per modificare il criterio di accesso IAP utilizzando il ruolo IAM roles/iap.httpsResourceAccessor. Scopri di più sulla gestione di ruoli e autorizzazioni.

API

  1. Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.

  2. Save the OAuth client ID and secret.

  3. Run the following command to prepare a settings.json file.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled": true,
        "oauth2ClientId": "CLIENT_ID",
        "oauth2ClientSecret":" CLIENT_SECRET"
      }
    }
    EOF
    

  4. Run the following command to enable IAP.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default 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"
    

After you enable IAP, you can use the Google Cloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

GKE

Questa sezione descrive come attivare i client OAuth personalizzati su GKE.

Configure the BackendConfig

If you are running GKE clusters version 1.24 or later, you can configure IAP and GKE by using the Kubernetes Gateway API. See Configure IAP for instructions.

  1. Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.

  2. Create a Kubernetes Secret to wrap the OAuth client.

    kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \
      --from-literal=client_secret=CLIENT_SECRET
    
    Replace the following:

    • MY_SECRET: The name of the secret to create
    • CLIENT_ID: The OAuth client ID
    • CLIENT_SECRET: The OAuth client secret

    You should receive confirmation, like the following output, that the Secret was successfully created:

    secret "MY_SECRET" created
    

  3. Add the OAuth credentials to the BackendConfig.

    apiVersion: cloud.google.com/v1
    kind: BackendConfig
    metadata:
      name: CONFIG_DEFAULT
      namespace: my-namespace
    spec:
    iap:
      enabled: true
      oauthclientCredentials:
        secretName: MY_SECRET
    

  4. Enable IAP by associating Service ports with your BackendConfig. See Associating BackendConfig with your Ingress. One way to make this association is to make all ports for the service default to your BackendConfig, which you can do by adding the following annotation to your Service resource:

    metadata:
      annotations:
          beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}}'
    

After you enable IAP, you can use the gcloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

Troubleshooting

If the secretName you referenced doesn't exist or isn't structured properly, one of the following error messages will display:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. To resolve this error, make sure that you've created the Kubernetes Secret correctly as described in step 2.

  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. To resolve this error, make sure that you've created the OAuth credentials correctly. Also, make sure that you referenced the correct client_id and client_secret keys.

Servizio di backend del bilanciatore del carico

Per gli utenti di Compute Engine e Cloud Run, questa sezione descrive come configurare i client OAuth in IAP per il servizio di backend del bilanciatore del carico.

gcloud

Before you set up your project and IAP, you need an up-to-date version of the gcloud CLI. For instructions on how to install the gcloud CLI, see Install the gcloud CLI.

  1. To authenticate, use the Google Cloud CLI and run the following command.
    gcloud auth login
  2. To sign in, follow the URL that appears.
  3. After you sign in, copy the verification code that appears and paste it in the command line.
  4. Run the following command to specify the project that contains the resource that you want to protect with IAP.
    gcloud config set project PROJECT_ID
  5. Follow the instructions in Creating OAuth clients for IAP. to configure the OAuth consent screen and create the OAuth client.
  6. Save the OAuth client ID and secret.
  7. To enable IAP, run either the globally or regionally scoped command.

    Global scope
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --global \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    Regional scope
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --region REGION_NAME \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
        

After you enable IAP, you can use the gcloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

API

  1. Segui le istruzioni riportate in Creazione di client OAuth per IAP per configurare la schermata per il consenso OAuth e creare il client OAuth.

  2. Salva l'ID client OAuth e il client secret.

  3. Esegui questo comando per preparare un file settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled": true,
        "oauth2ClientId": "CLIENT_ID",
        "oauth2ClientSecret": "CLIENT_SECRET"
      }
    }
    EOF
    

  4. Esegui questo comando per abilitare IAP.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME"
    

Dopo aver abilitato IAP, puoi utilizzare gcloud CLI per modificare i criteri di accesso IAP utilizzando il ruolo IAM roles/iap.httpsResourceAccessor. Scopri di più sulla gestione di ruoli e autorizzazioni.

Controllare l'accesso

Dopo aver configurato il client OAuth personalizzato, puoi verificare che IAP lo utilizzi per proteggere il tuo servizio procedendo nel seguente modo:

  1. Nella pagina IAP, nella scheda Applicazioni, visualizza le applicazioni gestite da IAP.

  2. Accedi all'URL di una delle applicazioni. Se accedi all'applicazione per la prima volta dopo aver configurato la schermata per il consenso, vedrai la schermata per il consenso che hai configurato in precedenza.