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

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 siguiente comando:
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

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

Configura BackendConfig

Si ejecutas clústeres de GKE versión 1.24 o posterior, puedes configurar IAP y GKE con la API de Gateway de Kubernetes. Consulta Configura IAP para obtener instrucciones.

  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. Crea un secreto de Kubernetes Secret para unir el cliente de OAuth.

    kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \
      --from-literal=client_secret=CLIENT_SECRET
    
    Reemplaza lo siguiente:

    • MY_SECRET: El nombre del secreto que se creará
    • CLIENT_ID: El ID de cliente de OAuth
    • CLIENT_SECRET: El secreto del cliente de OAuth

    Deberías recibir una confirmación, como el siguiente resultado, de que el secreto se creó correctamente:

    secret "MY_SECRET" created
    

  3. Agrega las credenciales de OAuth a BackendConfig.

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

  4. Para habilitar IAP, asocia los puertos de servicio con tu BackendConfig. Consulta Asocia un BackendConfig con el Ingress. Una forma de establecer esta asociación es hacer que todos los puertos del servicio sean predeterminados para tu BackendConfig, lo que puedes hacer si agregas la siguiente anotación a tu recurso de servicio:

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

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.

Soluciona problemas

Si el secretName al que se hace referencia no existe o no está estructurado correctamente, aparecerá uno de los siguientes mensajes de error:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. Para resolver este error, asegúrate de haber creado el secreto de Kubernetes correctamente, como se describió en el paso 2.

  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. Para solucionar este error, asegúrate de haber creado las credenciales de OAuth correctamente. Además, asegúrate de haber hecho referencia a las claves client_id y client_secret correctas.

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

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.

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.