En esta página se explica cómo proteger una instancia de Google Kubernetes Engine (GKE) con Identity-Aware Proxy (IAP).
Información general
IAP se integra a través de Ingress para GKE. Esta integración te permite controlar el acceso a nivel de recurso de los empleados en lugar de usar una VPN.
En un clúster de GKE, el tráfico entrante se gestiona mediante el balanceo de carga HTTP(S), un componente de Cloud Load Balancing. El balanceador de carga HTTP(S) se configura normalmente mediante el controlador Ingress de Kubernetes. El controlador Ingress obtiene información de configuración de un objeto Ingress de Kubernetes asociado a uno o varios objetos Service. Cada objeto Service contiene información de enrutamiento que se usa para dirigir una solicitud entrante a un pod y un puerto concretos.
A partir de la versión 1.10.5-gke.3 de Kubernetes, puedes añadir la configuración del balanceador de carga asociando un servicio a un objeto BackendConfig. BackendConfig es una definición de recurso personalizado (CRD) que se define en el repositorio kubernetes/ingress-gce.
El controlador Ingress de Kubernetes lee la información de configuración de BackendConfig y configura el balanceador de carga en consecuencia. Un BackendConfig contiene información de configuración específica de Cloud Load Balancing y te permite definir una configuración independiente para cada servicio de backend de balanceo de carga HTTP(S).
Antes de empezar
Para habilitar IAP en GKE, necesitas lo siguiente:
- Un proyecto de la consola de Google Cloud con la facturación habilitada. Google Cloud
- Grupo de una o varias instancias de GKE, atendidas por un balanceador de carga HTTPS. El balanceador de carga se debe crear automáticamente cuando crees un objeto Ingress en un clúster de GKE.
- Consulta información sobre cómo crear un Ingress para HTTPS.
- Un nombre de dominio registrado en la dirección de tu balanceador de carga.
- Código de la aplicación para verificar que todas las solicitudes tienen una identidad.
- Consulta cómo obtener la identidad del usuario.
IAP usa un cliente de OAuth gestionado por Google para autenticar a los usuarios. Solo los usuarios de la organización pueden acceder a la aplicación con IAP. Si quieres permitir el acceso a usuarios ajenos a tu organización, consulta Habilitar las compras en aplicaciones para aplicaciones externas.
Habilitar IAP
如果您尚未配置项目的 OAuth 权限请求页面,系统会提示您进行配置。如需配置 OAuth 权限请求页面,请参阅设置 OAuth 权限请求页面。
如果您运行的是 GKE 1.24 版或更高版本,则可以使用 Kubernetes Gateway API 配置 IAP 和 GKE。为此,请完成以下步骤,然后按照配置 IAP 中的说明操作。请勿配置 BackendConfig。
设置 IAP 访问权限
-
转到 Identity-Aware Proxy 页面。
转到 Identity-Aware Proxy 页面 - 选择要使用 IAP 保护的项目。
-
选中要授予访问权限的资源旁边的复选框。
如果您没有看到资源,请确保已创建资源,并且 BackendConfig 和 Compute Engine Ingress 控制器已同步。
如需验证后端服务是否可用,请运行以下 gcloud 命令:
gcloud compute backend-services list - 在右侧面板上,点击添加主账号。
-
在显示的添加主账号对话框中,输入群组或个人(应拥有项目的 IAP-secured Web App User 角色)的电子邮件地址。
以下种类的主账号可以具有此角色:
- Google 账号:user@gmail.com
- Google 网站论坛:admins@googlegroups.com
- 服务账号:server@example.
- Google Workspace 网域:example.com
请务必添加您有权访问的 Google 账号。
- 从角色下拉列表中选择 Cloud IAP > 受 IAP 保护的网页应用用户。
- 点击保存。
配置 BackendConfig
您可以通过添加 iap 块来为 IAP 配置 BackendConfig。
将 iap 块添加到 BackendConfig
如需为 IAP 配置 BackendConfig,您需要指定 enabled 值。确保您拥有 compute.backendServices.update 权限,并将 iap 块添加到 BackendConfig。
对于 GKE 1.16.8-gke.3 版及更高版本,请使用 cloud.google.com/v1 API 版本。如果您使用的是较低的 GKE 版本,请使用 cloud.google.com/v1beta1。
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: CONFIG_DEFAULT
namespace: my-namespace
spec:
iap:
enabled: true将 Service 端口与 BackendConfig 相关联
您还需要将 Service 端口与 BackendConfig 关联以触发启用 IAP。实现此操作的一种方法是将服务的所有端口默认为 BackendConfig,您可以通过向 Service 资源添加以下注释来实现此目的。
metadata:
annotations:
cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}'验证 BackendConfig
如需测试配置,请运行 kubectl get event。如果看到消息“no BackendConfig for service port exists”,则说明您已成功将服务端口与 BackendConfig 关联,但是未找到 BackendConfig 资源。如果您没有创建 BackendConfig 资源,或在错误的命名空间中创建了该资源,或在 Service 注释中拼错了引用,则会出现此错误。
关闭 IAP
要关闭 IAP,您必须在 BackendConfig 中将 enabled 设置为 false。如果您从 BackendConfig 中删除 IAP 块,则设置将保持不变。例如,如果 IAP 已启用,而您删除了该代码块,则 IAP 仍将处于启用状态。