Usa clientes de OAuth personalizados con IAP

En este documento, se describe cuándo y cómo usar clientes de OAuth personalizados para Identity-Aware Proxy (IAP).

De forma predeterminada, IAP usa clientes de OAuth administrados por Google para autenticar a los usuarios. Los clientes de OAuth administrados por Google solo se pueden usar para administrar el acceso de usuarios internos que pertenecen a una organización.

Debes usar una configuración de OAuth personalizada para hacer lo siguiente:

  • Administrar el acceso a aplicaciones habilitadas para IAP para usuarios externos que no pertenecen a tu organización
  • Administrar el acceso a aplicaciones web que se encuentran en proyectos que no pertenecen a una Google Cloud organización.
  • Mostrar información de marca personalizada en las pantallas de consentimiento durante la autenticación

Puedes configurar clientes de OAuth personalizados en IAP o directamente en tu plataforma.

Cuando usas clientes de OAuth personalizados, debes configurar la pantalla de consentimiento de OAuth. Para que la marca personalizada aparezca en la pantalla de consentimiento, debes enviar tu aplicación para la verificación de Google. Para obtener más información sobre el proceso de verificación, consulta Configura tu pantalla de consentimiento de OAuth.

Cuando configuras clientes de OAuth personalizados, eres responsable de crear y administrar las credenciales, lo que incluye almacenar de forma segura el secreto del cliente y compartirlo con los clientes autorizados cuando sea necesario.

Compara los clientes de OAuth administrados por Google y los clientes de OAuth personalizados

Los clientes de OAuth administrados por Google no pueden acceder de forma programática a las aplicaciones protegidas por IAP. Sin embargo, se puede acceder de forma programática a las aplicaciones protegidas por IAP que usan el cliente de OAuth administrado por Google con un cliente de OAuth independiente configurado a través del programmatic_clients parámetro de configuración o un JWT de cuenta de servicio.

En la siguiente tabla, se proporciona una comparación entre el cliente de OAuth administrado por Google y un cliente de OAuth personalizado.

Cliente de OAuth administrado por Google Cliente de OAuth personalizado
Usuarios Solo para uso interno Socios internos y externos
Marca Google Cloud marca Marca propiedad del cliente
Configuración de OAuth Configurado por Google Configurado por el cliente
Credenciales de OAuth Administrado por Google Administrado por el cliente
Acceso a la aplicación Solo flujo del navegador Flujo del navegador y acceso programático

Configura la página de marca

Para configurar la página de marca personalizada con la Google Cloud consola de Google Cloud, haz lo siguiente:

  1. En la Google Cloud consola de Google Cloud, ve a la página Marca de OAuth:

    Ir a Marca

  2. Haz clic en Comenzar.

  3. En Nombre de la app, ingresa el nombre de la aplicación para la pantalla de consentimiento.

  4. En Correo electrónico de asistencia del usuario, ingresa la dirección de correo electrónico del administrador para obtener asistencia.

  5. En Público, selecciona Interno para restringir el acceso a los usuarios de tu organización o Externo para permitir el acceso a los usuarios que no pertenecen a tu organización.

  6. En Información de contacto, ingresa el correo electrónico del administrador para comunicarte con las apps protegidas por los clientes de OAuth. Configurarás los clientes de OAuth en un paso posterior.

  7. Para crear la configuración de OAuth, haz clic en Crear.

Configura clientes de OAuth personalizados en IAP

En esta sección, se describe cómo configurar clientes de OAuth personalizados en IAP.

Crea el cliente de OAuth personalizado

En esta sección, se describe cómo crear clientes de OAuth personalizados con la Google Cloud consola de Google Cloud. Puedes configurar clientes de OAuth de IAP personalizados en cualquier nivel de la jerarquía de recursos.

Para crear clientes de OAuth personalizados para un recurso con la Google Cloud consola, haz lo siguiente:

  1. En la Google Cloud consola de Google Cloud, ve a la página IAP.

    Ve a IAP

  2. En la pestaña Aplicaciones, en la lista de recursos, busca el recurso que deseas configurar.

    Para los recursos a nivel del proyecto, haz lo siguiente:

    • Crea el cliente de OAuth con la Google Cloud consola:

      1. En la columna Acciones, haz clic en Más opciones > Configuración.

      2. En el diálogo Configuración, selecciona OAuth personalizado.

      3. Si no configuraste una pantalla de consentimiento, haz lo siguiente:

        1. Haz clic en Configurar pantalla de consentimiento.

        2. Sigue las instrucciones para configurar la página de marca que se proporcionan anteriormente en este documento.

      4. En el diálogo de configuración de IAP, haz clic en Generar credenciales automáticamente. IAP genera un nuevo cliente de OAuth y un secreto para usar con este recurso. En la plataforma de autenticación de Google, el campo URIs de redireccionamiento autorizados contiene una entrada en el siguiente formato:

        https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
      5. Para acceder al ID y al secreto del cliente, haz clic en Descargar credenciales. Las credenciales se guardan en un archivo con formato JSON. Debido a que el archivo contiene credenciales sensibles para acceder a los recursos, asegúrate de que esté protegido o borrado.

      6. Para guardar la configuración de OAuth de IAP y aplicar el cliente de OAuth a IAP, haz clic en Guardar.

Aplica clientes de OAuth personalizados a IAP

En esta sección, se describe cómo aplicar clientes de OAuth a IAP. Puedes usar este método en lugar de aplicar los clientes directamente en tu plataforma.

  1. Para crear el cliente de OAuth personalizado, sigue las Google Cloud instrucciones de la consola que se proporcionan anteriormente en este documento.

  2. Aplica el cliente de OAuth personalizado.

    gcloud

    Para aplicar el cliente de OAuth personalizado con gcloud CLI, haz lo siguiente:

    1. Crea un archivo YAML de configuración.

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

      Reemplaza lo siguiente:

      • CLIENT_ID: Es el ID de cliente de las credenciales de OAuth que generaste antes.
      • CLIENT_SECRET: Es el secreto del cliente de las credenciales de OAuth que generaste antes.
    2. Para establecer la configuración de OAuth, haz una de las siguientes acciones:

      • Para establecer la configuración de OAuth a nivel del proyecto, ejecuta el siguiente comando:
      gcloud iap settings set iap-oauth.yaml

      Para establecer la configuración en otro nivel de la jerarquía de recursos, usa una de las siguientes marcas en lugar de la marca --project. Establecer clientes de OAuth personalizados en un nivel de la jerarquía de recursos proporciona la misma marca personalizada a todos los servicios que se ejecutan dentro de ese nivel.

      * <code>--folder=<var>FOLDER_ID</var></code>
      * <code>--organization=<var>ORGANIZATION_ID</var></code>
      
      • Para establecer la configuración en un servicio específico, ejecuta el siguiente comando:
      gcloud iap settings set iap-oauth.yaml \
          --project=PROJECT_ID \
          --resource-type= RESOURCE_TYPE \
          --region=REGION \
          --service=SERVICE_NAME

      Reemplaza lo siguiente:

      • PROJECT_ID: Es el ID del recurso del proyecto. Para establecer la configuración en otro nivel, usa una de las siguientes marcas en lugar de la marca --project:

        • --folder=FOLDER_ID
        • --organization=ORGANIZATION_ID
      • RESOURCE_TYPE: Reemplaza con uno de los siguientes tipos de recursos, según el recurso:

        • app-engine
        • backend-services
        • cloud-run
        • compute
        • folder
        • forwarding-rule
        • iap_web
        • organization
      • REGION: Es la región en la que ejecutas tu servicio de Cloud Run.

      • SERVICE_NAME: Es el nombre de tu servicio.

    Terraform

    Para aplicar el cliente de OAuth personalizado con Terraform, haz lo siguiente:

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

    Reemplaza lo siguiente:

    • IAP_RESOURCE_NAME: Es el nombre del recurso iap_settings para el servicio, que tiene el siguiente formato: projects/PROJECT_NUMBER/iap_web/REGION/services/SERVICE_NAME.
    • CLIENT_ID: Es el ID de cliente de las credenciales de OAuth que generaste antes.
    • CLIENT_SECRET: Es el secreto del cliente de las credenciales de OAuth que generaste antes.

    API de REST

    1. Crea un archivo JSON de configuración.

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

      Reemplaza lo siguiente:

      • CLIENT_ID: Es el ID de cliente de las credenciales de OAuth que generaste antes.
      • CLIENT_SECRET: Es el secreto del cliente de las credenciales de OAuth que generaste antes.
    2. Aplica el archivo de configuración.

      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
      

Para probar que IAP protege tus aplicaciones web con los clientes de OAuth, consulta Prueba el acceso.

Configuración heredada de clientes de OAuth personalizados en un recurso

En las siguientes secciones, se describen los métodos heredados para configurar clientes de OAuth personalizados en IAP para ciertos tipos de recursos. Puedes omitir esta sección si usaste el método que se describió anteriormente en este documento.

App Engine

En esta sección, se describe cómo habilitar clientes de OAuth personalizados en App Engine.

gcloud

Before you set up your project and IAP, you need an up-to-date version of 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 the following command.
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

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. Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.

  2. Guarda el ID y el secreto del cliente de OAuth.

  3. Ejecuta el siguiente comando para preparar un archivo settings.json.

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

  4. Ejecuta el siguiente comando para habilitar 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"
    

Después de habilitar IAP, puedes usar Google Cloud CLI para modificar la política de acceso de IAP con la función de IAM roles/iap.httpsResourceAccessor. Obtén más información sobre cómo administrar funciones y permisos.

GKE

En esta sección, se describe cómo habilitar clientes de OAuth personalizados en 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.

Servicio de backend del balanceador de cargas

Para los usuarios de Compute Engine y Cloud Run, en esta sección, se describe cómo configurar clientes de OAuth en IAP para el servicio de backend del balanceador de cargas.

gcloud

Antes de configurar tu IAP y tu proyecto, necesitas una versión actualizada de gcloud CLI. Si deseas obtener instrucciones para instalar gcloud CLI, consulta Instala la CLI de gcloud.

  1. Para autenticarte, usa Google Cloud CLI y ejecuta el siguiente comando:
    gcloud auth login
  2. Para acceder, sigue la URL que aparece.
  3. Después de acceder, copia el código de verificación que aparece y pégalo en la línea de comandos.
  4. Ejecuta el siguiente comando para especificar el proyecto que contiene el recurso que deseas proteger con IAP.
    gcloud config set project PROJECT_ID
  5. Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
  6. Guarda el ID y el secreto del cliente de OAuth.
  7. Para habilitar IAP, ejecuta el comando con alcance global o regional.

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

Después de habilitar IAP, puedes usar gcloud CLI para modificar la política de acceso de IAP con la función de IAM roles/iap.httpsResourceAccessor. Obtén más información sobre cómo administrar funciones y permisos.

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://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME"
    

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.

Prueba el acceso

Después de configurar tu cliente de OAuth personalizado, puedes probar que IAP lo usa para proteger tu servicio haciendo lo siguiente:

  1. En la página IAP, en la pestaña Aplicaciones, consulta las aplicaciones que administra IAP.

  2. Accede a la URL de una de las aplicaciones. Si accedes a la aplicación por primera vez desde que configuraste la pantalla de consentimiento, verás la pantalla de consentimiento que configuraste antes.