RBAC не работает должным образом при попытке заблокировать пространство имен - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь заблокировать пространство имен в kubernetes, используя RBAC , поэтому я следовал этому учебнику .
Я работаю над baremetal кластером (без мини-куба, без облачного провайдера ) и установленные kubernetes с использованием Ansible.

Я создал следующее пространство имен :

apiVersion: v1
kind: Namespace
metadata:
  name: lockdown

Сервисный аккаунт:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa-lockdown
  namespace: lockdown

Роль:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: lockdown
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: [""]
  verbs: [""]

RoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rb-lockdown
subjects:
- kind: ServiceAccount
  name: sa-lockdown
roleRef:
  kind: Role
  name: lockdown
  apiGroup: rbac.authorization.k8s.io

И, наконец, я проверил авторизацию с помощью следующей команды

kubectl auth can-i get pods --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown

Это ДОЛЖНО возвращать "Нет", но я получил "Да" :-(

Что яделать не так?
Thx

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я наконец нашел, в чем была проблема.

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

Я изменил следующие типы ролей и привязок к ролям, указав пространство имен внутри yaml напрямую.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: lockdown
  namespace: lockdown
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - watch
  - list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: rb-lockdown
  namespace: lockdown
subjects:
- kind: ServiceAccount
  name: sa-lockdown
roleRef:
  kind: Role
  name: lockdown
  apiGroup: rbac.authorization.k8s.io

В этом примере я дал разрешение пользователю sa-lockdown получить , смотреть и список стручков в пространстве имен блокировка .


Теперь, если я попрошу получить капсулы: kubectl auth can-i get pods --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown вернется да .

Напротив, если запросить развертывание: kubectl auth can-i get deployments --namespace lockdown --as system:serviceaccount:lockdown:sa-lockdown вернет нет .


Вы также можете оставить файлы, как они были ввопрос и просто создать их, используя kubectl create -f <file> -n lockdown.

0 голосов
/ 20 ноября 2018

Пара возможностей:

  1. если вы выполняете проверку "can-i" для защищенного порта или незащищенного порта (добавьте --v = 6, чтобы увидеть).Запросы, сделанные на незащищенный (не https) порт, всегда авторизуются.
  2. RBAC является аддитивным, поэтому при наличии существующего кластерного связывания или связывания ролей, предоставляющего разрешения «получить модули» этой учетной записи службы (или одной из групп: система: serviceaccounts: lockdown, system: serviceaccounts или system: authenticated)то эта учетная запись службы будет иметь такое разрешение.Вы не можете «отменить» разрешения, связывая более ограничивающие роли
...