Название вопроса: «Групповая аутентификация в kubernetes», а исходный плакат задан в комментариях: «Есть ли у вас ссылка на то, как создать группу пользователей k8s и добавить пользователя в группу». Поэтому будет полезно ответить:
Как добавить пользователей Kubernetes в группы?
Kubernetes не хранит имена пользователей и группы в своей локальной базе данных, как это происходит в большинстве других систем. Вместо этого это зависит от предоставления «имени пользователя» или «группы» любым предпочитаемым вами механизмом аутентификации. В зависимости от того, какой метод вы используете, способ указания группы различается.
Это означает, что сначала вам необходимо определить метод аутентификации. Например, «Я использую сертификаты клиента X509» или «Я использую токен служебной учетной записи». Этот ответ не может быть таким: «Возможно, я просто использую встроенных пользователей и группы Kubernetes по умолчанию», потому что, к сожалению, этого не существует.
Ниже приведены альтернативные способы установки «группы» в зависимости от метода аутентификации. https://kubernetes.io/docs/reference/access-authn-authz/authentication/ (Большая часть этого дословно взята из
с некоторым редактированием и перестановкой для ясности).
Сертификаты клиента X509:
Rolebinding
Поместите имена групп в запрос на подпись сертификата:
Это создаст CSR для имени пользователя «jbeda», принадлежащего двум группам: «app1» и «app2».
Статический файл токена:
Сервер API считывает токены-носители из файла, если в командной строке задан параметр --token-auth-file=SOMEFILE. Файл токена представляет собой CSV-файл с минимум тремя столбцами: токен, имя пользователя, uid пользователя, за которыми следуют необязательные имена групп.
Role
Примечание:
Если у вас более одной группы, столбец должен быть заключен в двойные кавычки, например.
Токены начальной загрузки:
Аутентификатор аутентифицируется как system:bootstrap:Token ID. Он включен в группу system:bootstrappers. Именование и группы намеренно ограничены.
Rolebinding
Токены OpenID Connect:
При настройке сервера API для поддержки токенов OpenID Connect добавьте этот флаг
Поставщик удостоверений будет включать в токен «группы».
Role
Аутентификация токена Webhook:
Сервер API настроен для связи с удаленной службой аутентификации. Эта внешняя служба должна возвращать подтверждение в формате json, которое может включать необязательное членство в группе:
ClusterRoleBinding
Аутентифицирующий прокси:
ClusterRole
Настройте сервер API с этим флагом:
Отправьте http-запрос, включив в заголовки X-Remote-Group.
Анонимные запросы:
Если этот параметр включен, запросы, которые не отклоняются другими настроенными методами аутентификации, рассматриваются как анонимные запросы и получают имя пользователя system:anonymous и группу system:unauthenticated.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: readonly_role
rules:
- apiGroups:
- ""
resourceNames:
- ""
resources:
- "pods"
- "pods/logs"
- "deployments"
verbs:
- get
- list
- watch
- apiGroups:
- authorization.k8s.io
resources:
- selfsubjectaccessreviews
- selfsubjectrulesreviews
verbs:
- watch
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: bind_readonly_dev_role
subjects:
- kind: Group
name: myorg:readonly
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: readonly_role
apiGroup: rbac.authorization.k8s.io
Олицетворение пользователя:
Пользователь может действовать как другой пользователь через заголовки олицетворения.
Следующие заголовки HTTP можно использовать для выполнения запроса на олицетворение:
Плагины учетных данных client-go: https://kubernetes.io/docs/reference/access-authn-authz/authentication/