Пример конфигурации модуля
В примере представлена конфигурация модуля user-authn
в Deckhouse Kubernetes Platform.
1apiVersion: deckhouse.io/v1alpha1
2kind: ModuleConfig
3metadata:
4 name: user-authn
5spec:
6 version: 2
7 enabled: true
8 settings:
9 kubeconfigGenerator:
10 - id: direct
11 masterURI: https://159.89.5.247:6443
12 description: "Direct access to kubernetes API"
13 publishAPI:
14 enabled: true
Примеры настройки провайдера
GitHub
В примере представлены настройки провайдера для интеграции с GitHub.
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: github
5spec:
6 type: Github
7 displayName: My Company GitHub
8 github:
9 clientID: plainstring
10 clientSecret: plainstring
В организации GitHub необходимо создать новое приложение.
Для этого выполните следующие шаги:
- перейдите в
Settings
->Developer settings
->OAuth Aps
->Register a new OAuth application
и в качествеAuthorization callback URL
укажите адресhttps://dex.<modules.publicDomainTemplate>/callback
.
Полученные Client ID
и Client Secret
укажите в Custom Resource DexProvider.
Если организация GitHub находится под управлением клиента, перейдите в Settings
-> Applications
-> Authorized OAuth Apps
-> <name of created OAuth App>
и нажмите Send Request
для подтверждения. Попросите клиента подтвердить запрос, который придет к нему на email.
GitLab
В примере представлены настройки провайдера для интеграции с GitLab.
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: gitlab
5spec:
6 type: Gitlab
7 displayName: Dedicated Gitlab
8 gitlab:
9 baseURL: https://gitlab.example.com
10 clientID: plainstring
11 clientSecret: plainstring
12 groups:
13 - administrators
14 - users
В GitLab проекта необходимо создать новое приложение.
Для этого выполните следующие шаги:
- self-hosted: перейдите в
Admin area
->Application
->New application
и в качествеRedirect URI (Callback url)
укажите адресhttps://dex.<modules.publicDomainTemplate>/callback
, выберите scopes:read_user
,openid
; - cloud gitlab.com: под главной учетной записью проекта перейдите в
User Settings
->Application
->New application
и в качествеRedirect URI (Callback url)
укажите адресhttps://dex.<modules.publicDomainTemplate>/callback
, выберите scopes:read_user
,openid
; - (для GitLab версии 16 и выше) включить опцию
Trusted
/Trusted applications are automatically authorized on Gitlab OAuth flow
при создании приложения.
Полученные Application ID
и Secret
укажите в Custom Resource DexProvider.
Atlassian Crowd
В примере представлены настройки провайдера для интеграции с Atlassian Crowd.
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: crowd
5spec:
6 type: Crowd
7 displayName: Crowd
8 crowd:
9 baseURL: https://crowd.example.com/crowd
10 clientID: plainstring
11 clientSecret: plainstring
12 enableBasicAuth: true
13 groups:
14 - administrators
15 - users
В соответствующем проекте Atlassian Crowd необходимо создать новое Generic
-приложение.
Для этого выполните следующие шаги:
- перейдите в
Applications
->Add application
.
Полученные Application Name
и Password
укажите в Custom Resource DexProvider.
Группы CROWD укажите в lowercase-формате для Custom Resource DexProvider
.
Bitbucket Cloud
В примере представлены настройки провайдера для интеграции с Bitbucket.
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: gitlab
5spec:
6 type: BitbucketCloud
7 displayName: Bitbucket
8 bitbucketCloud:
9 clientID: plainstring
10 clientSecret: plainstring
11 includeTeamGroups: true
12 teams:
13 - administrators
14 - users
Для настройки аутентификации необходимо в Bitbucket в меню команды создать нового OAuth consumer.
Для этого выполните следующие шаги:
- перейдите в
Settings
->OAuth consumers
->New application
и в качествеCallback URL
укажите адресhttps://dex.<modules.publicDomainTemplate>/callback
, разрешите доступ дляAccount: Read
иWorkspace membership: Read
.
Полученные Key
и Secret
укажите в Custom Resource DexProvider.
OIDC (OpenID Connect)
Аутентификация через OIDC-провайдера требует регистрации клиента (или создания приложения). Сделайте это по документации вашего провайдера (например, Okta, Keycloak, Gluu или Blitz).
Полученные в ходе выполнения инструкции clientID
и clientSecret
укажите в Custom Resource DexProvider.
Ниже можно ознакомиться с некоторыми примерами.
Okta
В примере представлены настройки провайдера для интеграции с Okta:
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: okta
5spec:
6 type: OIDC
7 displayName: My Company Okta
8 oidc:
9 issuer: https://my-company.okta.com
10 clientID: plainstring
11 clientSecret: plainstring
12 insecureSkipEmailVerified: true
13 getUserInfo: true
Blitz Identity Provider
На стороне провайдера Blitz Identity Provider при регистрации приложения необходимо указать URL для перенаправления пользователя после авторизации. При использовании DexProvider
необходимо указать https://dex.<publicDomainTemplate>/
, где publicDomainTemplate
– указанный в модуле global
шаблон DNS-имен кластера.
В примере представлены настройки провайдера для интеграции с Blitz Identity Provider:
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: blitz
5spec:
6 displayName: Blitz Identity Provider
7 oidc:
8 basicAuthUnsupported: false
9 claimMapping:
10 email: email
11 groups: your_claim # Claim для получения групп пользователя, группы пользователя настраиваются на стороне провайдера Blitz Identity Provider
12 clientID: clientID
13 clientSecret: clientSecret
14 getUserInfo: true
15 insecureSkipEmailVerified: true # Установить true, если нет необходимости в проверке email пользователя
16 insecureSkipVerify: false
17 issuer: https://yourdomain.idblitz.ru/blitz
18 promptType: consent
19 scopes:
20 - profile
21 - openid
22 userIDKey: sub
23 userNameKey: email
24 type: OIDC
Чтобы корректно отрабатывал выход из приложений (происходил отзыв токена и требовалась повторная авторизация), нужно установить login
в значении параметра promptType
.
Для обеспечения гранулированного доступа пользователя к приложениям необходимо:
- добавить параметр
allowedUserGroups
вModuleConfig
нужного приложения; - добавить группы к пользователю (наименования групп должны совпадать как на стороне Blitz, так и на стороне Deckhouse).
Пример для Prometheus:
1apiVersion: deckhouse.io/v1alpha1
2kind: ModuleConfig
3metadata:
4 name: prometheus
5spec:
6 version: 2
7 settings:
8 auth:
9 allowedUserGroups:
10 - adm-grafana-access
11 - grafana-access
LDAP
В примере представлены настройки провайдера для интеграции с Active Directory:
1apiVersion: deckhouse.io/v1
2kind: DexProvider
3metadata:
4 name: active-directory
5spec:
6 type: LDAP
7 displayName: Active Directory
8 ldap:
9 host: ad.example.com:636
10 insecureSkipVerify: true
11 bindDN: cn=Administrator,cn=users,dc=example,dc=com
12 bindPW: admin0!
13 usernamePrompt: Email Address
14 userSearch:
15 baseDN: cn=Users,dc=example,dc=com
16 filter: "(objectClass=person)"
17 username: userPrincipalName
18 idAttr: DN
19 emailAttr: userPrincipalName
20 nameAttr: cn
21 groupSearch:
22 baseDN: cn=Users,dc=example,dc=com
23 filter: "(objectClass=group)"
24 userMatchers:
25 - userAttr: DN
26 groupAttr: member
27 nameAttr: cn
Для настройки аутентификации заведите в LDAP read-only-пользователя (service account).
Полученные путь до пользователя и пароль укажите в параметрах bindDN
и bindPW
Custom Resource DexProvider.
- Если в LDAP настроен анонимный доступ на чтение, настройки можно не указывать.
- В параметре
bindPW
укажите пароль в plain-виде. Стратегии с передачей хэшированных паролей не предусмотрены.
Настройка OAuth2-клиента в Dex для подключения приложения
Этот вариант настройки подходит приложениям, которые имеют возможность использовать OAuth2-аутентификацию самостоятельно, без помощи oauth2-proxy
.
Чтобы позволить подобным приложениям взаимодействовать с Dex, используется Custom Resource DexClient
.
1apiVersion: deckhouse.io/v1
2kind: DexClient
3metadata:
4 name: myname
5 namespace: mynamespace
6spec:
7 redirectURIs:
8 - https://app.example.com/callback
9 - https://app.example.com/callback-reserve
10 allowedGroups:
11 - Everyone
12 - admins
13 trustedPeers:
14 - opendistro-sibling
После создания такого ресурса в Dex будет зарегистрирован клиент с идентификатором (clientID) dex-client-myname@mynamespace
.
Пароль доступа к клиенту (clientSecret) сохранится в секрете:
1apiVersion: v1
2kind: Secret
3metadata:
4 name: dex-client-myname
5 namespace: mynamespace
6type: Opaque
7data:
8 clientSecret: c2VjcmV0
Пример создания статического пользователя
Придумайте пароль и укажите его хэш-сумму в поле password
.
Для вычисления хэш-суммы пароля воспользуйтесь командой:
1echo "$password" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0
Также можно воспользоваться онлайн-сервисом.
1apiVersion: deckhouse.io/v1
2kind: User
3metadata:
4 name: admin
5spec:
6 email: admin@yourcompany.com
7 password: $2a$10$etblbZ9yfZaKgbvysf1qguW3WULdMnxwWFrkoKpRH1yeWa5etjjAa
8 ttl: 24h
Пример добавления статического пользователя в группу
1apiVersion: deckhouse.io/v1alpha1
2kind: Group
3metadata:
4 name: admins
5spec:
6 name: admins
7 members:
8 - kind: User
9 name: admin
Выдача прав пользователю или группе
Для настройки используются параметры в Custom Resource ClusterAuthorizationRule
.