Cómo solucionar el error 'acceso no autorizado' al aplicar un recurso de Kubernetes

KubernetesKubernetesBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Este tutorial proporciona una guía integral para comprender y configurar el Control de Acceso Basado en Roles (Role-Based Access Control, RBAC) en Kubernetes. El RBAC es un potente mecanismo que te permite controlar y gestionar el acceso a los recursos de Kubernetes, garantizando la seguridad e integridad de tu clúster. Aprenderás los conceptos clave de RBAC, cómo crear y gestionar Roles, RoleBindings, ClusterRoles y ClusterRoleBindings, y cómo solucionar los errores de acceso no autorizado.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/get -.-> lab-417506{{"Cómo solucionar el error 'acceso no autorizado' al aplicar un recurso de Kubernetes"}} kubernetes/describe -.-> lab-417506{{"Cómo solucionar el error 'acceso no autorizado' al aplicar un recurso de Kubernetes"}} kubernetes/exec -.-> lab-417506{{"Cómo solucionar el error 'acceso no autorizado' al aplicar un recurso de Kubernetes"}} kubernetes/logs -.-> lab-417506{{"Cómo solucionar el error 'acceso no autorizado' al aplicar un recurso de Kubernetes"}} kubernetes/config -.-> lab-417506{{"Cómo solucionar el error 'acceso no autorizado' al aplicar un recurso de Kubernetes"}} end

Comprender el RBAC de Kubernetes

El RBAC (Role-Based Access Control, Control de Acceso Basado en Roles) de Kubernetes es un potente mecanismo que te permite controlar y gestionar el acceso a los recursos de Kubernetes. Proporciona una forma de definir quién puede realizar qué acciones sobre qué recursos dentro de tu clúster de Kubernetes.

Conceptos de RBAC

En el RBAC de Kubernetes, hay algunos conceptos clave que debes entender:

  1. Sujetos (Subjects): Las entidades que pueden realizar acciones, como usuarios, grupos o cuentas de servicio.
  2. Roles: Definiciones de las operaciones permitidas en los recursos, como "leer", "escribir" o "administrar".
  3. Enlaces (Bindings): Las asociaciones entre sujetos y roles, que otorgan a los sujetos los permisos definidos en los roles.

RBAC en acción

Para ilustrar cómo funciona el RBAC, consideremos un ejemplo sencillo. Supongamos que tienes un clúster de Kubernetes y quieres otorgar a un usuario llamado "alice" la capacidad de ver y gestionar los pods en el espacio de nombres (namespace) "default".

Primero, crearías un Rol (Role) que defina los permisos necesarios:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-manager
rules:
  - apiGroups: [""] ## "" indicates the core API group
    resources: ["pods"]
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

A continuación, crearías un Enlace de Rol (RoleBinding) que asocie al usuario "alice" con el rol "pod-manager":

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: alice-pod-manager
subjects:
  - kind: User
    name: alice
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-manager
  apiGroup: rbac.authorization.k8s.io

Con esta configuración, el usuario "alice" podrá realizar las acciones especificadas en los pods del espacio de nombres "default".

Configurar el RBAC en Kubernetes

Configurar el RBAC en Kubernetes implica crear y gestionar Roles, ClusterRoles, RoleBindings y ClusterRoleBindings para otorgar los permisos deseados a los sujetos (usuarios, grupos o cuentas de servicio).

Definir Roles y ClusterRoles

Los Roles y ClusterRoles definen las operaciones permitidas en los recursos de Kubernetes. La diferencia entre ellos es que los Roles están limitados a un espacio de nombres (namespace) específico, mientras que los ClusterRoles son de ámbito de clúster.

A continuación, se muestra un ejemplo de un Rol que otorga acceso de lectura a los pods en el espacio de nombres "default":

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
  - apiGroups: [""] ## "" indicates the core API group
    resources: ["pods"]
    verbs: ["get", "list", "watch"]

Y un ejemplo de un ClusterRole que otorga acceso de administrador a todo el clúster:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cluster-admin
rules:
  - apiGroups: ["*"]
    resources: ["*"]
    verbs: ["*"]

Vincular Roles y ClusterRoles

Los RoleBindings y ClusterRoleBindings asocian Roles o ClusterRoles con Sujetos, otorgando los permisos especificados.

A continuación, se muestra un ejemplo de un RoleBinding que otorga el rol "pod-reader" al usuario "alice" en el espacio de nombres "default":

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: alice-pod-reader
subjects:
  - kind: User
    name: alice
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Y un ejemplo de un ClusterRoleBinding que otorga el rol "cluster-admin" al grupo "admin" en todo el clúster:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-cluster-admin
subjects:
  - kind: Group
    name: admin
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

Solucionar errores de acceso no autorizado

Al trabajar con el RBAC de Kubernetes, es posible que encuentres errores de "Acceso no autorizado", lo que indica que el sujeto (usuario, grupo o cuenta de servicio) no tiene los permisos necesarios para realizar la acción solicitada. Solucionar estos errores implica comprender la causa raíz y ajustar la configuración del RBAC en consecuencia.

Identificar el problema

El primer paso para solucionar los errores de acceso no autorizado es identificar la acción específica que el sujeto está intentando realizar y el recurso al que está intentando acceder. A menudo, puedes encontrar esta información en el mensaje de error o comprobando los registros de auditoría de Kubernetes.

Por ejemplo, un mensaje de error de acceso no autorizado podría ser el siguiente:

User "alice" cannot get pods in the namespace "default"

Esto indica que el usuario "alice" está intentando acceder al recurso "pods" en el espacio de nombres (namespace) "default", pero no tiene los permisos necesarios.

Verificar la configuración del RBAC

Una vez que hayas identificado el problema, puedes comenzar a investigar la configuración del RBAC para determinar la causa raíz. Puedes utilizar los siguientes comandos para inspeccionar los Roles, ClusterRoles, RoleBindings y ClusterRoleBindings relevantes:

kubectl get roles -n default
kubectl get rolebindings -n default
kubectl get clusterroles
kubectl get clusterrolebindings

Al examinar los permisos configurados, puedes identificar cualquier brecha o configuración incorrecta que esté causando el error de acceso no autorizado.

Resolver los errores de acceso no autorizado

Para resolver el error de acceso no autorizado, tendrás que actualizar la configuración del RBAC para otorgar los permisos necesarios al sujeto. Esto puede implicar crear un nuevo Rol o ClusterRole, o modificar uno existente, y luego vincular el rol al sujeto adecuado.

Por ejemplo, para otorgar al usuario "alice" acceso de lectura a los pods en el espacio de nombres "default", puedes crear un RoleBinding de la siguiente manera:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: default
  name: alice-pod-reader
subjects:
  - kind: User
    name: alice
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Después de aplicar esta configuración, el usuario "alice" debería poder realizar la acción solicitada sin encontrar errores de acceso no autorizado.

Resumen

En este tutorial, has aprendido cómo configurar el RBAC en Kubernetes para gestionar permisos y proteger tu clúster. Has explorado los conceptos clave del RBAC, incluyendo Sujetos (Subjects), Roles y Enlaces (Bindings), y has aplicado ejemplos prácticos para otorgar a usuarios, grupos y cuentas de servicio el acceso necesario a los recursos de Kubernetes. Al entender y configurar adecuadamente el RBAC, puedes garantizar que solo las entidades autorizadas puedan realizar acciones dentro de tu entorno de Kubernetes, mejorando la seguridad y el control general de tu clúster.