Configurar el control de acceso basado en roles (RBAC)

La autenticación suele combinarse con el control de acceso basado en roles (RBAC) de Kubernetes para proporcionar un control de acceso más preciso a los clústeres para los usuarios y las cuentas de servicio autenticados. Te recomendamos que crees políticas de RBAC que usen nombres de grupo en lugar de identificadores de usuario. Si vinculas tus políticas de RBAC explícitamente a grupos, puedes gestionar los privilegios de acceso de los usuarios por completo con tu proveedor de identidades, de modo que no sea necesario actualizar el clúster cada vez que cambien los privilegios de los usuarios. Ten en cuenta que, para configurar el control de acceso en función de la pertenencia a grupos de seguridad con OIDC, debes asegurarte de que GKE Identity Service esté configurado para obtener información sobre la pertenencia a grupos de tu proveedor de identidades.

Ejemplo

Si quieres que determinados usuarios autenticados tengan acceso a los pods del clúster, crea un ClusterRole que les conceda acceso a estos recursos, como en el siguiente ejemplo:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  # The resource type for which access is granted
  resources: ["pods"]
  # The permissions granted by the ClusterRole
  verbs: ["get", "watch", "list"]

A continuación, crea un ClusterRoleBinding para conceder los permisos del ClusterRole a los usuarios correspondientes. En este caso, los miembros del grupo de seguridad us-east1-cluster-admins y el usuario con el ID u98523-4509823:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-admins
subjects:
  # Grants anyone in the "us-east1-cluster-admins" group
  # read access to Pods in any namespace within this cluster.
- kind: Group
  name: gid-us-east1-cluster-admins # Name is case-sensitive
  apiGroup: rbac.authorization.k8s.io
  # Grants this specific user read access to Pods in any
  # namespace within this cluster
- kind: User
  name: uid-u98523-4509823
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

En el siguiente ejemplo, este ClusterRoleBinding concede permisos en el ClusterRole al grupo correspondiente con el ID 12345678-BBBb-cCCCC-0000-123456789012. Ten en cuenta que este ajuste solo es relevante para los proveedores de Azure AD y está disponible para los clústeres de Google Distributed Cloud.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-reader-binding
subjects:
  # Retrieves group information for the group ID mentioned
- kind: Group
  name: 12345678-BBBb-cCCCC-0000-123456789012
  apiGroup: rbac.authorization.k8s.io

Para obtener más información sobre el uso de RBAC, consulta Configurar el control de acceso basado en roles y Usar la autorización RBAC.

Crear un rol RBAC para el Google Cloud acceso a la consola

Los usuarios autenticados mediante proveedores de OIDC pueden iniciar sesión en clústeres desde la Google Cloud consola y desde la línea de comandos.

Los usuarios autenticados que quieran acceder a los recursos de un clúster en la Google Cloud consola deben tener los permisos de Kubernetes pertinentes. Si no quieres conceder a esos usuarios permisos más amplios, como los de un administrador del clúster, puedes crear un rol RBAC personalizado que incluya los permisos mínimos para ver los nodos, los volúmenes persistentes, los pods y las clases de almacenamiento del clúster. Puedes definir este conjunto de permisos creando un recurso ClusterRole RBACcloud-console-reader en el clúster.

cloud-console-reader concede a sus usuarios los permisos get, list y watch en los nodos, los volúmenes persistentes, los pods y las clases de almacenamiento del clúster, lo que les permite ver detalles sobre estos recursos.

kubectl

Para crear el cloud-console-reader ClusterRole y aplicarlo al clúster, ejecuta el siguiente comando:

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

A continuación, puedes conceder este ClusterRole a los usuarios al configurar tus políticas de permisos, tal como se describe en la sección anterior. Ten en cuenta que los usuarios también necesitan permisos de gestión de identidades y accesos para ver los clústeres en la Google Cloud consola.