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

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:

  1. 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.
  2. Konu (Kullanıcı, Grup veya ServiceAccount) – İzinleri alacak nesne.
  3. 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 “ClusterRoltü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=true komutunu 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 fiiliistek fiili
POSToluştur
GET, HEADal (bireysel kaynaklar için), listele (koleksiyonlar için, tam nesne içeriği dahil), izle (bireysel bir kaynak veya kaynak koleksiyonunu izlemek için)
PUTgüncelle
PATCHyamala
DELETEsil (bireysel kaynaklar için), koleksiyonu sil (koleksiyonlar için)

Kubernetes bazen özel fiiller kullanarak ek izinler için yetkilendirmeyi kontrol eder. Örneğin:

  • PodSecurityPolicy
  • policy API grubundaki podsecuritypolicies kaynaklarında use fiili.
  • RBAC
  • rbac.authorization.k8s.io API grubundaki roles ve clusterroles kaynaklarında bind ve escalate fiilleri.
  • Kimlik Doğrulama
  • core API grubundaki users, groups ve serviceaccounts üzerinde impersonate fiili, ve authentication.k8s.io API grubundaki userextras.

Warning

Her kaynağın desteklediği tüm fiilleri bulmak için kubectl api-resources --sort-by name -o wide komutunu ç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