Docker — Групповая Аутентификация В Kubernetes

  • Автор темы Ariscin
  • Обновлено
  • 21, Oct 2024
  • #1

Я пытаюсь реализовать групповую аутентификацию в k8s с помощью RBAC. Мое требование следующее:

Существует группа Linux под названием «только для чтения». В группе только для чтения есть 3 пользователя: Reader1, Reader2 и Reader3.

Как я могу реализовать RBAC, чтобы предоставить доступ только для чтения всем пользователям, которые являются частью этой группы, и всем будущим пользователям, которые станут частью этой группы? Доступ только для чтения означает доступ к списку, получению и просмотру ресурсов с помощью kubectl.

Я наткнулся на .subjects[0].kind: Группа в кластерной привязке ролей. Но не уверен, как это можно использовать и можно ли вообще использовать для описанного выше сценария.

Спасибо.

#докер #кубернетес

Ariscin


Рег
02 Feb, 2011

Тем
78

Постов
213

Баллов
643
  • 25, Oct 2024
  • #2

Это то, что я реализовал недавно.

ПРИМЕЧАНИЕ. Я предполагаю, что вы знаете, как добавлять пользователей. или пользователи в группе в этом случае.

вот что я применил:

 
 
 
 
 
 
 
 
 
 Impersonate-User: The username to act as.
Impersonate-Group: A group name to act as. Can be provided multiple times to set multiple groups. Optional. Requires "Impersonate-User".
 

Вы можете использовать либо GET / HTTP/1.1 X-Remote-User: fido X-Remote-Group: dogs X-Remote-Group: dachshunds X-Remote-Extra-Acme.com%2Fproject: some-project X-Remote-Extra-Scopes: openid X-Remote-Extra-Scopes: profile & --requestheader-group-headers 1.6+. Optional, case-insensitive. "X-Remote-Group" is suggested. Header names to check, in order, for the user's groups. All values in all specified headers are used as group names. или просто # Optional group memberships "groups": ["developers", "qa"], & --oidc-groups-claim JWT claim to use as the user's group. If the claim is present it must be an array of strings. Example: groups Required: No , в зависимости от вашего требования. Если вам нужен не доступ к области кластера, а просто пространство имен, я настоятельно рекомендую использовать token,user,uid,"group1,group2,group3" & openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2" вид объекта.

Что я делаю/создаю выше?

Я создаю одну роль RBAC ( kubectl auth can-i get pods --as myorg:readonly ) scoped to Cluster. and in that I'm specifying I want to let access - apiGroups: - "" resourceNames: - dashboard:5000 resources: - services/proxy verbs: - '*' , ClusterRole (i.e kubectl proxy ), и readonly_role . additionally you. can also add things like myorg:readonly или же если вы просто хотите дать доступ всем, укажите bind_readonly_dev_role instead.

во второй части я создаю объект ClusterRoleBinding с именем "" which ensures only users in group services имеют эту роль или привилегии в роли, которую мы только что создали ( deployments ).

ПРИМЕЧАНИЕ. Если вы хотите разрешить прокси-доступ к определенным приложениям, например pods/logs . you might have to specify them separately in the logs правила.

Мне нравится это для одного из моих SVC:

pods

наконец, что не менее важно, вы должны проверить, правильно ли у пользователя есть эти привилегии,

readonly_role

вы можете протестировать следующим образом:

в приведенном выше примере замените модули объектами, к которым вы хотите, чтобы пользователи группы имели доступ.

Надеюсь, это поможет!

 

Miha876


Рег
25 Jan, 2008

Тем
63

Постов
211

Баллов
546
  • 25, Oct 2024
  • #3

Название вопроса: «Групповая аутентификация в 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/

 

Ondredyakin


Рег
20 Apr, 2006

Тем
78

Постов
192

Баллов
602
Похожие темы Дата
Похожие темы
Amazon Ec2 — Включите Хосты Aws Ec2, Указав Их Доступные Имена Хостов.
Как Установить Метаданные Blob-Объекта Изнутри Функции Python Google Cloud? Тест Завершился Неудачей: «Blob.size = 99 Attributeerror: Невозможно Установить Атрибут».
Запуск Задания Конвейера Дженкинса С Помощью Перехватчика Bitbucket
Ошибка Докера При Отправке На Собственный Сервер Gitlab, Установленный С Помощью Омнибуса На Виртуальной Машине Ubuntu С Собственным Доменом
Процесс - Каково Оптимальное Количество Людей В Еженедельном Графике Дежурств?
Веб-Службы Amazon — Общие Разрешения Для Использования Ec2 И Групп Безопасности Vpc В Корпоративном Использовании
Circleci 2.0 — Задание Рабочего Процесса Circle Ci Зависало В Состоянии «Создано» При Добавлении Необходимого Шага В Рабочий Процесс.
Терминология. Используется Ли Gradle Для Автоматизации Развертывания Файлов Ear И War На Серверах Приложений?
Веб-Службы Amazon. В Чем Разница Между Установленными Kubernetes Eks И Ec2?
Почему Я Не Могу Запустить Демон Docker?
Тем
403,760
Комментарии
400,028
Опыт
2,418,908