Документация находится в разработке, может содержать неполную информацию.
Описание
Платформа поддерживает управление как внутренними пользователями и группами, так и интеграцию с внешними провайдерами аутентификации и протоколами, такими как:
Можно подключить несколько внешних провайдеров аутентификации одновременно.
Пользователи могут получать доступ к веб-интерфейсам платформы (например, Grafana, Console), а также использовать командные утилиты (d8
, kubectl
) для взаимодействия с API платформы с учетом назначенных прав доступа.
Информация о назначении прав пользователям и группам представлена в документации.
Создание пользователя
Для создания статического пользователя используется ресурс User.
Перед этим необходимо сгенерировать хэш пароля с помощью следующей команды:
# В начале команды используйте пробел, чтобы пароль не сохранился в истории команд.
# Замените example_password на свой пароль.
echo example_password | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0
Также можно воспользоваться онлайн-сервисом Bcrypt.
Пример манифеста для создания пользователя:
apiVersion: deckhouse.io/v1
kind: User
metadata:
name: joe
spec:
email: joe@example.com # Используется в RoleBinding, ClusterRoleBinding для назначения прав пользователю.
password: $2a$10$etblbZ9yfZaKgbvysf1qguW3WULdMnxwWFrkoKpRH1yeWa5etjjAa
ttl: 24h # (Опционально) задает срок жизни учетной записи.
Создание группы пользователей
Для создания группы пользователей используется ресурс Group.
Пример манифеста для создания группы:
apiVersion: deckhouse.io/v1alpha1
kind: Group
metadata:
name: vms-admins
spec:
# список пользователей
members:
- kind: User
name: joe
name: vms-admins # используется в RoleBinding, ClusterRoleBinding для назначения прав группе пользователей
Создание конфигурационного файла для удаленного доступа
Для того чтобы удалённо управлять кластером с помощью утилит командной строки (d8
или kubectl
), необходимо создать конфигурационный файл:
- Включите доступ к API платформы, установив параметр
.spec.settings.publishAPI.enabled
в значенииtrue
в ресурсе ModuleConfig модуляuser-authn
. -
Через веб-интерфейс kubeconfigurator, сгенерируйте
kubeconfig
-файл для удалённого доступа к кластеру. Для доступа к веб-интерфейсу, позволяющему сгенерироватьkubeconfig
, зарезервировано имяkubeconfig
. URL для доступа зависит от значения параметраpublicDomainTemplate
.Чтобы узнать адрес, по которому доступен сервис, выполните следующую команду:
d8 k get ingress -n d8-user-authn
Пример вывода команды:
NAME CLASS HOSTS ADDRESS PORTS AGE ... kubeconfig-generator nginx kubeconfig.example.com 172.25.0.2,172.25.0.3,172.25.0.4 80, 443 267d ...
- Перейдите по предоставленному адресу и используйте в качестве учетных данных email и пароль, которые вы указали при создании пользователя.
Настройка внешних провайдеров
Для настройки внешниx провайдеров используется ресурс DexProvider.
GitHub
В примере представлены настройки провайдера для интеграции с GitHub:
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: github
spec:
type: Github
displayName: My Company GitHub
github:
clientID: plainstring
clientSecret: plainstring
В организации GitHub необходимо создать новое приложение. Для этого выполните следующие шаги:
- Перейдите в «Settings» → «Developer settings» → «OAuth Apps» → «Register a new OAuth application».
- В поле «Authorization callback URL» укажите адрес:
https://dex.<modules.publicDomainTemplate>/callback
.
Полученные Client ID
и Client Secret
укажите в кастомном ресурсе DexProvider
.
Если организация GitHub находится под управлением клиента, выполните следующие шаги:
- Перейдите в «Settings» -> «Applications» -> «Authorized OAuth Apps».
- Найдите созданное приложение по имени и нажмите «Send Request» для подтверждения.
- Попросите клиента подтвердить запрос, который будет отправлен ему на email.
После выполнения этих шагов ваше приложение будет готово для использования в качестве провайдера аутентификации через GitHub.
GitLab
В примере представлены настройки провайдера для интеграции с GitLab.
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: gitlab
spec:
type: Gitlab
displayName: Dedicated Gitlab
gitlab:
baseURL: https://gitlab.example.com
clientID: plainstring
clientSecret: plainstring
groups:
- administrators
- users
Для того чтобы создать приложение в GitLab, выполните следующие шаги:
Для GitLab, размещённого на собственном сервере:
- Перейдите в «Admin area» → «Application» → «New application».
- В поле «Redirect URI (Callback URL)» укажите адрес:
https://dex.<modules.publicDomainTemplate>/callback
. - Выберите следующие категории доступа:
read_user
openid
Для GitLab, размещённого в облаке:
- Под главной учетной записью проекта перейдите в «User Settings» → «Applications» → «New application».
- В поле «Redirect URI (Callback URL)» укажите адрес:
https://dex.<modules.publicDomainTemplate>/callback
. - Выберите следующие категории доступа:
read_user
openid
Для GitLab версии 16 и выше:
-
Включите опцию «Trusted»:
Trusted applications are automatically authorized on GitLab OAuth flow
при создании приложения. -
Полученные
Application ID
иSecret
укажите в кастомном ресурсеDexProvider
.
Atlassian Crowd
В примере представлены настройки провайдера для интеграции с Atlassian Crowd.
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: crowd
spec:
type: Crowd
displayName: Crowd
crowd:
baseURL: https://crowd.example.com/crowd
clientID: plainstring
clientSecret: plainstring
enableBasicAuth: true
groups:
- administrators
- users
Для того чтобы создать Generic-приложение в Atlassian Crowd, выполните следующие шаги:
- Перейдите в раздел «Applications» → «Add application».
- Полученные
Application Name
иPassword
укажите в ресурсе DexProvider. - Группы CROWD укажите в lowercase-формате для ресурса
DexProvider
.
Bitbucket Cloud
В примере представлены настройки провайдера для интеграции с Bitbucket.
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: gitlab
spec:
type: BitbucketCloud
displayName: Bitbucket
bitbucketCloud:
clientID: plainstring
clientSecret: plainstring
includeTeamGroups: true
teams:
- administrators
- users
Для настройки аутентификации в Bitbucket выполните следующие шаги:
- В меню команды создайте новый OAuth-consumer.
- Перейдите в «Settings» → «OAuth consumers» → «New application» и в качестве «Callback URL» укажите адрес
https://dex.<modules.publicDomainTemplate>/callback
. - Разрешите доступ для
Account: Read
иWorkspace membership: Read
. - Полученные
Key
иSecret
укажите в кастомном ресурсеDexProvider
.
LDAP
В примере представлены настройки провайдера для интеграции с Active Directory:
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: active-directory
spec:
type: LDAP
displayName: Active Directory
ldap:
host: ad.example.com:636
insecureSkipVerify: true
bindDN: cn=Administrator,cn=users,dc=example,dc=com
bindPW: admin0!
usernamePrompt: Email Address
userSearch:
baseDN: cn=Users,dc=example,dc=com
filter: "(objectClass=person)"
username: userPrincipalName
idAttr: DN
emailAttr: userPrincipalName
nameAttr: cn
groupSearch:
baseDN: cn=Users,dc=example,dc=com
filter: "(objectClass=group)"
userMatchers:
- userAttr: DN
groupAttr: member
nameAttr: cn
Для настройки аутентификации в LDAP выполните следующие шаги:
- Создайте в LDAP read-only-пользователя (service account).
- Полученные путь до пользователя и пароль укажите в параметрах
bindDN
иbindPW
кастомного ресурсаDexProvider
. - Если в LDAP настроен анонимный доступ на чтение, настройки можно не указывать.
- В параметре
bindPW
укажите пароль в plain-виде. Стратегии с передачей хэшированных паролей не предусмотрены.
OIDC (OpenID Connect)
Аутентификация через OIDC-провайдера требует регистрации клиента (или создания приложения). Сделайте это по документации вашего провайдера (например, Okta, Keycloak, Gluu или Blitz).
Полученные в ходе выполнения инструкции clientID
и clientSecret
укажите в кастомном ресурсе DexProvider
.
Далее можно ознакомиться с некоторыми примерами.
Okta
В примере представлены настройки провайдера для интеграции с Okta:
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: okta
spec:
type: OIDC
displayName: My Company Okta
oidc:
issuer: https://my-company.okta.com
clientID: plainstring
clientSecret: plainstring
insecureSkipEmailVerified: true
getUserInfo: true
Blitz Identity Provider
На стороне провайдера Blitz Identity Provider при регистрации приложения необходимо указать URL для перенаправления пользователя после авторизации. При использовании DexProvider
необходимо указать https://dex.<publicDomainTemplate>/
, где publicDomainTemplate
– указанный в модуле global
шаблон DNS-имен кластера.
В примере представлены настройки провайдера для интеграции с Blitz Identity Provider:
apiVersion: deckhouse.io/v1
kind: DexProvider
metadata:
name: blitz
spec:
displayName: Blitz Identity Provider
oidc:
basicAuthUnsupported: false
claimMapping:
email: email
groups: your_claim # Claim для получения групп пользователя, группы пользователя настраиваются на стороне провайдера Blitz Identity Provider
clientID: clientID
clientSecret: clientSecret
getUserInfo: true
insecureSkipEmailVerified: true # Установить true, если нет необходимости в проверке email пользователя
insecureSkipVerify: false
issuer: https://yourdomain.idblitz.ru/blitz
promptType: consent
scopes:
- profile
- openid
userIDKey: sub
userNameKey: email
type: OIDC
Чтобы корректно работал выход из приложений (происходил отзыв токена и требовалась повторная авторизация), нужно установить login
в значении параметра promptType
.
Для обеспечения детализированного доступа пользователя к приложениям необходимо:
- добавить параметр
allowedUserGroups
в ModuleConfig нужного приложения; - добавить группы к пользователю (наименования групп должны совпадать как на стороне Blitz, так и на стороне Deckhouse).
Пример добавления групп для модуля Prometheus:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: prometheus
spec:
version: 2
settings:
auth:
allowedUserGroups:
- adm-grafana-access
- grafana-access