Configurar clústeres para GKE Identity Service con SAML

Este documento está dirigido a administradores de clústeres u operadores de aplicaciones que quieran configurar GKE Identity Service en clústeres concretos para que los desarrolladores y otros usuarios puedan iniciar sesión en los clústeres con sus credenciales de identidad de un proveedor de lenguaje de marcado para confirmaciones de seguridad (SAML). En esta guía se da por hecho que has leído la descripción general de Identity Service para GKE. Las instrucciones de este documento presuponen que GKE Identity Service ya se ha registrado con tu proveedor de identidades como aplicación cliente.

Antes de empezar

  • Antes de empezar la configuración, asegúrate de que el administrador de tu plataforma te ha proporcionado toda la información necesaria de Registrar el servicio de identidad de GKE con tu proveedor.
  • Asegúrate de que tienes instaladas las siguientes herramientas de línea de comandos:

    • Usa la versión 466.0.0 de Google Cloud CLI o una posterior, que incluye gcloud, la herramienta de línea de comandos para interactuar con Google Cloud. Si necesitas instalar Google Cloud CLI, consulta la guía de instalación.
    • kubectl para ejecutar comandos en clústeres de Kubernetes. Si necesitas instalar kubectl, sigue estas instrucciones.

    Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas ya están instaladas.

  • Asegúrate de haber inicializado la CLI de gcloud para usarla con el proyecto en el que están registrados los clústeres.

Configurar el clúster

El servicio de identidad de GKE usa un tipo de recurso personalizado de Kubernetes (CRD) especial llamado ClientConfig para configurar los clústeres, con campos para obtener información sobre el proveedor de identidades y los parámetros que necesita para devolver información de los usuarios.

kubectl

Para editar tu ClientConfig predeterminado, asegúrate de que puedes conectarte a tu clúster con kubectl y ejecuta el siguiente comando:

kubectl --kubeconfig=KUBECONFIG_PATH edit ClientConfigs default -n kube-public

Sustituye KUBECONFIG_PATH por la ruta al archivo kubeconfig de tu clúster (por ejemplo, $HOME/.kube/config).

Un editor de texto carga el recurso ClientConfig de tu clúster. Añade el objeto saml como se indica en el fragmento.

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
  - name: NAME
   saml:
     idpEntityID: ENTITY_ID
     idpSingleSignOnURI: SIGN_ON_URI
     idpCertificateDataList: IDP_CA_CERT
     userAttribute: USER_ATTRIBUTE
     groupsAttribute: {'<var name="user attribute">GROUPS_ATTRIBUTE</var>'}}
     userPrefix: USER_PREFIX
     groupPrefix: GROUP_PREFIX
     attributeMapping:
       ATTRIBUTE_KEY_1 : ATTRIBUTE_CEL_EXPRESSION_1
       ATTRIBUTE_KEY_2 : ATTRIBUTE_CEL_EXPRESSION_2
  certificateAuthorityData: CERTIFICATE_STRING
  preferredAuthentication: PREFERRED_AUTHENTICATION
  server: <>

# Rest of the resource is managed by Google. DO NOT MODIFY.
...

Puedes configurar varios proveedores de identidades en tu ClientConfig según tus requisitos. De esta forma, se simplifica la gestión y se ofrece flexibilidad, ya que puedes configurar diversos métodos de autenticación en un recurso de configuración unificado. En el siguiente ejemplo ClientConfig se definen varios proveedores de identidad en el orden de precedencia de autenticación requerido.

apiVersion: v1
items:
- apiVersion: authentication.gke.io/v2alpha1
  kind: ClientConfig
...
  spec:
    authentication:
    - aws:
        region: us-west-2
      name: AWS Login
    - ldap:
    ...
    - saml:
      ...
    - azureAD:
      ...
    - oidc:
      name: Okta OIDC
      ...
    -oidc:
      name: Google OIDC
      ...

En la siguiente tabla se describen los campos del objeto ClientConfig saml. Los campos que debes añadir dependen de tu proveedor de identidad y de las opciones de configuración que haya elegido el administrador de tu plataforma al configurar el proveedor para Identity Service for GKE.

Campo Obligatorio Descripción Formato
name El nombre que quieras usar para identificar esta configuración, normalmente el nombre del proveedor de identidades. El nombre de una configuración debe empezar por una letra, seguida de un máximo de 39 letras minúsculas, números o guiones, y no puede acabar en guion. Cadena
idpEntityID El ID de entidad SAML del proveedor de SAML, especificado en formato URI. Por ejemplo: https://www.idp.com/saml. URL String
idpSingleSignOnURI yes El endpoint de inicio de sesión único del proveedor de SAML, especificado en formato URI. Por ejemplo: https://www.idp.com/saml/sso. URL String
idpCertificateDataList Corresponde a los certificados del proveedor de identidades que se usan para verificar la respuesta SAML. Estos certificados deben estar codificados en Base64 estándar y tener formato PEM. Solo se admiten dos certificados como máximo para facilitar la rotación de certificados del proveedor de identidades. Cadena
userAttribute No Nombre del atributo de la respuesta SAML que contiene el nombre de usuario. Cadena
groupsAttribute No Nombre del atributo de la respuesta SAML que contiene la información del grupo del usuario. Cadena
userPrefix No El prefijo que quiere añadir a las reclamaciones de usuario para evitar conflictos con nombres ya existentes, si no quiere usar el prefijo predeterminado. Cadena
groupPrefix No El prefijo que quieres anteponer a los nombres de los grupos de seguridad. De esta forma, se evitan conflictos con los nombres de las reglas de control de acceso si tienes configuraciones de varios proveedores de identidades (normalmente, el nombre del proveedor). Cadena
attributeMapping No La asignación de atributos de usuario adicionales. Cadena
certificateAuthorityData No Si el administrador de la plataforma lo proporciona, se trata de una cadena de certificado codificada en PEM para el proveedor de identidades. Incluye la cadena resultante en certificateAuthorityData como una sola línea. Cadena
preferredAuthentication No Nombre del método de autenticación preferido configurado en el clúster. Cadena

Una vez que hayas completado el archivo ClientConfig, guárdalo para actualizar el archivo ClientConfig de tu clúster. Si has cometido algún error de sintaxis, se te pedirá que vuelvas a editar la configuración para corregirlo.

Siguientes pasos

Una vez que se haya aplicado la configuración, configura el acceso de los usuarios a los clústeres.