Kubernetes Role-Based Access Control(RBAC)
Rol Tabanlı Erişim Kontrolü (RBAC)
Kubernetes, API sunucusuna kullanım izinleri belirlemeye yardımcı olan bir yetkilendirme modülü olan Rol Tabanlı Erişim Kontrolü (RBAC) içerir.
RBAC'nin izin modeli üç ayrı parçadan oluşur:
Rol/Küme Rolü - Gerçek izinleri içerir. Bir dizi izni temsil eden kurallar içerir. Her kural, kaynakları ve fiilleri içerir. Fiil, kaynak üzerinde uygulanacak eylemdir.
Özne (Kullanıcı, Grup veya Hizmet Hesabı) - İzinleri alacak nesne.
RolBağlama/KümeRolüBağlama - Rol/Küme Rolü ile özne arasındaki bağlantı.
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2018%2F12%2Frolebiding_serviceaccount_and_role-1024x551.png&width=768&dpr=4&quality=100&sign=8a74ea80&sv=1)
"Roller" ve "Küme Roller" arasındaki fark, rolün uygulanacağı yerdir - "Rol", yalnızca bir belirli ad alanına erişim sağlarken, "Küme Rolü" kümedeki tüm ad alanlarında kullanılabilir. Dahası, Küme Roller ayrıca şunlara da erişim sağlayabilir:
Küme kapsamlı kaynaklar (örneğin düğümler).
Kaynak olmayan uç noktalar (örneğin /healthz).
Ad alanına ait kaynaklar (örneğin Pod'lar), tüm ad alanlarına yayılan.
Kubernetes 1.6'dan itibaren, RBAC politikaları varsayılan olarak etkinleştirilmiştir. Ancak RBAC'yi etkinleştirmek için şuna benzer bir şey kullanabilirsiniz:
Şablonlar
Bir Rol veya ClusterRole şablonunda, rolün adını, namespace'i (roller için) ve ardından rolün apiGroups, resources ve verbs'lerini belirtmeniz gerekecektir:
apiGroups, bu kuralın uygulandığı farklı API namespace'lerini içeren bir dizi olarak tanımlanır. Örneğin, bir Pod tanımı apiVersion: v1 kullanır. Değerler arasında rbac.authorization.k8s.io veya [*] olabilir.
resources, bu kuralın uygulandığı hangi kaynaklara uygulandığını tanımlayan bir dizi olarak belirtilir. Tüm kaynakları şu komutla bulabilirsiniz:
kubectl api-resources --namespaced=true
verbs, izin verilen fiilleri içeren bir dizi olarak tanımlanır. Kubernetes'te fiil, kaynağa uygulamanız gereken eylemin türünü tanımlar. Örneğin, list fiili koleksiyonlara karşı kullanılırken "get" tek bir kaynağa karşı kullanılır.
Kuralların Fiilleri
(Bu bilgi dokümantasyondan alınmıştır)
HTTP fiili | istek fiili |
---|---|
POST | create |
GET, HEAD | get (bireysel kaynaklar için), list (koleksiyonlar için, tam nesne içeriği dahil), watch (bireysel bir kaynak veya kaynak koleksiyonu için izleme) |
PUT | update |
PATCH | patch |
DELETE | delete (bireysel kaynaklar için), deletecollection (koleksiyonlar için) |
Kubernetes bazen özel fiiller kullanarak ek izinler için yetkilendirme kontrolü yapar. Örneğin:
policy
API grubundakipodsecuritypolicies
kaynakları üzerindeuse
fiili.rbac.authorization.k8s.io
API grubundakiroles
veclusterroles
kaynakları üzerindebind
veescalate
fiilleri.Çekirdek API grubundaki
users
,groups
veserviceaccounts
üzerindeimpersonate
fiili veauthentication.k8s.io
API grubundakiuserextras
üzerinde.
Her kaynağın desteklediği tüm fiilleri kubectl api-resources --sort-by name -o wide
komutunu kullanarak bulabilirsiniz.
Örnekler
Örneğin, belirli bir kullanıcının şunları çalıştırmasına izin vermek için bir ClusterRole kullanabilirsiniz:
RoleBinding ve ClusterRoleBinding
Dokümantasyondan: Bir role binding, bir kullanıcıya veya kullanıcı grubuna tanımlanan bir role'deki izinleri sağlar. Bu, bir dizi subject (kullanıcılar, gruplar veya servis hesapları) ve verilen role referansı içerir. RoleBinding, belirli bir namespace içinde izinleri sağlarken, ClusterRoleBinding bu erişimi küme genelinde sağlar.
İzinler eklenir bu yüzden "list" ve "delete" sırları olan bir clusterRole'u "get" ile bir Role ile ekleyebilirsiniz. Bu yüzden her zaman rollerinizi ve izinlerinizi test edin ve NEYE İZİN VERİLDİĞİNİ belirtin, çünkü varsayılan olarak HER ŞEY REDDEDİLİR.
RBAC Numaralandırma
Yetkilendirme Rolü/Küme Rollerini İstismar Etme
Abusing Roles/ClusterRoles in KubernetesLast updated