Personalizar una configuración de OAuth para habilitar IAP

En este documento se describe cuándo y cómo personalizar una configuración de OAuth para Identity-Aware Proxy (IAP).

IAP usa un cliente de OAuth gestionado por Google para autenticar a los usuarios.

El cliente OAuth gestionado por Google restringe el acceso a los usuarios de la misma organización cuando acceden a aplicaciones habilitadas para IAP a través de un navegador.

Cuándo usar una configuración de OAuth personalizada

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

  • Para permitir el acceso a aplicaciones habilitadas para IAP a usuarios ajenos a la organización.
  • Para mostrar la información de tu marca durante la autenticación.
  • Para habilitar el acceso programático a tu aplicación.

Cuando personalizas la configuración de OAuth, debes configurar la pantalla de consentimiento de OAuth. Para ello, la información de marca de tu aplicación debe pasar por el proceso de verificación de Google. Para obtener más información sobre el proceso de verificación, consulta Configurar la pantalla de consentimiento de OAuth.

Eres responsable de crear y gestionar las credenciales de un cliente de OAuth personalizado. Esto incluye almacenar el secreto de cliente de forma segura y compartirlo con los usuarios autorizados cuando sea necesario.

Comparación entre el cliente de OAuth gestionado por Google y el cliente de OAuth personalizado

Los clientes de OAuth gestionados por Google no pueden acceder de forma programática a aplicaciones protegidas por IAP. Sin embargo, se puede seguir accediendo de forma programática a las aplicaciones protegidas por IAP que usen el cliente de OAuth gestionado por Google mediante otro cliente de OAuth configurado a través del ajuste programmatic_clients o de un JWT de cuenta de servicio.

En la siguiente tabla se comparan el cliente de OAuth gestionado por Google y un cliente de OAuth personalizado.

Cliente de OAuth gestionado por Google Cliente de OAuth personalizado
Usuarios Solo para uso interno Internas y externas
Brand Google Cloud marca Marca propiedad del cliente
Configuración de OAuth Configurado por Google Configuración del cliente
Credenciales de OAuth Gestionado por Google Gestionada por el cliente
Acceso a aplicaciones Solo flujo del navegador Flujo del navegador y acceso programático
.

Habilitar IAP con una configuración de cliente de OAuth personalizada

En las siguientes secciones se explica cómo habilitar las compras en la aplicación mediante una configuración de cliente OAuth personalizada para diferentes recursos.

App Engine

Consola

Archivo de inclusión dinámica

Si no has configurado la pantalla de consentimiento de OAuth de tu proyecto, se te pedirá que lo hagas. Para configurar la pantalla de consentimiento de OAuth, consulta el artículo Configurar la pantalla de consentimiento de OAuth.

Configurar el acceso a IAP

  1. Ve a la página Identity-Aware Proxy.
    Ve a la página Identity-Aware Proxy
  2. Selecciona el proyecto que quieras proteger con IAP.
  3. Seleccione la casilla situada junto al recurso al que quiera conceder acceso.
  4. En el panel lateral de la derecha, haz clic en Añadir principal.
  5. En el cuadro de diálogo Añadir principales que aparece, introduce las direcciones de correo de los grupos o las personas que deban tener el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.

    Los siguientes tipos de principales pueden tener este rol:

    • Cuenta de Google: usuario@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: servidor@example.
    • Dominio de Google Workspace: example.com

    Asegúrate de añadir una cuenta de Google a la que tengas acceso.

  6. En la lista desplegable Roles, selecciona Cloud IAP > IAP-secured Web App User (Cloud IAP > Usuario de aplicación web protegida con IAP).
  7. Haz clic en Guardar.

Activando IAP

  1. En la página Identity-Aware Proxy, en APLICACIONES, busca la aplicación a la que quieras restringir el acceso. Para activar IAP en un recurso, haz lo siguiente:
  2. En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que quieres que IAP proteja tu recurso. Una vez que hayas activado IAP, se requerirán credenciales de inicio de sesión para todas las conexiones con tu balanceador de carga. Solo se concederá acceso a las cuentas que tengan el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.

gcloud

在设置项目和 IAP 之前,您需要最新版本的 gcloud CLI。如需了解如何安装 gcloud CLI,请参阅安装 gcloud CLI。

  1. 如需进行身份验证,请使用 Google Cloud CLI 并运行以下命令。
    gcloud auth login
  2. 如需登录,请访问显示的网址。
  3. 登录后,复制显示的验证码并将其粘贴到命令行中。
  4. 运行以下命令,指定包含要使用 IAP 保护的资源的项目。
    gcloud config set project PROJECT_ID
  5. 按照为 IAP 创建 OAuth 客户端中的说明配置 OAuth 权限请求页面和创建 OAuth 客户端。
  6. 保存 OAuth 客户端 ID 和密钥。
  7. 如需启用 IAP,请运行以下命令。
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

启用 IAP 后,您可以使用 gcloud CLI 通过 IAM 角色 roles/iap.httpsResourceAccessor 修改 IAP 访问权限政策。详细了解如何管理角色和权限。

API

  1. Sigue las instrucciones de Crear clientes de OAuth para compras en aplicaciones para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.

  2. Guarda el ID y el secreto de 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"
    

Una vez que hayas habilitado IAP, puedes usar la CLI de Google Cloud para modificar la política de acceso de IAP con el rol de gestión de identidades y accesos roles/iap.httpsResourceAccessor. Más información sobre cómo gestionar roles y permisos

Compute Engine

Consola

Si no has configurado la pantalla de consentimiento de OAuth de tu proyecto, se te pedirá que lo hagas. Para configurar la pantalla de consentimiento de OAuth, consulta el artículo Configurar la pantalla de consentimiento de OAuth.

Si ejecutas clústeres de GKE con la versión 1.24 o posterior, puedes configurar IAP y GKE mediante la API Gateway de Kubernetes. Para ello, sigue estos pasos y, a continuación, las instrucciones de Configurar IAP. No configures BackendConfig.

Configurar el acceso a IAP

  1. Ve a la página Identity-Aware Proxy.
    Ve a la página Identity-Aware Proxy.
  2. Selecciona el proyecto que quieras proteger con IAP.
  3. Seleccione la casilla situada junto al recurso al que quiera conceder acceso.

    Si no ves un recurso, asegúrate de que se haya creado y de que el controlador de entrada BackendConfig de Compute Engine esté sincronizado.

    Para verificar que el servicio de backend está disponible, ejecuta el siguiente comando de gcloud:

    gcloud compute backend-services list
  4. En el panel lateral de la derecha, haz clic en Añadir principal.
  5. En el cuadro de diálogo Añadir principales que aparece, introduce las direcciones de correo de los grupos o las personas que deban tener el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.

    Los siguientes tipos de principales pueden tener este rol:

    • Cuenta de Google: usuario@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: servidor@example.
    • Dominio de Google Workspace: example.com

    Asegúrate de añadir una cuenta de Google a la que tengas acceso.

  6. En la lista desplegable Roles, selecciona Cloud IAP > IAP-secured Web App User (Cloud IAP > Usuario de aplicación web protegida por IAP).
  7. Haz clic en Guardar.

Activando IAP

  1. En la página Identity-Aware Proxy (Proxy con reconocimiento de identidad), en APPLICATIONS (APLICACIONES), busca el balanceador de carga que sirve el instance group al que quieres restringir el acceso. Para activar IAP en un recurso, haz lo siguiente:
    Para habilitar IAP, haz lo siguiente:
    • Al menos un protocolo de la configuración de frontend del balanceador de carga debe ser HTTPS. Consulta información sobre cómo configurar un balanceador de carga.
    • Necesitas los permisos compute.backendServices.update, clientauthconfig.clients.create, clientauthconfig.clients.update y clientauthconfig.clients.getWithSecret. Estos permisos se conceden mediante roles, como el rol Editor de proyecto. Para obtener más información, consulta Gestionar el acceso a recursos protegidos por IAP.
  2. En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que quieres que IAP proteja tu recurso. Una vez que hayas activado IAP, se requerirán credenciales de inicio de sesión para todas las conexiones a tu balanceador de carga. Solo se concederá acceso a las cuentas que tengan el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.

gcloud

在设置项目和 IAP 之前,您需要最新版本的 gcloud CLI。如需了解如何安装 gcloud CLI,请参阅安装 gcloud CLI。

  1. 如需进行身份验证,请使用 Google Cloud CLI 并运行以下命令。
    gcloud auth login
  2. 如需登录,请访问显示的网址。
  3. 登录后,复制显示的验证码并将其粘贴到命令行中。
  4. 运行以下命令,指定包含要使用 IAP 保护的资源的项目。
    gcloud config set project PROJECT_ID
  5. 按照为 IAP 创建 OAuth 客户端中的说明配置 OAuth 权限请求页面和创建 OAuth 客户端。
  6. 保存 OAuth 客户端 ID 和密钥。
  7. 如需启用 IAP,请运行全局范围或区域范围的命令。

    全局范围
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --global \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    区域范围
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --region REGION_NAME \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
        

启用 IAP 后,您可以使用 gcloud CLI 通过 IAM 角色 roles/iap.httpsResourceAccessor 修改 IAP 访问权限政策。详细了解如何管理角色和权限。

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.

Cloud Run

Consola

Si no has configurado la pantalla de consentimiento de OAuth de tu proyecto, se te pedirá que lo hagas. Para configurar la pantalla de consentimiento de OAuth, consulta Configurar la pantalla de consentimiento de OAuth.

Configurar el acceso a IAP

  1. Abre la página Identity-Aware Proxy.
    Ir a Identity-Aware Proxy
  2. Selecciona el proyecto que quieras proteger con IAP.
  3. En Aplicaciones, marca la casilla situada junto al servicio de backend del balanceador de carga al que quieras añadir miembros.
  4. En el panel de la derecha, haz clic en Añadir miembro.
  5. En el cuadro de diálogo Añadir miembros, introduce las cuentas de los grupos o usuarios que deban tener el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto. Pueden ser miembros los siguientes tipos de cuentas:

    • Cuenta de Google: usuario@gmail.com. También puede ser una cuenta de Google Workspace, como usuario@google.com u otro dominio de Google Workspace.
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: servidor@example.
    • Dominio de Google Workspace: example.com
  6. Selecciona Cloud IAP > Usuario de aplicaciones web protegidas mediante IAP en la lista Roles.

  7. Haz clic en Guardar.

Activando IAP

  1. En la página de compras en la aplicación, en Aplicaciones, busca el servicio de backend del balanceador de carga al que quieras restringir el acceso. Haz clic en el interruptor IAP para habilitar las compras en la aplicación en un recurso.
  2. En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que quieres que IAP proteja tu recurso. Después de activar IAP, se requieren credenciales de inicio de sesión para todas las conexiones con tu balanceador de carga. Solo se concederá acceso a las cuentas que tengan el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.
  3. Para autorizar a IAP a enviar tráfico al servicio de backend de Cloud Run, sigue las instrucciones que se indican en el artículo Añadir principales a un servicio para añadir el siguiente principal y rol.

    • Principal: service-[PROJECT-NUMBER]@gcp-sa-iap.
    • Rol: Invocador de Cloud Run

gcloud

  1. Sigue las instrucciones de Crear clientes de OAuth para compras en aplicaciones para configurar la pantalla de consentimiento de OAuth y crear el cliente de OAuth.
  2. Guarda el ID y el secreto de cliente de OAuth.
  3. Si aún no lo has hecho, crea una cuenta de servicio ejecutando el siguiente comando. Si ya has creado una cuenta de servicio, al ejecutar el comando no se crearán cuentas de servicio duplicadas.
    gcloud beta services identity create \
        --service=iap.googleapis.com --project=PROJECT_ID
    
  4. Concede el permiso de invocador a la cuenta de servicio que has creado en el paso anterior ejecutando el siguiente comando.
    gcloud run services add-iam-policy-binding SERVICE-NAME \
        --member='serviceAccount:service-PROJECT-NUMBER@gcp-sa-iap.' \
        --role='roles/run.invoker'
    
  5. Habilita IAP ejecutando el comando de ámbito global o regional, en función de si el servicio de backend del balanceador de carga es global o regional. Usa el ID y el secreto de cliente de OAuth del paso anterior.

    Ámbito global

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

    Ámbito regional

    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --region REGION_NAME \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    
    Sustituye lo siguiente:

    • BACKEND_SERVICE_NAME: el nombre del servicio de backend.
    • CLIENT_ID: el ID de cliente de OAuth del paso anterior.
    • CLIENT_SECRET: el secreto de cliente de OAuth del paso anterior.
    • REGION_NAME: la región en la que quieres habilitar IAP.

Una vez que hayas habilitado IAP, puedes usar la CLI de Google Cloud para modificar la política de acceso de IAP con el rol roles/iap.httpsResourceAccessor de Gestión de Identidades y Accesos. Consulta más información sobre cómo gestionar roles y permisos.

Google Kubernetes Engine

Consola

Si no has configurado la pantalla de consentimiento de OAuth de tu proyecto, se te pedirá que lo hagas. Para configurar la pantalla de consentimiento de OAuth, consulta el artículo Configurar la pantalla de consentimiento de OAuth.

Si ejecutas clústeres de GKE con la versión 1.24 o posterior, puedes configurar IAP y GKE mediante la API Gateway de Kubernetes. Para ello, sigue estos pasos y, a continuación, las instrucciones de Configurar IAP. No configures BackendConfig.

Configurar el acceso a IAP

  1. Ve a la página Identity-Aware Proxy.
    Ve a la página Identity-Aware Proxy.
  2. Selecciona el proyecto que quieras proteger con IAP.
  3. Seleccione la casilla situada junto al recurso al que quiera conceder acceso.

    Si no ves un recurso, asegúrate de que se haya creado y de que el controlador de entrada BackendConfig de Compute Engine esté sincronizado.

    Para verificar que el servicio de backend está disponible, ejecuta el siguiente comando de gcloud:

    gcloud compute backend-services list
  4. En el panel lateral de la derecha, haz clic en Añadir principal.
  5. En el cuadro de diálogo Añadir principales que aparece, introduce las direcciones de correo de los grupos o las personas que deban tener el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.

    Los siguientes tipos de principales pueden tener este rol:

    • Cuenta de Google: usuario@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: servidor@example.
    • Dominio de Google Workspace: example.com

    Asegúrate de añadir una cuenta de Google a la que tengas acceso.

  6. En la lista desplegable Roles, selecciona Cloud IAP > IAP-secured Web App User (Cloud IAP > Usuario de aplicación web protegida por IAP).
  7. Haz clic en Guardar.

Activando IAP

  1. En la página Identity-Aware Proxy (Proxy con reconocimiento de identidad), en APPLICATIONS (APLICACIONES), busca el balanceador de carga que sirve el instance group al que quieres restringir el acceso. Para activar IAP en un recurso, haz lo siguiente:
    Para habilitar IAP, haz lo siguiente:
    • Al menos un protocolo de la configuración de frontend del balanceador de carga debe ser HTTPS. Consulta información sobre cómo configurar un balanceador de carga.
    • Necesitas los permisos compute.backendServices.update, clientauthconfig.clients.create, clientauthconfig.clients.update y clientauthconfig.clients.getWithSecret. Estos permisos se conceden mediante roles, como el rol Editor de proyecto. Para obtener más información, consulta Gestionar el acceso a recursos protegidos por IAP.
  2. En la ventana Activar IAP que aparece, haz clic en Activar para confirmar que quieres que IAP proteja tu recurso. Una vez que hayas activado IAP, se requerirán credenciales de inicio de sesión para todas las conexiones a tu balanceador de carga. Solo se concederá acceso a las cuentas que tengan el rol Usuario de aplicaciones web protegidas mediante IAP en el proyecto.

GKE

配置 BackendConfig

如果您运行的是 GKE 集群 1.24 版或更高版本,则可以使用 Kubernetes Gateway API 配置 IAP 和 GKE。如需查看相关说明,请参阅配置 IAP。

  1. 按照为 IAP 创建 OAuth 客户端中的说明配置 OAuth 权限请求页面和创建 OAuth 客户端。

  2. 创建一个 Kubernetes Secret 来封装 OAuth 客户端。

    kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \
      --from-literal=client_secret=CLIENT_SECRET
    
    请替换以下内容:

    • MY_SECRET:要创建的 Secret 的名称

    • CLIENT_ID:OAuth 客户端 ID

    • CLIENT_SECRET:OAuth 客户端密钥

    您应该会收到类似以下输出的确认信息,表明 Secret 已成功创建:

    secret "MY_SECRET" created
    

  3. 将 OAuth 凭证添加到 BackendConfig。

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

  4. 通过将 Service 端口与 BackendConfig 相关联来启用 IAP。请参阅将 BackendConfig 与 Ingress 关联。建立这种关联的一种方法是将服务的所有端口默认设置为 BackendConfig,为此,您可以将以下注解添加到 Service 资源中:

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

启用 IAP 后,您可以使用 gcloud CLI 通过 IAM 角色 roles/iap.httpsResourceAccessor 修改 IAP 访问权限政策。详细了解如何管理角色和权限。

问题排查

如果您引用的 secretName 不存在或结构不正确,系统会显示以下出错提示之一:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. 如需解决此错误,请确保已按照第 2 步中的说明正确创建了 Kubernetes Secret。

  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. 如需解决此错误,请确保您正确创建了 OAuth 凭据。此外,请确保您引用了正确的 client_id 和 client_secret 密钥。