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:
En la Google Cloud consola de Google Cloud, ve a la página Marca de OAuth:
Haz clic en Comenzar.
En Nombre de la app, ingresa el nombre de la aplicación para la pantalla de consentimiento.
En Correo electrónico de asistencia del usuario, ingresa la dirección de correo electrónico del administrador para obtener asistencia.
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.
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.
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:
En la Google Cloud consola de Google Cloud, ve a la página IAP.
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:
En la columna Acciones, haz clic en Más opciones > Configuración.
En el diálogo Configuración, selecciona OAuth personalizado.
Si no configuraste una pantalla de consentimiento, haz lo siguiente:
Haz clic en Configurar pantalla de consentimiento.
Sigue las instrucciones para configurar la página de marca que se proporcionan anteriormente en este documento.
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
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.
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.
Para crear el cliente de OAuth personalizado, sigue las Google Cloud instrucciones de la consola que se proporcionan anteriormente en este documento.
Aplica el cliente de OAuth personalizado.
gcloud
Para aplicar el cliente de OAuth personalizado con gcloud CLI, haz lo siguiente:
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.
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-enginebackend-servicescloud-runcomputefolderforwarding-ruleiap_weborganization
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 recursoiap_settingspara 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
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.
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.
-
Para autenticarte, usa Google Cloud CLI y ejecuta el siguiente comando:
gcloud auth login - Para acceder, sigue la URL que aparece.
- Después de acceder, copia el código de verificación que aparece y pégalo en la línea de comandos.
-
Ejecuta el siguiente comando para especificar el proyecto que contiene el recurso que deseas proteger con IAP.
gcloud config set project PROJECT_ID - Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
- Guarda el ID y el secreto del cliente de OAuth.
-
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
Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
Guarda el ID y el secreto del cliente de OAuth.
Ejecuta el siguiente comando para preparar un archivo
settings.json.cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret":" CLIENT_SECRET" } } EOFEjecuta 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.
Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
Crea un secreto de Kubernetes Secret para unir el cliente de OAuth.
Reemplaza lo siguiente:kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \ --from-literal=client_secret=CLIENT_SECRET
MY_SECRET: El nombre del secreto que se crearáCLIENT_ID: El ID de cliente de OAuthCLIENT_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
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_SECRETPara 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 clavesclient_idyclient_secretcorrectas.
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.
-
Para autenticarte, usa Google Cloud CLI y ejecuta el siguiente comando:
gcloud auth login - Para acceder, sigue la URL que aparece.
- Después de acceder, copia el código de verificación que aparece y pégalo en la línea de comandos.
-
Ejecuta el siguiente comando para especificar el proyecto que contiene el recurso que deseas proteger con IAP.
gcloud config set project PROJECT_ID
- Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
- Guarda el ID y el secreto del cliente de OAuth.
-
Para habilitar IAP, ejecuta el comando con alcance global o regional.
Alcance global Alcance regionalgcloud compute backend-services update BACKEND_SERVICE_NAME \ --global \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRETgcloud 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
Sigue las instrucciones en Crea clientes de OAuth para IAP para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
Guarda el ID y el secreto del cliente de OAuth.
Ejecuta el siguiente comando para preparar un archivo
settings.json.cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret": "CLIENT_SECRET" } } EOFEjecuta 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:
En la página IAP, en la pestaña Aplicaciones, consulta las aplicaciones que administra IAP.
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.