Назад | Перейти на главную страницу

kubectl auth can-i говорит, что могу, но не могу

Я сбит с толку. kubectl говорит, что могу (через kubectl auth can-i подкоманда), но затем, когда я иду выполнить действие, я не могу.

Я установил kubectl в образе докера, который работает в модуле, управляемом Deployment. Когда я kubectl exec -it в этот модуль (в котором есть только один контейнер) я получаю это.

user@my-pod:~$ kubectl auth can-i get secrets -n myNamespace
yes

user@my-pod:~$ kubectl get secrets -n myNamespace
Error from server (Forbidden):
secrets is forbidden:
User "system:serviceaccount:myNamespace:myServiceAccount"
cannot list resource "secrets" in API group "" in the namespace "myNamespace"

Вот как настроен мой сервисный аккаунт

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: myServiceAccount
  namespace: myNamespace

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: myRole
  namespace: myNamespace
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "describe"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: myRoleBinding
  namespace: myNamespace
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: myRole
subjects:
- kind: ServiceAccount
  name: myServiceAccount
  namespace: myNamespace

Мне в первую очередь интересно узнать, использую ли я kubectl auth can-i неправильно.

Во-вторых, я хотел бы иметь возможность авторизовать этот сервисный аккаунт для выполнения этого вызова API. В моем ямле неверная конфигурация?

Здесь происходит досадное столкновение между kubectl с помощью get в два разных пути, но can-i использует его только в один путь. Список поддерживаемых глаголов для can-i появляется на его справочная страница

Бег:

kubectl auth can-i get secrets -n myNamespace

спрашивает о get глагол конкретно. Это эквивалент kubectl get secret my-awesome-secret. Если вы хотите узнать о kubectl get secret, который использует список глагол, и поэтому будет проверяться через:

kubectl auth can-i list secrets -n myNamespace

В этой таблице указаны различия: https://kubernetes.io/docs/reference/access-authn-authz/authorization/#determine-the-request-verb

Я считаю, что исправление для твоего Role это обновить verbs: также включить "list" если вы хотите перечислить Secrets

rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "describe", "list"]