En esta página se explica cómo configurar la autenticación en clústeres de Google Kubernetes Engine (GKE) desde proveedores de identidades (IdPs) externos.
Esta página está dirigida a administradores y operadores de la plataforma, así como a administradores de identidades y cuentas que usen un IdP externo compatible con OpenID Connect (OIDC) o con el lenguaje de marcado para confirmaciones de seguridad (SAML) 2.0.
Antes de leer esta página, asegúrate de que conoces los siguientes conceptos de autenticación y OpenID:
Métodos de autenticación de proveedores de identidades externos en GKE
Recomendado: federación de identidades para los trabajadores
La federación de identidades de Workforce es una función de IAM que te permite autenticarte en Google Cloud desde cualquier IdP externo que admita OIDC o SAML 2.0. La Federación de Identidades de Workforce no requiere ninguna instalación en el clúster, funciona con clústeres Autopilot y Standard, y está integrada en Google Cloud. Para obtener más información, consulta la documentación de gestión de identidades y accesos sobre la Federación de Identidades de Workforce.
No recomendado: Identity Service for GKE
En los clústeres de GKE Standard, GKE también admite Identity Service for GKE. Identity Service para GKE se limita a los proveedores de identidades de OIDC e instala componentes adicionales en tu clúster. GKE recomienda encarecidamente usar Workforce Identity Federation en lugar de Identity Service for GKE. También debes tener en cuenta una limitación conocida de Identity Service for GKE que impide el autoescalado.
Antes de empezar
Antes de empezar, asegúrate de que has realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
Cuestiones importantes
Los sistemas sin interfaz no son compatibles con la federación de identidades de Workforce ni con Identity Service for GKE. Un flujo de autenticación basado en navegador te pide que des tu consentimiento y que autorices tu cuenta de usuario.
Usar la federación de identidades para los trabajadores en GKE
Para usar la federación de identidades de Workforce en tus clústeres de GKE, haz lo siguiente:
- Configura la federación de identidades de los trabajadores de tu organización y el proveedor de identidades externo. Para obtener instrucciones, consulta Configurar una federación de trabajadores de Identity.
- Configura el acceso desde tu proveedor de identidades externo a la consola de federación de identidades de trabajo. Google Cloud Para obtener más información, consulta Configurar el acceso de los usuarios a la consola (federado).
Configure el acceso de los usuarios mediante uno de los siguientes mecanismos de autorización:
Indica a tus usuarios que accedan a los clústeres siguiendo estos pasos:
- Inicia sesión en gcloud CLI con la identidad federada.
- Configura kubectl para que se autentique en un clúster específico ejecutando
gcloud container clusters get-credentials
.
Configurar el acceso de los usuarios a los clústeres mediante RBAC
Google Cloud usa identificadores principales para identificar a los usuarios de tus grupos de identidades de Workforce. Puedes hacer referencia a estos identificadores principales en tus políticas de control de acceso basado en roles (RBAC) de Kubernetes o en políticas de gestión de identidades y accesos. Puedes conceder permisos a usuarios concretos o a grupos de usuarios, como en los siguientes ejemplos:
Identidad | Identificador principal |
---|---|
Un solo usuario | principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/subject/SUBJECT_ATTRIBUTE_VALUE Haz los cambios siguientes:
Por ejemplo: principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com |
Todos los usuarios de un grupo | principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_IDENTITY_POOL/group/GROUP_NAME Haz los cambios siguientes:
Por ejemplo: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre |
Para ver todos los identificadores principales que admite la federación de identidades de Workforce, consulta Representar usuarios del grupo de trabajo en políticas de IAM.
En el siguiente ejemplo se muestra cómo dar acceso de solo lectura a los secretos de todo el clúster a cualquier entidad del grupo de trabajo full-time-employees
que forme parte del grupo sre
en su token de IdP.
Guarda el siguiente manifiesto de ClusterRole como
secret-viewer-cluster-role.yaml
:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "watch", "list"]
Cualquier principal al que asocies este ClusterRole puede ver los secretos.
Guarda el siguiente manifiesto de ClusterRoleBinding como
secret-viewer-cluster-role-binding.yaml
:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: users-view-secrets subjects: - kind: Group name: principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Este ClusterRoleBinding concede el ClusterRole
secret-viewer
a cualquier usuario que forme parte del gruposre
.Despliega ClusterRole y ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role.yaml kubectl apply -f secret-viewer-cluster-role-binding.yaml
Iniciar sesión y autenticarse en el clúster
- Pide al usuario que inicie sesión con la CLI de Google Cloud para Google Cloud.
El usuario puede configurar kubectl para autenticarse en el clúster de las siguientes formas:
gcloud container clusters get-credentials
Migrar clústeres de Identity Service for GKE a Workforce Identity Federation
Si usas Identity Service for GKE en clústeres de GKE, migra a la federación de identidades de los empleados. Estos métodos usan sintaxis diferentes para hacer referencia a los mismos principales, tal como se muestra en la siguiente tabla:
Sintaxis de Identity Service for GKE | Sintaxis de Workforce Identity Federation |
---|---|
amal@example.com |
principal://iam.googleapis.com/locations/global/workforcePools/full-time-employees/subject/amal@example.com
|
sre-group |
principalSet://iam.googleapis.com/locations/global/workforcePools/full-time-employees/group/sre-group
|
Para migrar un clúster a Workforce Identity Federation, sigue estos pasos:
Configura la federación de identidades de los trabajadores de tu organización y el proveedor de identidades externo. Para obtener instrucciones, consulta Configurar una federación de trabajadores de Identity.
Actualiza los manifiestos de todos los RoleBindings y ClusterRoleBindings de tus clústeres para que usen la sintaxis del identificador de Workforce Identity Federation. Usa una de las siguientes opciones:
Actualizaciones programáticas: instala y ejecuta la utilidad
gke-identity-service-migrator
. Para obtener instrucciones, consulta el archivo README del repositorioGoogleCloudPlatform/gke-utilities
.Esta utilidad busca las vinculaciones RBAC que usan la sintaxis de Identity Service for GKE y crea manifiestos que usan los identificadores principales de la federación de identidades de los empleados correspondientes.
Actualizaciones manuales: por cada enlace que haga referencia a un usuario o grupo autenticado, cree una copia independiente del archivo de manifiesto del objeto que utilice la sintaxis del identificador de la federación de identidades de la plantilla.
Aplica los manifiestos actualizados de RoleBindings y ClusterRoleBindings a tu clúster.
Comprueba que los usuarios puedan acceder a los mismos recursos cuando se autentiquen mediante Workforce Identity Federation.
Elimina las vinculaciones de RBAC obsoletas de tu clúster.
Usar Identity Service for GKE
Para configurar y usar Identity Service para GKE en tu clúster de GKE en modo estándar, los administradores del clúster deben hacer lo siguiente:
- Habilita Identity Service para GKE en un clúster.
- Configura Identity Service for GKE.
- Crea una política de control de acceso basado en roles para tu clúster.
Una vez que los administradores del clúster configuren el servicio de identidad para GKE, los desarrolladores podrán iniciar sesión y autenticarse en el clúster.
Objetos de Kubernetes creados por Identity Service for GKE
En la siguiente tabla se describen los objetos de Kubernetes que se crean cuando habilitas Identity Service para GKE en un clúster:
Objetos de Kubernetes | |
---|---|
anthos-identity-service |
Namespace Se usa en las implementaciones de Identity Service for GKE. |
kube-public |
Namespace Se usa para el archivo de configuración del cliente default . |
gke-oidc-envoy |
LoadBalancer Endpoint de las solicitudes de OIDC. Externa de forma predeterminada. Si se crea en un clúster sin endpoint de IP externa, el endpoint será interno a la nube privada virtual del clúster. Se ha creado en el espacio de nombres anthos-identity-service . |
gke-oidc-service |
ClusterIP Facilita la comunicación entre la gke-oidc-envoy
y la gke-oidc-service .Se ha creado en el espacio de nombres anthos-identity-service . |
gke-oidc-envoy |
Deployment Ejecuta un proxy expuesto a gke-oidc-envoy
LoadBalancer. Se comunica con gke-oidc-service para validar tokens de identidad. Actúa como proxy del servidor de la API de Kubernetes y suplanta la identidad de los usuarios al reenviar solicitudes al servidor de la API.Se ha creado en el espacio de nombres anthos-identity-service . |
gke-oidc-service |
Deployment Valida tokens de identidad y proporciona un webhook de admisión de validación para recursos de ClientConfig .Se ha creado en el espacio de nombres anthos-identity-service . |
gke-oidc-operator |
Deployment Concilia la configuración del cliente y el gke-oidc-envoy
LoadBalancer. Se ha creado en el espacio de nombres anthos-identity-service . |
gke-oidc-certs |
Secret Contiene la autoridad de certificación (CA) del clúster y los certificados TLS del balanceador de carga. Creado en el espacio de nombres anthos-identity-service |
default |
ClientConfig CRD Contiene parámetros de OIDC, como el método de autenticación preferido, la configuración del proveedor de identidades y las asignaciones de reclamaciones de usuarios y grupos. Se usa para validar tokens de identidad. Los administradores de clústeres la usan para configurar los ajustes de OIDC antes de distribuirlos a los desarrolladores. Creado en el espacio de nombres kube-public |
Habilitar Identity Service para GKE en un clúster
De forma predeterminada, Gestión de Identidades y Accesos (IAM) se configura como proveedor de identidades para la autenticación de clústeres. Si quieres usar OIDC con proveedores de identidades de terceros, puedes habilitar el servicio de identidad para GKE en clústeres nuevos o ya creados mediante la CLI de Google Cloud.
Habilitar Identity Service para GKE en un clúster nuevo
Para crear un clúster con Identity Service for GKE habilitado, ejecuta el siguiente comando:
gcloud container clusters create CLUSTER_NAME \
--enable-identity-service
Sustituye CLUSTER_NAME
por el nombre de tu nuevo clúster.
Habilitar Identity Service para GKE en un clúster disponible
Para habilitar Identity Service para GKE en un clúster, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--enable-identity-service
Sustituye CLUSTER_NAME
por el nombre de tu clúster.
Configurar Identity Service for GKE
Para configurar los parámetros de Identity Service for GKE, descarga y modifica el archivo default
ClientConfig.
Descarga el archivo
default
ClientConfig:kubectl get clientconfig default -n kube-public -o yaml > client-config.yaml
Actualiza la sección
spec.authentication
con los ajustes que prefieras:apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: name: cluster-name server: https://192.168.0.1:6443 authentication: - name: oidc oidc: clientID: CLIENT_ID certificateAuthorityData: OIDC_PROVIDER_CERTIFICATE extraParams: EXTRA_PARAMS issuerURI: ISSUER_URI cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc kubectlRedirectURI: KUBECTL_REDIRECT_URL scopes: SCOPES userClaim: USER groupsClaim: GROUPS userPrefix: USER_PREFIX groupPrefix: GROUP_PREFIX
Haz los cambios siguientes:
CLIENT_ID
: el ID de la aplicación cliente que envía solicitudes de autenticación al proveedor de OIDC.OIDC_PROVIDER_CERTIFICATE
: (Opcional) un certificado PEM para el proveedor de OIDC. Este campo puede ser útil si tu proveedor de OIDC usa certificados autofirmados. Identity Service for GKE incluye un conjunto de raíces públicas de forma predeterminada.EXTRA_PARAMS
: parámetros de pares clave-valor adicionales que se envían al proveedor de OIDC.- Para autorizar grupos, usa
resource=token-groups-claim
. - Para autenticar Microsoft Azure y Okta, usa
prompt=consent
. - En Cloud Identity, usa
prompt=consent,access_type=offline
.
- Para autorizar grupos, usa
ISSUER_URI
: la URL para enviar solicitudes de autorización de OIDC, comohttps://example.com/adfs
. El servidor de la API de Kubernetes usa esta URL para descubrir las claves públicas con las que verificar los tokens. La URI debe usar HTTPS. En Cloud Identity, usahttps://accounts.google.com
.KUBECTL_REDIRECT_URL
: la URL de redirección que usakubectl oidc login
para la autorización. Por lo general, tiene el formatohttp://localhost:PORT/callback
, dondePORT
es cualquier puerto mayor que1024
que estará disponible en las estaciones de trabajo de los desarrolladores, por ejemplo,http://localhost:10000/callback
. Debes registrar la URL en tu proveedor de OIDC como URL de redirección autorizada para la aplicación cliente. Si usas la identidad de Google como proveedor de OIDC, consulta las instrucciones para definir un URI de redirección.SCOPES
: los ámbitos adicionales que se enviarán al proveedor de OIDC.- Microsoft Azure y Okta requieren el permiso
offline_access
. - En Cloud Identity, usa
openid, email
para obtener tokens de ID que contengan la dirección de correo en la reclamaciónemail
.
- Microsoft Azure y Okta requieren el permiso
USER
: la reclamación de usuario del token de identidad.GROUPS
: la reclamación de grupo del token de identidad.USER_PREFIX
: prefijo que se añade a las reclamaciones de usuario para evitar conflictos con nombres ya utilizados. De forma predeterminada, se añade un prefijo de emisor aluserID
proporcionado al servidor de la API de Kubernetes (a menos que la reclamación de usuario seaemail
). El identificador de usuario resultante esISSUER_URI#USER
. Te recomendamos que uses un prefijo, pero puedes inhabilitarlo si asignas el valor-
aUSER_PREFIX
.GROUP_PREFIX
: prefijo que se añade a las reclamaciones de grupo para evitar conflictos con nombres ya existentes. Por ejemplo, si tiene dos grupos llamadosfoobar
, añada el prefijogid-
. El grupo resultante esgid-foobar
.
Aplica la configuración actualizada:
kubectl apply -f client-config.yaml
Después de aplicar esta configuración, Identity Service para GKE se ejecuta en tu clúster y atiende las solicitudes detrás del balanceador de carga
gke-oidc-envoy
. La dirección IP del campospec.server
debe ser la dirección IP del balanceador de carga. Si cambias el campospec.server
, es posible que los comandoskubectl
no funcionen.Haz una copia del archivo de configuración
client-config.yaml
:cp client-config.yaml login-config.yaml
Actualiza el archivo de configuración
login-config.yaml
con el ajusteclientSecret
de la secciónspec.authentication.oidc
.clientSecret: CLIENT_SECRET
Sustituye
CLIENT_SECRET
por el secreto compartido entre la aplicación cliente de OIDC y el proveedor de OIDC.Distribuye el archivo
login-config.yaml
actualizado a tus desarrolladores.
Configurar Identity Service for GKE en clústeres con políticas estrictas
Para configurar Identity Service para GKE de forma que funcione correctamente en clústeres que tengan políticas de red estrictas, haz lo siguiente:
- Añade una regla de cortafuegos
para el puerto TCP
15000
para permitir que tu plano de control se comunique con el webhook de validaciónClientConfig
. - Si el
gke-oidc-envoy
se crea como un balanceador de carga interno, expónlo en tu VPC. - Si tienes políticas que deniegan el tráfico en tu clúster, añade una regla de cortafuegos para el puerto TCP
8443
para permitir que la implementación degke-oidc-envoy
se comunique con la implementación degke-oidc-service
.
La versión 0.2.20 y posteriores del componente Identity Service for GKE no usan el puerto TCP 15000
. Si la versión de tu componente es la 0.2.20 o una posterior, no es necesario que añadas una regla de cortafuegos para el puerto 15000
. Para comprobar la versión de tu componente, ejecuta el siguiente comando:
kubectl describe deployment gke-oidc-envoy -n anthos-identity-service \
| grep "components.gke.io/component-name: gke-oidc" -A1
Añadir propiedades personalizadas al balanceador de carga
Después de configurar Identity Service for GKE, puedes añadir anotaciones y propiedades personalizadas, como una dirección IP estática, al gke-oidc-envoy
balanceador de carga. Para editar el servicio gke-oidc-envoy
, ejecuta el siguiente comando:
kubectl edit service gke-oidc-envoy -n anthos-identity-service
Consulta los parámetros del servicio LoadBalancer para obtener más información sobre cómo configurar el balanceo de carga TCP/UDP en GKE.
Crear una política de RBAC para el clúster
Los administradores pueden usar el control de acceso basado en roles (RBAC) de Kubernetes para conceder acceso a los usuarios autenticados del clúster. Para configurar el control de acceso basado en roles en tu clúster, debes asignar roles de control de acceso basado en roles a cada desarrollador. Para conceder acceso a los recursos de un espacio de nombres concreto, crea un rol y un RoleBinding. Para conceder acceso a los recursos de todo un clúster, crea un ClusterRole y un ClusterRoleBinding.
Por ejemplo, supongamos que un usuario necesita ver todos los objetos Secret del clúster. Sigue estos pasos para asignar los roles de RBAC necesarios a este usuario.
Guarda el siguiente manifiesto de ClusterRole como
secret-viewer-cluster-role.yaml
. Una persona a la que se le haya concedido este rol puede obtener, ver y enumerar cualquier secreto del clúster.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-viewer rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
Aplica el manifiesto de ClusterRole:
kubectl apply -f secret-viewer-cluster-role.yaml
Guarda el siguiente manifiesto de ClusterRoleBinding como
secret-viewer-cluster-role-binding.yaml
. La vinculación concede el rolsecret-viewer
a un nombre de usuario definido en el archivo de configuración del cliente.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: people-who-view-secrets subjects: - kind: User name: ISSUER_URI#USER apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-viewer apiGroup: rbac.authorization.k8s.io
Haz los cambios siguientes:
ISSUER_URI
: el URI del emisor despec.authentication.oidc.issuerURI
en el archivo de configuración del cliente.USER
: el identificador de usuario del token en el nombre de la reclamación configurado enspec.authentication.oidc.userClaim
en el archivo de configuración del cliente.
Aplica el manifiesto de ClusterRoleBinding:
kubectl apply -f secret-viewer-cluster-role-binding.yaml
Iniciar sesión y autenticarse en el clúster
Como desarrollador que recibe el archivo de configuración de OIDC de tu administrador, puedes autenticarte en tus clústeres.
Descarga el archivo
login-config.yaml
que te haya proporcionado tu administrador.Instala el SDK de la CLI de Google Cloud, que ofrece un componente OIDC independiente. Para instalarlo, ejecuta el siguiente comando:
gcloud components install kubectl-oidc
Autentícate en tu clúster:
kubectl oidc login --cluster=CLUSTER_NAME --login-config=login-config.yaml
Se abrirá un navegador web para completar el proceso de autenticación.
Una vez que te hayas autenticado, podrás ejecutar comandos de
kubectl
, como los siguientes:kubectl get pods
Inhabilitar Identity Service for GKE
Puedes inhabilitar Identity Service for GKE con la CLI de gcloud. Para inhabilitar Identity Service for GKE, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--no-enable-identity-service
Limitaciones conocidas
El componente gke-oidc-envoy
, que se encarga de autenticar tu clúster mediante Identity Service for GKE, tiene un número fijo de réplicas. Esto significa que no se ajusta automáticamente para gestionar el aumento del tráfico. En los clústeres regionales, este componente se implementa con tres réplicas.
No puedes escalar directamente la implementación de gke-oidc-envoy
. Te recomendamos que migres a la Federación de Identidades de Workforce para disfrutar de una solución más robusta y escalable.
Siguientes pasos
- Más información sobre la federación de identidades de Workforce
- Más información sobre cómo desplegar cargas de trabajo