Kubernetes Rol Tabanlı Erişim Kontrolü (RBAC)
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Rol Tabanlı Erişim Kontrolü (RBAC)
Kubernetes’in Rol Tabanlı Erişim Kontrolü (RBAC) adında bir yetkilendirme modülü vardır ve bu modül API sunucusuna kullanım izinleri ayarlamaya yardımcı olur.
RBAC’nin izin modeli üç ayrı bölümden oluşmaktadır:
- Role\ClusterRole – Gerçek izin. Bir dizi izni temsil eden kurallar içerir. Her kural, kaynaklar ve fiiller içerir. Fiil, kaynağa uygulanacak eylemdir.
- Konu (Kullanıcı, Grup veya ServiceAccount) – İzinleri alacak nesne.
- RoleBinding\ClusterRoleBinding – Role\ClusterRole ile konu arasındaki bağlantı.

“Roller” ile “ClusterRoller” arasındaki fark, rolün nerede uygulanacağıdır – bir “Rol” yalnızca bir belirli namespace için erişim verirken, bir “ClusterRol” tüm namespace’lerde kullanılabilir. Ayrıca, ClusterRoller şunlara da erişim verebilir:
- küme kapsamlı kaynaklar (örneğin düğümler).
- kaynak dışı uç noktalar (örneğin /healthz).
- tüm namespace’lerde namespaced kaynaklar (örneğin Podlar).
Kubernetes 1.6’dan itibaren, RBAC politikaları varsayılan olarak etkin durumdadır. Ancak RBAC’yi etkinleştirmek için şunu kullanabilirsiniz:
kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options
Şablonlar
Bir Rol veya ClusterRole şablonunda rolün adı, namespace (rollerde) ve ardından rolün apiGrupları, kaynakları ve fiillerini belirtmeniz gerekecektir:
- apiGrupları, bu kuralın uygulandığı farklı API namespace’lerini içeren bir dizidir. Örneğin, bir Pod tanımı apiVersion: v1 kullanır. rbac.authorization.k8s.io veya [*] gibi değerler alabilir.
- kaynaklar, bu kuralın uygulandığı kaynakları tanımlayan bir dizidir. Tüm kaynakları bulmak için:
kubectl api-resources --namespaced=truekomutunu kullanabilirsiniz. - fiiller, izin verilen fiilleri içeren bir dizidir. Kubernetes’teki fiil, kaynağa uygulamanız gereken hareket türünü tanımlar. Örneğin, liste fiili koleksiyonlar için kullanılırken “get” tek bir kaynak için kullanılır.
Kurallar Fiilleri
(Bu bilgi belgelerden alınmıştır)
| HTTP fiili | istek fiili |
|---|---|
| POST | oluştur |
| GET, HEAD | al (bireysel kaynaklar için), listele (koleksiyonlar için, tam nesne içeriği dahil), izle (bireysel bir kaynak veya kaynak koleksiyonunu izlemek için) |
| PUT | güncelle |
| PATCH | yamala |
| DELETE | sil (bireysel kaynaklar için), koleksiyonu sil (koleksiyonlar için) |
Kubernetes bazen özel fiiller kullanarak ek izinler için yetkilendirmeyi kontrol eder. Örneğin:
- PodSecurityPolicy
policyAPI grubundakipodsecuritypolicieskaynaklarındausefiili.- RBAC
rbac.authorization.k8s.ioAPI grubundakirolesveclusterroleskaynaklarındabindveescalatefiilleri.- Kimlik Doğrulama
coreAPI grubundakiusers,groupsveserviceaccountsüzerindeimpersonatefiili, veauthentication.k8s.ioAPI grubundakiuserextras.
Warning
Her kaynağın desteklediği tüm fiilleri bulmak için
kubectl api-resources --sort-by name -o widekomutunu çalıştırabilirsiniz.
Örnekler
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: defaultGreen
name: pod-and-pod-logs-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# "namespace" omitted since ClusterRoles are not namespaced
name: secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "watch", "list"]
Örneğin, belirli bir kullanıcının çalıştırmasına izin vermek için bir ClusterRole kullanabilirsiniz:
kubectl get pods --all-namespaces
RoleBinding ve ClusterRoleBinding
Belgelerden: Bir role binding, bir rolde tanımlanan izinleri bir kullanıcıya veya kullanıcı grubuna verir. Kullanıcılar, gruplar veya hizmet hesapları gibi bir konu listesi ve verilen role bir referans içerir. Bir RoleBinding, belirli bir namespace içinde izinler verirken, bir ClusterRoleBinding bu erişimi küme genelinde sağlar.
piVersion: rbac.authorization.k8s.io/v1
# This role binding allows "jane" to read pods in the "default" namespace.
# You need to already have a Role named "pod-reader" in that namespace.
kind: RoleBinding
metadata:
name: read-pods
namespace: default
subjects:
# You can specify more than one "subject"
- kind: User
name: jane # "name" is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
# "roleRef" specifies the binding to a Role / ClusterRole
kind: Role #this must be Role or ClusterRole
name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to
apiGroup: rbac.authorization.k8s.io
apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
kind: ClusterRoleBinding
metadata:
name: read-secrets-global
subjects:
- kind: Group
name: manager # Name is case sensitive
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: secret-reader
apiGroup: rbac.authorization.k8s.io
İzinler toplamsaldır bu nedenle eğer “listele” ve “sil” izinlerine sahip bir clusterRole’unuz varsa, bunu “al” iznine sahip bir Role ile ekleyebilirsiniz. Bu yüzden her zaman rollerinizi ve izinlerinizi test edin ve İZİN VERİLENİ belirtin, çünkü varsayılan olarak her şey REDDEDİLİR.
RBAC’ı Sayma
# Get current privileges
kubectl auth can-i --list
# use `--as=system:serviceaccount:<namespace>:<sa_name>` to impersonate a service account
# List Cluster Roles
kubectl get clusterroles
kubectl describe clusterroles
# List Cluster Roles Bindings
kubectl get clusterrolebindings
kubectl describe clusterrolebindings
# List Roles
kubectl get roles
kubectl describe roles
# List Roles Bindings
kubectl get rolebindings
kubectl describe rolebindings
Abuse Role/ClusterRoles for Privilege Escalation
Abusing Roles/ClusterRoles in Kubernetes
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

