Ограничить пользователю доступ только к одной службе в пространстве имен - PullRequest
0 голосов
/ 30 апреля 2019

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

Ниже приведена роль кластера, которую я использую для предоставления доступа ко всем пользователям на уровне кластера для служб.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: test-clusterRole
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - pods/exec
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - replicationcontrollers
  - services
  verbs:
  - get
  - list
  - watch
  - create
  - delete
  - update
- apiGroups:
  - ""
  resources:
  - persistentvolumeclaims
  - serviceaccounts
  - namespaces/status
  - pods/log
  - pods/status
  - replicationcontrollers/status
  - resourcequotas
  - resourcequotas/status
  - namespaces
  - persistentvolumes
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - configmaps
  - secrets
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - delete
- apiGroups:
  - apps
  resources:
  - deployments
  - replicasets
  - statefulsets
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - delete
- apiGroups:
  - extensions
  resources:
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources:
  - replicasets
  - deployments
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - delete

И я создал связанное RoleBinding для вышеуказанного ClusterRole.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test-roleBinding
  namespace: test-namespace
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: pradeep
- kind: ServiceAccount
  name: default
  namespace: test-namespace
roleRef:
  kind: ClusterRole
  name: test-clusterRole
  apiGroup: rbac.authorization.k8s.io

Теперь я пытаюсь создать Role и RoleBinding для пространства имен «test-namespace», ограничивающего пользователя «pradeep» для доступа только для чтения к определенной службе «test-service», как показано ниже

Роль:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
    name: test-role
    namespace: test-namespace
rules:
  - apiGroups: [""]
    resources: ["services"]
    resourceNames : ["test-service"]
    verbs: ["get","list","watch"]

RoleBinding:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test-roleBinding1
  namespace: test-namespace
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: pradeep
- kind: ServiceAccount
  name: default
  namespace: test-namespace
roleRef:
  kind: Role
  name: test-role
  apiGroup: rbac.authorization.k8s.io

Но, тем не менее, пользователь «pradeep» может удалить указанную службу «test-service» по некоторым причинам. Являются ли разрешения test-clusterRole переопределением разрешений роли теста? Если так, как можно решить эту проблему.

Если нет, пожалуйста, предложите способ достижения этого сценария.

1 Ответ

2 голосов
/ 30 апреля 2019

Разрешения ClusterRole и Role являются аддитивными. Разрешения ClusterRole принимают за базовые разрешения для любого пространства имен, и к этому добавляются разрешения Role для определенных пространств имен.

Если пользователь должен иметь доступ только к одному пространству имен, он не может быть назначен на ClusterRole.

...