Configurar clústeres miembros de la flota para la autenticación SAML

En este documento se describe cómo pueden configurar los administradores de clústeres o los operadores de aplicaciones los clústeres de Kubernetes para que admitan la autenticación de un proveedor de lenguaje de marcado para confirmaciones de seguridad (SAML) de terceros. Para obtener más información, consulta el artículo Acerca de la autenticación con identidades de terceros.

Limitaciones

Debes usar un tipo de clúster que admita SAML.

Antes de empezar

  1. Install the Google Cloud CLI.

  2. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  3. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  4. Después de inicializar gcloud CLI, actualízala e instala los componentes necesarios:

    gcloud components update
    gcloud components install kubectl
  5. Asegúrate de que el administrador de tu plataforma te ha proporcionado toda la información que necesitas sobre el proveedor. Para obtener más información, consulta Compartir detalles del proveedor.

Configurar el clúster

Para configurar un clúster para la autenticación mediante SAML, debes configurar un recurso personalizado de Kubernetes llamado ClientConfig con información sobre el proveedor de identidades y los parámetros que el proveedor necesita para devolver información de los usuarios.

Para editar el default ClientConfig, asegúrate de que puedes conectarte a tu clúster kubectl y, a continuación, ejecuta el siguiente comando:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-public edit clientconfig default

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 spec.authentication.saml como se muestra en el siguiente ejemplo. No modifiques ningún dato predeterminado que ya se haya escrito.

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
  - name: NAME
    saml:
      attributeMapping:
        ATTRIBUTE_KEY_1: ATTRIBUTE_CEL_EXPRESSION_1
        ATTRIBUTE_KEY_2: ATTRIBUTE_CEL_EXPRESSION_2
      groupsAttribute: GROUPS_ATTRIBUTE
      groupPrefix: GROUP_PREFIX
      idpEntityID: ENTITY_ID
      idpSingleSignOnURI: SIGN_ON_URI
      idpCertificateDataList: IDP_CA_CERT
      userAttribute: USER_ATTRIBUTE
      userPrefix: USER_PREFIX
    certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
    preferredAuthentication: PREFERRED_AUTHENTICATION
    server: <>
# Rest of the resource is managed by Google. DO NOT MODIFY.
...

Puedes añadir varias configuraciones de proveedor de identidades OIDC, LDAP y SAML al mismo ClientConfig. El clúster intenta autenticarse con cada configuración en el orden en que se definen y se detiene después de la primera autenticación correcta. En el siguiente ejemplo de ClientConfig se definen varios proveedores de identidad en un orden específico:

apiVersion: authentication.gke.io/v2alpha1
kind: ClientConfig
metadata:
  name: default
  namespace: kube-public
spec:
  authentication:
  - aws:
      region: us-west-2
    name: AWS Login
  - ldap:
  # Multiple lines are omitted here.
  - saml:
  # Multiple lines are omitted here.
  - azureAD:
  # Multiple lines are omitted here.
  - oidc:
    name: Okta OIDC
  # Multiple lines are omitted here.
  - oidc:
    name: Google OIDC
  # Multiple lines are omitted here.

Campos SAML de ClientConfig

En la siguiente tabla se describen los campos del objeto ClientConfig saml. Los campos que debes añadir dependen de los tokens de tu proveedor de identidades y de cómo haya configurado el proveedor el administrador de tu plataforma.

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.