Что такое RBAC forbidden access?

Ошибка RBAC: forbidden access to resource возникает, когда у пользователя или сервисного аккаунта нет необходимых прав доступа к ресурсам Kubernetes.

Причины возникновения

  • Отсутствие необходимых ролей
  • Неправильная конфигурация RoleBinding
  • Проблемы с ServiceAccount
  • Неправильные permissions
  • Проблемы с namespace
  • Конфликты ролей

Как отладить ошибку

  1. Проверь права пользователя - kubectl auth can-i get pods
  2. Проверь роли - kubectl get roles,rolebindings
  3. Проверь ServiceAccount - kubectl get serviceaccounts
  4. Проверь ClusterRoles - kubectl get clusterroles,clusterrolebindings
  5. Проверь логи - kubectl logs -n kube-system

Как исправить ошибку

1. Создай Role и RoleBinding

 1apiVersion: rbac.authorization.k8s.io/v1
 2kind: Role
 3metadata:
 4  namespace: default
 5  name: pod-reader
 6rules:
 7- apiGroups: [""]
 8  resources: ["pods"]
 9  verbs: ["get", "watch", "list"]
10---
11apiVersion: rbac.authorization.k8s.io/v1
12kind: RoleBinding
13metadata:
14  name: read-pods
15  namespace: default
16subjects:
17- kind: User
18  name: jane
19  apiGroup: rbac.authorization.k8s.io
20roleRef:
21  kind: Role
22  name: pod-reader
23  apiGroup: rbac.authorization.k8s.io

2. Настрой ClusterRole и ClusterRoleBinding

 1apiVersion: rbac.authorization.k8s.io/v1
 2kind: ClusterRole
 3metadata:
 4  name: secret-reader
 5rules:
 6- apiGroups: [""]
 7  resources: ["secrets"]
 8  verbs: ["get", "watch", "list"]
 9---
10apiVersion: rbac.authorization.k8s.io/v1
11kind: ClusterRoleBinding
12metadata:
13  name: read-secrets-global
14subjects:
15- kind: User
16  name: admin
17  apiGroup: rbac.authorization.k8s.io
18roleRef:
19  kind: ClusterRole
20  name: secret-reader
21  apiGroup: rbac.authorization.k8s.io

3. Настрой ServiceAccount

 1apiVersion: v1
 2kind: ServiceAccount
 3metadata:
 4  name: my-app-sa
 5  namespace: default
 6---
 7apiVersion: rbac.authorization.k8s.io/v1
 8kind: Role
 9metadata:
10  namespace: default
11  name: my-app-role
12rules:
13- apiGroups: [""]
14  resources: ["pods", "services"]
15  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
16---
17apiVersion: rbac.authorization.k8s.io/v1
18kind: RoleBinding
19metadata:
20  name: my-app-binding
21  namespace: default
22subjects:
23- kind: ServiceAccount
24  name: my-app-sa
25  namespace: default
26roleRef:
27  kind: Role
28  name: my-app-role
29  apiGroup: rbac.authorization.k8s.io

4. Используй ServiceAccount в Pod

1apiVersion: v1
2kind: Pod
3metadata:
4  name: my-app
5spec:
6  serviceAccountName: my-app-sa
7  containers:
8  - name: app
9    image: nginx:latest

5. Проверь и исправь permissions

1# Проверь права на конкретный ресурс
2kubectl auth can-i get pods --as=system:serviceaccount:default:my-app-sa
3
4# Проверь права на namespace
5kubectl auth can-i create deployments --as=system:serviceaccount:default:my-app-sa
6
7# Проверь права на cluster
8kubectl auth can-i get nodes --as=system:serviceaccount:default:my-app-sa

6. Используй встроенные роли

 1apiVersion: rbac.authorization.k8s.io/v1
 2kind: RoleBinding
 3metadata:
 4  name: admin-binding
 5  namespace: default
 6subjects:
 7- kind: User
 8  name: admin
 9  apiGroup: rbac.authorization.k8s.io
10roleRef:
11  kind: ClusterRole
12  name: admin
13  apiGroup: rbac.authorization.k8s.io

Как мониторить подобные ошибки

  • Мониторь события RBAC
  • Настрой алерты на forbidden ошибки
  • Проверяй права доступа регулярно
  • Логируй все попытки доступа

FAQ

В: Как проверить права пользователя?

О: Используй kubectl auth can-i для проверки конкретных прав.

В: Что делать, если ServiceAccount не работает?

О: Проверь существование ServiceAccount, правильность RoleBinding и namespace.

В: Как настроить минимальные права?

О: Используй принцип наименьших привилегий, создавай специфичные роли.

Лучшие практики

  • Используй принцип наименьших привилегий
  • Создавай специфичные роли
  • Регулярно проверяй права доступа
  • Используй ServiceAccount для приложений
  • Документируй права доступа