Configurar la gestión de la autenticación a nivel de flota

En este documento se explica a los administradores de clústeres cómo configurar varios clústeres para la autenticación de proveedores de identidades de terceros mediante flotas. Google Cloud gestiona la configuración de los clústeres de una flota, lo que da como resultado un proceso de configuración más rápido y menos complejo que la configuración de clústeres individuales. Para obtener más información sobre el proceso de autenticación de proveedores externos, consulta el artículo Acerca de la autenticación con identidades de terceros.

Antes de empezar

  1. Instala y configura Google Cloud CLI:

    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. En la CLI de gcloud, selecciona el proyecto host de tu flota:
      gcloud config set project FLEET_HOST_PROJECT_ID
      Sustituye FLEET_HOST_PROJECT_ID por el ID del proyecto host de tu flota.

  2. Habilita las APIs necesarias:

    1. En la Google Cloud consola, ve a la página del selector de proyectos:

      Ir al selector de proyectos

    2. Selecciona el proyecto host de tu flota.

    3. Enable the GKE Hub and Kubernetes Engine APIs.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the APIs

  3. Asegúrate de que el administrador de tu plataforma te haya proporcionado toda la información del proveedor que necesitas para el protocolo seleccionado. Para obtener más información, consulta los siguientes documentos:

Roles obligatorios

Para obtener los permisos que necesitas para configurar clústeres a nivel de flota, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de flotas (roles/gkehub/admin) en el proyecto de host de la flota. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Habilitar la función de servicio de identidad a nivel de flota

La función de servicio de identidad a nivel de flota usa un controlador para gestionar la configuración de cada uno de los clústeres de la flota. Solo debe habilitar la función a nivel de flota en el proyecto host de la flota.

Para habilitar la función a nivel de flota, selecciona una de las siguientes opciones:

Consola

  1. En la Google Cloud consola, ve a la página Identity Service para GKE.

    Ir a Gestor de funciones

  2. Haz clic en Habilitar servicio de identidad.

gcloud

Habilita la función de servicio de identidad a nivel de flota:

gcloud container fleet identity-service enable

Configurar clústeres

Para configurar los clústeres, debes especificar la siguiente información:

  • Información sobre tu proveedor de identidades, como un ID de cliente y un secreto.
  • Información sobre los JSON Web Tokens (JWTs) que usa tu proveedor de identidades para la autenticación.
  • Cualquier ámbito o parámetro adicional que sea único para tu proveedor de identidades.

Para obtener más información sobre la información que necesitas del administrador de tu plataforma o de la persona que gestione la identidad en tu organización, consulta los siguientes documentos:

Si ya tienes configuraciones a nivel de clúster para proveedores de OIDC, al aplicar una configuración a nivel de flota al clúster, se sobrescribirán todas las especificaciones de autenticación. Además, si tienes configuraciones a nivel de clúster para proveedores que no se admiten a nivel de flota, esta configuración fallará. Para aplicar la configuración a nivel de flota, debes eliminar la configuración del proveedor.

Para configurar tus clústeres, sigue estos pasos:

Consola

  1. Selecciona los clústeres que quieras configurar:

    1. En la Google Cloud consola, ve a la página Identity Service para GKE.

      Ir a Gestor de funciones

    2. Selecciona las casillas de los clústeres que quieras configurar. Puede elegir clústeres concretos o especificar que quiere que todos los clústeres se configuren con la misma configuración de identidad. Si has configurado valores predeterminados a nivel de flota, la configuración se reconciliará con los valores predeterminados.

    3. Haz clic en Update Configuration (Actualizar configuración). Se abrirá el panel Editar configuración de clústeres de Identity Service.

    4. En la sección Proveedores de identidades, elige cómo quieres configurar los clústeres. Puedes actualizar una configuración, copiarla de otro clúster o crear una. Para crear una configuración, haz clic en Add an Identity Provider (Añadir proveedor de identidades). Aparecerá la sección Nuevo proveedor de identidades.

  2. En la sección Nuevo proveedor de identidades, define los detalles del proveedor:

    OIDC

    1. Selecciona Nuevo OpenID Connect para crear una configuración de OIDC.
    2. Especifica el nombre que quieras usar para identificar esta configuración en el campo Nombre del proveedor, que suele ser el nombre del proveedor de identidades. El nombre 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. No puedes editar este nombre una vez que hayas creado una configuración.
    3. Especifica el ID de cliente del proveedor de identidades en el campo ID de cliente.
    4. Especifica el secreto de cliente que se debe compartir entre la aplicación cliente y el proveedor de identidades en el campo Secreto de cliente.
    5. En el campo URL de la entidad emisora, especifique el URI en el que se realizan las solicitudes de autorización a su proveedor de identidades.
    6. Haga clic en Siguiente para definir los atributos de OIDC.

    Azure AD

    1. Selecciona Nuevo Azure Active Directory para crear una configuración de Azure AD.
    2. Especifica el nombre que quieras usar para identificar esta configuración en el campo Nombre del proveedor, que suele ser el nombre del proveedor de identidades. El nombre 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. No puedes editar este nombre una vez que hayas creado una configuración.
    3. Especifica el ID de cliente del proveedor de identidades en el campo ID de cliente.
    4. Especifica el secreto de cliente que se debe compartir entre la aplicación cliente y el proveedor de identidades en el campo Secreto de cliente.
    5. Especifica el cliente que es la cuenta de Azure AD que se va a autenticar en Tenant (Cliente).
    6. Haz clic en Siguiente para definir los atributos de Azure AD.

    LDAP

    1. Selecciona LDAP para crear una configuración de LDAP.
    2. Especifica el nombre que quieras usar para identificar esta configuración en el campo Nombre del proveedor, que suele ser el nombre del proveedor de identidades. El nombre 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. No puedes editar este nombre una vez que hayas creado una configuración.
    3. Haz clic en Siguiente.
    4. Especifica el nombre de host (obligatorio), el tipo de conexión LDAP y el certificado de CA codificado en base64 del servidor LDAP.
    5. Haz clic en Siguiente para configurar el servidor.
    6. Especifica el nombre completo, el filtro, el atributo de inicio de sesión y el atributo de identificador del usuario.
    7. Haz clic en Siguiente para definir los detalles del usuario.
    8. Si decide usar grupos, especifique el nombre completo, el filtro y el atributo de identificador del grupo.
    9. Haz clic en Siguiente para definir los detalles del grupo.
    10. Especifica el nombre de usuario y la contraseña de la cuenta de servicio.
    11. Haz clic en Hecho para definir el nombre de la cuenta de servicio.
  3. Haz clic en Siguiente. Se abrirá la sección Definir atributos.

  4. Defina los atributos de su proveedor de identidades. Para ver los atributos de OIDC o Azure AD, selecciona una de las siguientes opciones:

    OIDC

    • URI de redirección de kubectl: la URL de redirección y el puerto que usa la CLI de gcloud y que especifica el administrador de tu plataforma al registrarse, normalmente con el formato http://localhost:PORT/callback.
    • Autoridad de certificación (opcional): si el administrador de tu plataforma te lo proporciona, una cadena de certificado codificada en PEM para el proveedor de identidades.
    • Reclamación de grupo (opcional): reclamación JWT (nombre del campo) que usa tu proveedor para devolver los grupos de seguridad de una cuenta.
    • Prefijo de grupo (opcional): el prefijo que quieras añadir a los nombres de los grupos de seguridad para evitar conflictos con los nombres de las reglas de control de acceso si tienes configuraciones de varios proveedores de identidades (normalmente, el nombre del proveedor).
    • Proxy (opcional): dirección del servidor proxy que se usará para conectarse al proveedor de identidades, si procede. Puede que tengas que definirlo si, por ejemplo, tu clúster está en una red privada y necesita conectarse a un proveedor de identidades público. Por ejemplo: http://user:password@10.10.10.10:8888.
    • Ámbitos (opcional): ámbitos adicionales que requiera tu proveedor de identidades. Microsoft Azure y Okta requieren el permiso offline_access. Haz clic en Añadir ámbito para añadir más ámbitos si es necesario.
    • Reclamación de usuario (opcional): reclamación JWT (nombre del campo) que usa tu proveedor para identificar una cuenta. Si no especificas ningún valor, el clúster usará "sub", que es la reclamación de ID de usuario que utilizan muchos proveedores. Puedes elegir otras reclamaciones, como "email" o "name", en función del proveedor de OpenID. Las reclamaciones que no sean "email" tienen el prefijo de la URL del emisor para evitar conflictos de nombres.
    • Prefijo de usuario (opcional): el prefijo que quieras añadir a las reclamaciones de usuario para evitar conflictos con nombres ya utilizados, si no quieres usar el prefijo predeterminado.
    • Parámetros adicionales (opcional): cualquier parámetro adicional necesario para tu configuración, especificado como clave y valor del parámetro. Haz clic en Añadir parámetro para añadir más parámetros si es necesario.
    • Habilitar token de acceso (opcional): si está habilitado, permite la compatibilidad con grupos de proveedores de OIDC, como Okta.
    • Implementar Google Cloud proxy de la consola (opcional): si se habilita, se implementa un proxy que permite que la consola Google Cloud se conecte a un proveedor de identidades local al que no se puede acceder públicamente a través de Internet.

    Azure AD

    • URI de redirección de kubectl: la URL de redirección y el puerto que usa la CLI de gcloud y que especifica el administrador de tu plataforma al registrarse, normalmente con el formato http://localhost:PORT/callback.
    • Reclamación de usuario (opcional): reclamación JWT (nombre del campo) que usa tu proveedor para identificar una cuenta. Si no especifica ningún valor, el clúster usará un valor en el orden "email", "preferred_username" o "sub" para obtener los detalles del usuario.
    • Proxy (opcional): dirección del servidor proxy que se usará para conectarse al proveedor de identidades, si procede. Puede que tengas que definirlo si, por ejemplo, tu clúster está en una red privada y necesita conectarse a un proveedor de identidades público. Por ejemplo: http://user:password@10.10.10.10:8888.
  5. Haz clic en Listo.

  6. Opcional: Para añadir más proveedores a la configuración, haz clic en Añadir un proveedor de identidades y repite los pasos anteriores.

  7. Haz clic en Actualizar configuración.

De esta forma, se instalan los componentes necesarios, si es preciso, y se aplica la configuración del cliente en los clústeres seleccionados.

gcloud

Para usar la CLI de gcloud y configurar la flota, crea un recurso personalizado de Kubernetes llamado ClientConfig con campos para toda la información que necesita el clúster para interactuar con el proveedor de identidades. Para crear y usar un ClientConfig, sigue estos pasos:

  1. Crea una especificación ClientConfig en un archivo llamado auth-config.yaml. Para ver ejemplos de configuraciones de OIDC, SAML o LDAP, selecciona una de las siguientes opciones. Para ver otras configuraciones de proveedores de identidades, consulta Configuraciones específicas de proveedores.

    OIDC

    En el siguiente ejemplo de ClientConfig se muestran las configuraciones oidc y azuread. Para obtener más información sobre cuándo usar oidc o azuread, consulta Configuraciones específicas de proveedores.

    apiVersion: authentication.gke.io/v2alpha1
    kind: ClientConfig
    metadata:
      name: default
      namespace: kube-public
    spec:
      authentication:
      - name: NAME
        proxy: PROXY_URL
        oidc:
          certificateAuthorityData: CERTIFICATE_STRING
          clientID: CLIENT_ID
          clientSecret: CLIENT_SECRET
          deployCloudConsoleProxy: PROXY_BOOLEAN
          extraParams: EXTRA_PARAMS
          groupsClaim: GROUPS_CLAIM
          groupPrefix: GROUP_PREFIX
          issuerURI: ISSUER_URI
          kubectlRedirectURI: http://localhost:PORT/callback
          scopes: SCOPES
          userClaim: USER_CLAIM
          userPrefix: USER_PREFIX
      - name: azure
        azureAD:
          clientID: CLIENT_ID
          clientSecret: CLIENT_SECRET
          tenant: TENANT_UUID
          kubectlRedirectURI: http://localhost:PORT/callback
          groupFormat: GROUP_FORMAT
          userClaim: USER_CLAIM
    

    Para obtener más información sobre los campos del objeto oidc, consulta Campos OIDC de ClientConfig.

    SAML

    En el siguiente ejemplo de ClientConfig se muestra una configuración de saml:

        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: GROUPS_ATTRIBUTE
              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: <>
    

    Para obtener más información sobre estos campos, consulta Campos SAML de ClientConfig.

    LDAP

    En el siguiente ejemplo de ClientConfig se muestra una configuración de ldap:

    apiVersion: authentication.gke.io/v2alpha1
    kind: ClientConfig
    metadata:
      name: default
      namespace: kube-public
    spec:
      authentication:
      - name: ldap
        ldap:
          server:
            host: HOST_NAME
            connectionType: CONNECTION_TYPE
            certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA
          user:
            baseDn: BASE_DN
            loginAttribute: LOGIN_ATTRIBUTE
            filter: FILTER
            identifierAttribute: IDENTIFIER_ATTRIBUTE
          group:
            baseDn: BASE_DN
            filter: FILTER
            identifierAttribute: IDENTIFIER_ATTRIBUTE
          serviceAccount:
            simpleBindCredentials:
              dn: DISTINGUISHED_NAME
              password: PASSWORD
    

    Para obtener más información sobre estos campos, consulta Campos LDAP de ClientConfig.

    Puede añadir varias configuraciones de proveedor de identidades 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.

  2. Aplica ClientConfig a un clúster:

    gcloud container fleet identity-service apply \
        --membership=CLUSTER_NAME \
        --config=auth-config.yaml
    

    Sustituye CLUSTER_NAME por el nombre único de tu clúster en la flota.

El clúster instala los componentes necesarios y usa el ClientConfig que has creado. El controlador a nivel de flota gestiona la configuración del clúster. El controlador reconcilia cualquier cambio local en la configuración del clúster con la configuración a nivel de flota.

En algunas versiones de clústeres, al aplicar la configuración a nivel de flota, también se añade de forma predeterminada una configuración authentication adicional a los clústeres. Esto permite que el clúster recupere información de Grupos de Google de las cuentas de usuario que inician sesión con su ID de Google. Esta configuración se aplica a los clústeres de Google Distributed Cloud (tanto VMware como bare metal). Para obtener más información sobre la función Grupos de Google, consulta el artículo Configurar la pasarela de conexión con Grupos de Google.

Si ya no quieres que el controlador a nivel de flota gestione tu configuración (por ejemplo, si quieres usar otra opción u otras opciones de autenticación), puedes inhabilitar esta función siguiendo las instrucciones que se indican en el artículo Inhabilitar la gestión de identidades a nivel de flota.

Configuraciones específicas de proveedores

En esta sección se ofrecen directrices de configuración para proveedores de OIDC (como Azure AD y Okta), incluida una configuración de ejemplo que puede copiar y editar con sus propios detalles.

Azure AD

Esta es la configuración predeterminada para configurar la autenticación con Azure AD. Con esta configuración, el clúster puede obtener información de usuarios y grupos de Azure AD, y puedes configurar el control de acceso basado en roles (RBAC) de Kubernetes en función de los grupos. Sin embargo, si usas esta configuración, solo podrás recuperar unos 200 grupos por usuario.

Si necesitas recuperar más de 200 grupos por usuario, consulta las instrucciones de Azure AD (avanzado).

...
spec:
  authentication:
  - name: oidc-azuread
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      extraParams: prompt=consent, access_type=offline
      issuerURI: https://login.microsoftonline.com/TENANT_ID/v2.0
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: openid,email,offline_access
      userClaim: email

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

Azure AD (avanzado)

Esta configuración opcional de Azure AD permite que el clúster obtenga información de usuarios y grupos sin límite en el número de grupos por usuario mediante la API Microsoft Graph. Para obtener información sobre las plataformas que admiten esta configuración, consulta Información sobre la configuración de proveedores de identidad.

Si necesitas recuperar menos de 200 grupos por usuario, te recomendamos que uses la configuración predeterminada con un oidc en tu ClientConfig. Para obtener más información, consulta las instrucciones de Azure AD.

Todos los campos de la configuración de ejemplo son obligatorios.

...
spec:
  authentication:
  - name: azure
    azureAD:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      tenant: TENANT_UUID
      kubectlRedirectURI: http://localhost:PORT/callback
      groupFormat: GROUP_FORMAT
      userClaim: USER_CLAIM

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

Sustituye GROUP_FORMAT por el formato en el que quieras obtener la información del grupo. Este campo puede tomar valores correspondientes a ID o NAME de los grupos de usuarios. Este ajuste solo está disponible para los clústeres de las implementaciones de Google Distributed Cloud (locales).

Okta

A continuación, se muestra cómo configurar la autenticación con usuarios y grupos con Okta como proveedor de identidades. Esta configuración permite que el clúster obtenga las reclamaciones de usuarios y grupos mediante un token de acceso y el endpoint userinfo de Okta.

...
spec:
  authentication:
  - name: okta
    oidc:
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      cloudConsoleRedirectURI: https://console.cloud.google.com/kubernetes/oidc
      enableAccessToken: true
      extraParams: prompt=consent
      groupsClaim: groups
      issuerURI: https://OKTA_ISSUER_URI/
      kubectlRedirectURI: http://localhost:PORT/callback
      scopes: offline_access,email,profile,groups
      userClaim: email

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

Configurar valores predeterminados a nivel de flota

Puede especificar una configuración predeterminada a nivel de flota para la autenticación. Con esta configuración, cada nuevo clúster que registres en la flota usará automáticamente la configuración de autenticación que especifiques.

Los clústeres de miembros de la flota no se actualizan automáticamente cuando especificas una configuración predeterminada a nivel de flota. También puedes aplicar tu configuración predeterminada a esos clústeres. Para obtener más información sobre cómo gestionar la configuración a nivel de flota, consulta Gestionar funciones a nivel de flota.

Después de definir un valor predeterminado a nivel de flota, los cambios locales que se hagan en la configuración de autenticación de los clústeres individuales se sobrescribirán cuando el controlador de la flota reconcilie el clúster con la configuración predeterminada.

Para configurar una configuración predeterminada a nivel de flota, sigue estos pasos:

  1. Crea un ClientConfig en un archivo llamado fleet-default.yaml. Para obtener más información sobre cómo crear el archivo, consulta los pasos de la CLI de gcloud en la sección Configurar clústeres.
  2. Para aplicar la configuración predeterminada a nivel de flota, ejecuta uno de los siguientes comandos:

    • Si la función de servicio de identidad a nivel de flota no está habilitada, habilítala y especifica la configuración predeterminada a nivel de flota:

      gcloud container fleet identity-service enable --fleet-default-member-config=fleet-default.yaml
    • Si la función de servicio de identidad a nivel de flota está habilitada, aplica la nueva configuración predeterminada a nivel de flota:

      gcloud container fleet identity-service apply --fleet-default-member-config=default-config.yaml

    Los clústeres nuevos que registres en la flota usarán esta configuración de forma predeterminada. Los clústeres miembros de la flota no heredan automáticamente la nueva configuración predeterminada.

  3. Para aplicar la configuración predeterminada a un clúster miembro de una flota, ejecuta el siguiente comando:

    gcloud container fleet identity-service apply --origin=fleet --membership=CLUSTER_NAME

Eliminar la configuración predeterminada a nivel de flota

Para quitar la configuración predeterminada, ejecuta el siguiente comando:

gcloud container fleet identity-service delete --fleet-default-member-config

Los clústeres nuevos que registres en la flota no usarán automáticamente una configuración de autenticación.

Verificar la configuración del servicio de identidad

Una vez que hayas completado la configuración a nivel de flota, puedes verificar si los clústeres de tu flota se han configurado correctamente con la configuración del servicio de gestión de identidades que hayas especificado.

Consola

  1. En la Google Cloud consola, ve a la página Gestor de funciones.

    Ir a Gestor de funciones

    Todas las funciones habilitadas se muestran como Habilitadas en su panel.

  2. En el panel Servicio de identidad, haga clic en DETALLES. En un panel de detalles se muestra el estado de los clústeres registrados.

gcloud

Ejecuta el siguiente comando:

gcloud container fleet identity-service describe

Siguientes pasos

Una vez que hayas configurado los clústeres, continúa con la configuración del acceso de los usuarios.