Configurar RBAC

En este tema se explica cómo configurar el control de acceso basado en funciones (Role-Based Access Control, RBAC) en Tanzu Kubernetes Grid.

Acerca de la configuración de RBAC

Si pretende utilizar archivos estándar y no administrativos kubeconfig para el acceso al clúster, debe configurar la autorización de RBAC después de habilitar y configurar la administración de identidades. Para obtener más información sobre los archivos kubeconfig, consulte los Archivos kubeconfig de administrador y no administrador a continuación.

Para configurar la autorización de RBAC, cree uno o varios enlaces de funciones para cada clúster de carga de trabajo y de administración en el que desee utilizar los archivos estándar de no administrador kubeconfig:

  1. Después de habilitar y configurar la administración de identidades como se describe en Configurar la administración de identidades, cree uno o varios enlaces de funciones para el clúster de administración. Para obtener instrucciones, consulte Configurar RBAC para un clúster de administración a continuación.
  2. Cree uno o varios enlaces de funciones para cada clúster de carga de trabajo. Para obtener instrucciones, consulte Configurar RBAC para un clúster de carga de trabajo a continuación.

Para obtener más información sobre los enlaces de funciones, consulte Funciones y enlaces de funciones a continuación.

Archivos kubeconfig de administrador y no administrador

Para proporcionar a los usuarios acceso a un clúster de carga de trabajo o de administración, genere un archivo kubeconfig y, a continuación, comparta el archivo con esos usuarios. Si les proporciona el archivo kubeconfig de administrador para el clúster, tendrán acceso completo al clúster y no es necesario autenticarse. Sin embargo, si proporciona a los usuarios el archivo kubeconfig estándar de no administrador, deben tener una cuenta de usuario en el proveedor de identidad LDAP u OIDC, y debe configurar RBAC en el clúster para conceder permisos de acceso al usuario designado.

Para generar un archivo kubeconfig para un clúster de carga de trabajo o de administración, ejecute tanzu mc kubeconfig get en el clúster de administración o tanzu cluster kubeconfig get en el clúster de carga de trabajo. Al ejecutar cualquiera de estos comandos con o sin la opción --admin, el comando funciona de la siguiente manera:

  • Con --admin, el comando genera un archivo kubeconfig de administrador que contiene credenciales integradas. Con esta versión de admin de kubeconfig, todos los usuarios con los que lo comparta tendrán acceso completo al clúster y se omitirá la autenticación del proveedor de identidad (IdP).
  • Sin --admin, el comando genera un archivo kubeconfig estándar de no administrador que solicita a los usuarios que se autentiquen con un proveedor de identidad externo. A continuación, el proveedor de identidades comprueba la identidad del usuario antes de que el usuario pueda acceder a los recursos del clúster.

Para obtener más información sobre estos comandos, consulte:

Funciones y enlaces de funciones

Una función define un conjunto de permisos. Para definir una función dentro de un espacio de nombres específico, cree una función Role o en todo el clúster mediante la creación de un ClusterRole. Para conceder los permisos definidos en esa función a un usuario o un grupo de usuarios, debe crear un enlace de función.

Recurso Alcance Descripción
Role Espacio de nombres Define los permisos que se pueden utilizar en un espacio de nombres específico RoleBinding.
ClusterRole Clúster Define los permisos que se pueden utilizar en un ClusterRoleBinding o RoleBinding específico del espacio de nombres.
RoleBinding Espacio de nombres Concede permisos dentro de un espacio de nombres específico. Puede hacer referencia a un Role o ClusterRole.
ClusterRoleBinding Clúster Concede permisos en todos los espacios de nombres del clúster. Solo puede hacer referencia a un ClusterRole.

Las funciones de usuario predeterminadas incluyen:

  • cluster-admin: Acceso completo al clúster. Cuando se utiliza en un RoleBinding, esta función proporciona acceso completo a cualquier recurso en el espacio de nombres especificado en el enlace.
  • admin: Acceso de administrador a la mayoría de recursos en un espacio de nombres. Puede crear y modificar funciones y enlaces de funciones dentro del espacio de nombres.
  • edit: Acceso de lectura y escritura a la mayoría de los objetos de un espacio de nombres, como implementaciones, servicios y pods. No se pueden ver, crear ni modificar funciones ni enlaces de funciones.
  • view: Acceso de solo lectura a la mayoría de los objetos de un espacio de nombres. No se pueden ver, crear ni modificar funciones ni enlaces de funciones.

Para obtener más información sobre estas funciones, consulte Utilizar autorización de RBAC en la documentación de Kubernetes.

Configurar RBAC para un clúster de administración

En esta sección se explica cómo:

  1. Generar y probar un archivo kubeconfig de no administrador para el clúster de administración
  2. Crear un enlace de funciones en el clúster de administración

Generar y probar un archivo kubeconfig de no administrador para el clúster de administración

Este procedimiento permite probar el paso de inicio de sesión del proceso de autenticación si hay un navegador presente en la máquina en la que se ejecutan los comandos tanzu y kubectl. Si la máquina no tiene un navegador, consulte Autenticar usuarios en una máquina sin navegador.

  1. Exporte el archivo kubeconfig estándar para el clúster de administración a un archivo local, por ejemplo, /tmp/id_mgmt_test_kubeconfig. Tenga en cuenta que el comando no incluye la opción --admin, por lo que el archivo kubeconfig que se exporta es la versión estándar kubeconfig y no la versión admin.

    tanzu mc kubeconfig get --export-file /tmp/id_mgmt_test_kubeconfig
    

    Deberá ver la confirmación de You can now access the cluster by specifying '--kubeconfig /tmp/id_mgmt_test_kubeconfig' flag when using 'kubectl' command.

  2. Conéctese al clúster de administración mediante el archivo kubeconfig recién creado:

    kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
    

    El proceso de autenticación requiere que haya un navegador en la máquina desde la cual los usuarios se conectan a los clústeres, ya que al ejecutar los comandos kubectl se abre automáticamente la página de inicio de sesión de IdP para que los usuarios puedan iniciar sesión en el clúster. El navegador debe abrir y mostrar la página de inicio de sesión del proveedor de OIDC o una página de inicio de sesión de LDAPS.

    LDAPS:

    Página de inicio de sesión de LDAPS

    OIDC:

    Página de inicio de sesión de OIDC

    Introduzca las credenciales de una cuenta de usuario que exista en el servidor LDAP o OIDC. Después de iniciar sesión correctamente, el navegador debe mostrar lo siguiente:

    Inicio de sesión correcto

  3. Vuelva al terminal en el que ejecuta los comandos tanzu y kubectl:

    • Si ya configuró un enlace de función en el clúster para el usuario autenticado, aparece el resultado de kubectl get pods -A y se muestra la información del pod.

    • Si no ha configurado un enlace de función en el clúster, verá un mensaje que deniega el acceso de la cuenta de usuario a los pods: Error from server (Forbidden): pods is forbidden: User "[email protected]" cannot list resource "pods" in API group "" at the cluster scope. Esto sucede porque el usuario se autenticó correctamente, pero aún no tiene autorización para acceder a ningún recurso del clúster. Para autorizar al usuario a acceder a los recursos del clúster, debe Crear un enlace de función en el clúster de administración como se describe a continuación.

Crear un enlace de funciones en el clúster de administración

Para proporcionar a los usuarios que no son administradores acceso a un clúster de administración, genere y distribuya un archivo kubeconfig como se describe en Generar y probar un archivo kubeconfig de no administrador para el clúster de administración anteriormente. Para que este archivo kubeconfig funcione, primero debe configurar RBAC creando un enlace de función en el clúster de administración. Este enlace de función asigna permisos basados en funciones a usuarios o grupos de usuarios autenticados individuales.

Para crear un enlace de función:

  1. Asegúrese de utilizar el contexto admin del clúster de administración:

    kubectl config current-context
    

    Si el contexto no es el contexto del clúster de administración admin, establezca kubectl para utilizar ese contexto. Por ejemplo:

    kubectl config use-context id-mgmt-test-admin@id-mgmt-test
    
  2. Enumere sus funciones existentes:

    • Para ver la lista completa de funciones con ámbito de espacio de nombres, ejecute:

      kubectl get roles --all-namespaces
      
    • Para ver la lista completa de funciones del ámbito del clúster, ejecute:

      kubectl get clusterroles
      
  3. Para asociar un usuario determinado con una función, cree un enlace de función.

    • Un RoleBinding puede hacer referencia a un Role o ClusterRole.
    • Un ClusterRoleBinding solo puede hacer referencia a un ClusterRole.

    En el siguiente ejemplo, se crea un enlace de función de clúster denominado id-mgmt-test-rb que enlaza la función de clúster cluster-admin con [email protected] del usuario:

    kubectl create clusterrolebinding id-mgmt-test-rb --clusterrole cluster-admin --user [email protected]
    

    Para --user, especifique el nombre de usuario de LDAP u OIDC del usuario. Ha configurado el atributo de nombre de usuario y otros detalles del proveedor de identidades en la sección Administración de identidades de la interfaz del instalador de Tanzu Kubernetes Grid o configurando las variables LDAP_* u OIDC_*:

    • OIDC: El atributo de nombre de usuario se establece en el campo Notificación de nombre de usuario en Fuente de administración de identidades de OIDC en la interfaz del instalador o en la variable de configuración OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM.
    • LDAPS: El atributo de nombre de usuario se establece en el campo Nombre de usuario en Fuente de administración de identidades de LDAPS –> Atributos de búsqueda de usuario en la interfaz del instalador o en la variable de configuración LDAP_USER_SEARCH_NAME_ATTRIBUTE.

    Por ejemplo, para OIDC, el nombre de usuario suele ser la dirección de correo electrónico del usuario. Para LDAPS, es el nombre de usuario de LDAP, no la dirección de correo electrónico.

  4. Intente volver a conectarse al clúster de administración mediante el archivo kubeconfig que creó en el procedimiento anterior:

    kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
    

    Esta vez, debido a que el usuario está enlazado a la función cluster-admin en este clúster de administración, se debe mostrar la lista de pods. Puede compartir el archivo kubeconfig generado con cualquier usuario para el que configure enlaces de función en el clúster de administración.

Configurar RBAC para un clúster de carga de trabajo

En esta sección se explica cómo:

Generar y probar un archivo kubeconfig de no administrador para un clúster de carga de trabajo

Este procedimiento permite probar el paso de inicio de sesión del proceso de autenticación si hay un navegador presente en la máquina en la que se ejecutan los comandos tanzu y kubectl. Si la máquina no tiene un navegador, consulte Autenticar usuarios en una máquina sin navegador.

Para autenticar usuarios en un clúster de carga de trabajo, realice los siguientes pasos:

  1. Obtenga el archivo kubeconfig estándar para el clúster de carga de trabajo y expórtelo a un archivo. En el siguiente ejemplo, se exporta el archivo kubeconfig para el clúster my-cluster al archivo my-cluster-kubeconfig.

    tanzu cluster kubeconfig get my-cluster --export-file /tmp/my-cluster-kubeconfig
    
  2. Utilice el archivo generado para intentar ejecutar una operación en el clúster. Por ejemplo, ejecute:

    kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
    

    Debe ser redirigido a la página de inicio de sesión del proveedor de identidad. Después de iniciar sesión correctamente con una cuenta de usuario del proveedor de identidad, si ya configuró un enlace de función en el clúster para el usuario autenticado, el resultado muestra la información del pod.

    Si no ha configurado un enlace de funciones en el clúster, verá el mensaje Error from server (Forbidden): pods is forbidden: User "<user>" cannot list resource "pods" in API group "" at the cluster scope. Esto sucede porque este usuario aún no tiene ningún permiso en el clúster. Para autorizar al usuario a acceder a los recursos del clúster, debe Crear un enlace de función en un clúster de carga de trabajo.

Crear un enlace de funciones en un clúster de carga de trabajo

Para completar la configuración de administración de identidades del clúster de carga de trabajo, debe crear enlaces de funciones para los usuarios que utilicen el archivo kubeconfig que generó en el paso anterior.

  1. Establezca el contexto kubectl en el admin kubeconfig del clúster de carga de trabajo. Debe cambiar al contexto admin del clúster de carga de trabajo para poder crear un enlace de función. Por ejemplo, ejecute los dos comandos siguientes para cambiar al contexto admin:

    1. Obtenga el kubeconfig:

      tanzu cluster kubeconfig get my-cluster --admin
      
    2. Cambie el contexto:

      kubectl config use-context my-cluster-admin@my-cluster
      
  2. Para ver sus funciones existentes:

    • Para ver la lista completa de funciones con ámbito de espacio de nombres, ejecute:

      kubectl get roles --all-namespaces
      
    • Para ver la lista completa de funciones del ámbito del clúster, ejecute:

      kubectl get clusterroles
      
  3. Para asociar un usuario determinado con una función, cree un enlace de función.

    • Un RoleBinding puede hacer referencia a un Role o ClusterRole.
    • Un ClusterRoleBinding solo puede hacer referencia a un ClusterRole.

    En el siguiente ejemplo, se crea un enlace de función de clúster denominado workload-test-rb que enlaza la función de clúster cluster-admin con [email protected] del usuario:

    kubectl create clusterrolebinding workload-test-rb --clusterrole cluster-admin --user [email protected]
    

    Para --user, especifique el nombre de usuario de LDAP u OIDC del usuario. Ha configurado el atributo de nombre de usuario y otros detalles del proveedor de identidades en la sección Administración de identidades de la interfaz del instalador de Tanzu Kubernetes Grid o configurando las variables LDAP_* u OIDC_*:

    • OIDC: El atributo de nombre de usuario se establece en el campo Notificación de nombre de usuario en Fuente de administración de identidades de OIDC en la interfaz del instalador o en la variable de configuración OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM.
    • LDAPS: El atributo de nombre de usuario se establece en el campo Nombre de usuario en Fuente de administración de identidades de LDAPS –> Atributos de búsqueda de usuario en la interfaz del instalador o en la variable de configuración LDAP_USER_SEARCH_NAME_ATTRIBUTE.

    Por ejemplo, para OIDC, el nombre de usuario suele ser la dirección de correo electrónico del usuario. Para LDAPS, es el nombre de usuario de LDAP, no la dirección de correo electrónico.

  4. Utilice el archivo estándar kubeconfig que generó anteriormente para intentar volver a ejecutar una operación en el clúster. Por ejemplo, ejecute:

    kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
    

    Esta vez, debería ver la lista de pods que se ejecutan en el clúster de carga de trabajo. Esto se debe a que el usuario del archivo my-cluster-kubeconfig ha sido autenticado por el proveedor de identidad y tiene los permisos necesarios en el clúster. Puede compartir el archivo my-cluster-kubeconfig con cualquier usuario para el que configure enlaces de función en el clúster.

Qué hacer a continuación

Comparta los archivos kubeconfig generados con otros usuarios para permitirles acceder a los clústeres.

check-circle-line exclamation-circle-line close-line
Scroll to top icon