Что такое RBAC forbidden access?
Ошибка RBAC: forbidden access to resource
возникает, когда у пользователя или сервисного аккаунта нет необходимых прав доступа к ресурсам Kubernetes.
Причины возникновения
- Отсутствие необходимых ролей
- Неправильная конфигурация RoleBinding
- Проблемы с ServiceAccount
- Неправильные permissions
- Проблемы с namespace
- Конфликты ролей
Как отладить ошибку
- Проверь права пользователя -
kubectl auth can-i get pods
- Проверь роли -
kubectl get roles,rolebindings
- Проверь ServiceAccount -
kubectl get serviceaccounts
- Проверь ClusterRoles -
kubectl get clusterroles,clusterrolebindings
- Проверь логи -
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
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. Используй встроенные роли
Как мониторить подобные ошибки
- Мониторь события RBAC
- Настрой алерты на forbidden ошибки
- Проверяй права доступа регулярно
- Логируй все попытки доступа
FAQ
В: Как проверить права пользователя?
О: Используй kubectl auth can-i
для проверки конкретных прав.
В: Что делать, если ServiceAccount не работает?
О: Проверь существование ServiceAccount, правильность RoleBinding и namespace.
В: Как настроить минимальные права?
О: Используй принцип наименьших привилегий, создавай специфичные роли.
Лучшие практики
- Используй принцип наименьших привилегий
- Создавай специфичные роли
- Регулярно проверяй права доступа
- Используй ServiceAccount для приложений
- Документируй права доступа