☸️ Как контролировать пользователей Kubernetes |

☸️ Как контролировать пользователей Kubernetes

Мануал

Управлять кластером Kubernetes с одним пользователем просто.

Когда вы выходите за пределы одного пользователя, вам нужно начать использовать управление доступом на основе ролей (RBAC).

В прошлом я несколько раз углублялся в эту тему, рассказывая о том, как создать пользовательскую изолированную среду Kubernetes в Docker Enterprise

Но как только вы выйдете за пределы пары пользователей и / или команд и нескольких пространств имен для них, вам быстро станет трудно отследить, кто может что делать и где.

И со временем, и все больше и больше людей принимают участие в настройке вашего RBAC, это может стать еще более запутанным.

Вы должны иметь свои определения ресурсов RBAC в управлении исходным кодом, но их нелегко прочитать и сложно визуализировать.

Поробуйте плагин с открытым исходным кодом who-can kubectl от Aqua Security.

Он дает вам возможность показать, кто (субъекты) может делать, что (действия), c чем (ресурсы) и где (пространства имен).

Установите менеджер плагинов Krew

Для плагина who-can для kubectl требуется менеджер плагинов krew.

Если у вас еще не установлен krew, инструкции по его установке можно найти в его репозитории GitHub, https://github.com/kubernetes-sigs/krew/.

Чтобы убедиться, что он установлен правильно, вы можете получить список доступных плагинов от kubectl.

$ kubectl plugin list
The following kubectl-compatible plugins are available:

/home/ken.rider/.krew/bin/kubectl-krew

Установите плагин Who-Can

Если у вас есть менеджер плагинов krew для kubectl, установить плагин who-can довольно легко.

$ kubectl krew install who-can

Настройка RBAC для нашего кластера

У меня есть кластер Kubernetes, который я собрал в Azure с помощью Docker Enterprise.

Существует 3 (не по умолчанию) пространства имен для разработки, тестирования и производства.

У меня также есть команды для разработки, тестирования, эксплуатации и безопасности, которые я создал как администратор кластера.

Я определил набор RoleBindings для каждого из них.

$ kubectl apply -f development-namespace.yaml
namespace/development created
rolebinding.rbac.authorization.k8s.io/dev-team:development-edit created
rolebinding.rbac.authorization.k8s.io/test-team:development-view created
rolebinding.rbac.authorization.k8s.io/ops-team:development-admin created
rolebinding.rbac.authorization.k8s.io/sec-team:development-view created
$ kubectl apply -f test-namespace.yaml
namespace/test created
rolebinding.rbac.authorization.k8s.io/dev-team:test-view created
rolebinding.rbac.authorization.k8s.io/test-team:test-edit created
rolebinding.rbac.authorization.k8s.io/ops-team:test-admin created
rolebinding.rbac.authorization.k8s.io/sec-team:test-view created
$ kubectl apply -f production-namespace.yaml
namespace/production created
rolebinding.rbac.authorization.k8s.io/dev-team:production-view created
rolebinding.rbac.authorization.k8s.io/test-team:production-view created
rolebinding.rbac.authorization.k8s.io/ops-team:production-admin created
rolebinding.rbac.authorization.k8s.io/sec-team:production-view created

Использование who-can

После того, как вы установили who-can, вы увидите, что его использование будет очень простым.

$ kubectl kubectl who-can VERB (TYPE | TYPE/NAME | NONRESOURCEURL) [flags]

Типичный набор действий, которые могут вас заинтересовать, это get  list  watch  create  update  patch delete.

Есть еще несколько других действий для определенных типов ресурсов, но, как правило, вы будете наиболее заинтересованы в get create  delete.

Типичный набор типов ресурсов, которые могут вас заинтересовать, включают pods  deployments  services  persistentvolumeclaims  configmaps  secrets

Кроме того, с постоянно расширяющимся использованием CustomResourceDefinitions, список типов ресурсов не является бесконечным.

Пример использование Who-Can

Давайте сначала спросим: «Кто может увидеть поды в пространстве имен development?»

$ kubectl who-can get pods -n development
ROLEBINDING                 NAMESPACE    SUBJECT    TYPE   SA-NAMESPACE
dev-team:development-edit   development  dev-team   Group
ops-team:development-admin  development  ops-team   Group
sec-team:development-view   development  sec-team   Group
test-team:development-view  development  test-team  Group

CLUSTERROLEBINDING                                    SUBJECT                             TYPE            SA-NAMESPACE
cluster-admin                                         system:masters                      Group
compose                                               compose                             ServiceAccount  kube-system
compose-auth-view                                     compose                             ServiceAccount  kube-system
system:controller:clusterrole-aggregation-controller  clusterrole-aggregation-controller  ServiceAccount  kube-system
system:controller:deployment-controller               deployment-controller               ServiceAccount  kube-system
system:controller:endpoint-controller                 endpoint-controller                 ServiceAccount  kube-system
system:controller:generic-garbage-collector           generic-garbage-collector           ServiceAccount  kube-system
system:controller:namespace-controller                namespace-controller                ServiceAccount  kube-system
system:controller:persistent-volume-binder            persistent-volume-binder            ServiceAccount  kube-system
system:controller:pvc-protection-controller           pvc-protection-controller           ServiceAccount  kube-system
system:controller:statefulset-controller              statefulset-controller              ServiceAccount  kube-system
system:kube-scheduler                                 system:kube-scheduler               User
tiller                                                tiller                              ServiceAccount  kube-system
ucp-kube-system:cni-plugin:cluster-admin              cni-plugin                          ServiceAccount  kube-system
ucp-kube-system:kube-dns:cluster-admin                kube-dns                            ServiceAccount  kube-system
ucp-kube-system:ucp-metrics:cluster-admin             ucp-metrics                         ServiceAccount  kube-system

Теперь давайте спросим: «Кто может создавать поды в пространстве имен development?».

Здесь мы увидим, что только наши группы development и operations могут создавать там поды.

И список учетных записей системных служб короче:

$ kubectl who-can create pods -n development
ROLEBINDING                 NAMESPACE    SUBJECT   TYPE   SA-NAMESPACE
dev-team:development-edit   development  dev-team  Group
ops-team:development-admin  development  ops-team  Group

CLUSTERROLEBINDING                                    SUBJECT                             TYPE            SA-NAMESPACE
cluster-admin                                         system:masters                      Group
system:controller:clusterrole-aggregation-controller  clusterrole-aggregation-controller  ServiceAccount  kube-system
system:controller:daemon-set-controller               daemon-set-controller               ServiceAccount  kube-system
system:controller:job-controller                      job-controller                      ServiceAccount  kube-system
system:controller:persistent-volume-binder            persistent-volume-binder            ServiceAccount  kube-system
system:controller:replicaset-controller               replicaset-controller               ServiceAccount  kube-system
system:controller:replication-controller              replication-controller              ServiceAccount  kube-system
system:controller:statefulset-controller              statefulset-controller              ServiceAccount  kube-system
tiller                                                tiller                              ServiceAccount  kube-system
ucp-kube-system:cni-plugin:cluster-admin              cni-plugin                          ServiceAccount  kube-system
ucp-kube-system:kube-dns:cluster-admin                kube-dns                            ServiceAccount  kube-system
ucp-kube-system:ucp-metrics:cluster-admin             ucp-metrics                         ServiceAccount  kube-system
Затем мы спросим «кто может обновить что-либо в пространстве имен development?».
$ kubectl who-can update '*' -n development
No subjects found with permissions to update * assigned through RoleBindings

CLUSTERROLEBINDING                                    SUBJECT                             TYPE            SA-NAMESPACE
cluster-admin                                         system:masters                      Group
system:controller:clusterrole-aggregation-controller  clusterrole-aggregation-controller  ServiceAccount  kube-system
system:controller:generic-garbage-collector           generic-garbage-collector           ServiceAccount  kube-system
tiller                                                tiller                              ServiceAccount  kube-system
ucp-kube-system:cni-plugin:cluster-admin              cni-plugin                          ServiceAccount  kube-system
ucp-kube-system:kube-dns:cluster-admin                kube-dns                            ServiceAccount  kube-system
ucp-kube-system:ucp-metrics:cluster-admin             ucp-metrics                         ServiceAccount  kube-system
Наконец, «кто может удалять сервисы в пространстве имен productions?».
И мы видим, что только группа operations может это.
$ kubectl who-can delete services -n production
ROLEBINDING                NAMESPACE   SUBJECT   TYPE   SA-NAMESPACE
ops-team:production-admin  production  ops-team  Group

CLUSTERROLEBINDING                                    SUBJECT                             TYPE            SA-NAMESPACE
cluster-admin                                         system:masters                      Group
system:controller:clusterrole-aggregation-controller  clusterrole-aggregation-controller  ServiceAccount  kube-system
system:controller:generic-garbage-collector           generic-garbage-collector           ServiceAccount  kube-system
system:controller:namespace-controller                namespace-controller                ServiceAccount  kube-system
system:controller:persistent-volume-binder            persistent-volume-binder            ServiceAccount  kube-system
tiller                                                tiller                              ServiceAccount  kube-system
ucp-kube-system:cni-plugin:cluster-admin              cni-plugin                          ServiceAccount  kube-system
ucp-kube-system:kube-dns:cluster-admin                kube-dns                            ServiceAccount  kube-system
ucp-kube-system:ucp-metrics:cluster-admin             ucp-metrics                         ServiceAccount  kube-system

Резюме

Плагин who-can kubectl от Aqua Security – действительно полезная утилита для вашего набора инструментов Kubernetes.

Настройка контроллера доступа на основе ролей для вашего кластера Kubernetes чрезвычайно важна, но также различна для каждого пользователя.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий