Что делает разрешение «ОБНОВИТЬ» Kubernetes RBAC?

#kubernetes #updates #rbac #kubernetes-rbac

#kubernetes #Обновления #rbac #kubernetes-rbac

Вопрос:

Я ни за что на свете не могу найти подробную таблицу того, что делают все глаголы Kubernetes RBAC. Единственный ресурс, который, как я вижу, рекомендуют люди, — это этот, который крайне неадекватен.

Итак, я решил это экспериментально.

Большинство из них пока довольно просты, за исключением UPDATE . Похоже, это не может сделать ничего, что я ожидал бы от него.

Разрешения, которые я дал своему псевдониму: [ GET , UPDATE ] на [ deployments ] в default пространстве имен.

Вещи, которые я пробовал:

  • kubectl set image deployment/hello-node echoserver=digitalocean/flask-helloworld --as user
  • kubectl edit deploy hello-node --as user
  • kubectl apply -f hello-node.yaml --as eks-user

Все это завершилось ошибкой: deployments.apps "hello-node" is forbidden: User "user" cannot patch resource "deployments" in API group "apps" in the namespace "default"

Затем я попробовал некоторые команды развертывания, такие как:

  • k rollout undo deploy hello-node --as user

Но они потерпели неудачу, потому что у меня не было доступа к репликам.


TLDR: В чем смысл update глагола RBAC в Kubernetes?

Если на то пошло, у кого-нибудь есть более подробный список всех глаголов RBAC?

Ответ №1:

Следуя этому, я перешел к документации Kubernetes REST API, в которой есть длинный список всех вызовов HTTP API, которые вы можете выполнить на сервере REST.

Я подумал, что это поможет, потому что доступна одна (1) таблица, описывающая, что могут делать разные глаголы, путем сравнения их с HTTP-глаголами. Итак, план был:

  1. Посмотрите, к какому HTTP-глаголу update приравнивается разрешение.
  2. Перейдите к ссылке и найдите пример использования этого HTTP-глагола при развертывании.
  3. Протестируйте kubectl эквивалент.

Итак.

Какой HTTP-глагол равен update разрешению?

PUT .

Пример использования PUT для развертывания?

Заменить масштаб: заменить масштаб указанного развертывания

HTTP-запрос PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale

Какая эквивалентная kubectl команда?

Ну, мы масштабируем развертывание, поэтому я собираюсь сказать:

 kubectl scale deployment hello-node --replicas=2
  

Могу ли я выполнить эту команду?

Я расширил свои разрешения до deployment/scale first, а затем запустил его.

 Error from server (Forbidden): deployments.apps "hello-node" is forbidden: User "user" cannot patch resource "deployments/scale" in API group "apps" in the namespace "default"
  

Что ж. Похоже, для этого также требуются patch разрешения.

Несмотря на то, что используемый HTTP-глагол PUT соответствует документам API и PUT эквивалентен update одному (1) источнику любой информации об этих RBAC-глаголах.

В любом случае.

Мой вывод: похоже, update это действительно бесполезно, по крайней мере, для развертываний.

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

Комментарии:

1. Просто мысль: похоже scale , что операция изменяет только один атрибут a Deployment (# реплик), а не заменяет весь объект (все атрибуты). Итак, на мой взгляд, это больше похоже на a PATCH , чем a PUT . Итак, в этом конкретном случае Kubernetes, похоже, делает логичную вещь. В целом, я нахожу работу с Kubernetes чрезвычайно сложной и далеко не такой стабильной, как хотелось бы. С помощью множества проб и ошибок вы обычно можете стабилизировать свое приложение. Но это всегда требует много времени и усилий. Поэтому я сочувствую вашим выводам.

2. Спасибо за ссылку для авторизации. kubectl auth can-i Команда выглядит полезной для проверки ваших ClusterRole ClusterRoleBinding определений и .

Ответ №2:

Вы можете получить дамп «разрешенных / поддерживаемых» глаголов, используя этот плагин krew rbac-tool

 # Generate a ClusterRole with all the available permissions for core and apps api groups
$ kubectl rbac-tool show  --for-groups=,apps
  

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