Пример конфигурации модуля
В примере представлена конфигурация модуля user-authn
в Deckhouse Kubernetes Platform.
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: user-authn
spec:
version: 1
enabled: true
settings:
kubeconfigGenerator:
- id: direct
masterURI: https://159.89.5.247:6443
description: "Direct access to kubernetes API"
publishAPI:
enabled: true
Примеры настройки провайдера
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 Aps
-> Register a new OAuth application
и в качестве Authorization callback URL
укажите адрес https://dex.<modules.publicDomainTemplate>/callback
.
Полученные Client ID
и Client Secret
укажите в кастомном ресурсе DexProvider.
Если организация GitHub находится под управлением клиента, перейдите в Settings
-> Applications
-> Authorized OAuth Apps
-> <name of created OAuth App>
и нажмите Send Request
для подтверждения. Попросите клиента подтвердить запрос, который придет к нему на email.
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 проекта необходимо создать новое приложение.
Для этого выполните следующие шаги:
- 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
укажите в кастомном ресурсе 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
В соответствующем проекте Atlassian Crowd необходимо создать новое Generic
-приложение.
Для этого выполните следующие шаги:
Перейдите в Applications
-> Add application
.
Полученные Application Name
и Password
укажите в custom ресурсе 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.
OIDC (OpenID Connect)
В примере представлены настройки провайдера для интеграции с 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
Аутентификация через OIDC-провайдера требует регистрации клиента (или создания приложения). Сделайте это по документации вашего провайдера (например, Okta, Keycloak, Gluu).
Полученные в ходе выполнения инструкции clientID
и clientSecret
укажите в кастомном ресурсе 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 read-only-пользователя (service account).
Полученные путь до пользователя и пароль укажите в параметрах bindDN
и bindPW
кастомном ресурсе DexProvider.
- Если в LDAP настроен анонимный доступ на чтение, настройки можно не указывать.
- В параметре
bindPW
укажите пароль в plain-виде. Стратегии с передачей хэшированных паролей не предусмотрены.
Настройка OAuth2-клиента в Dex для подключения приложения
Этот вариант настройки подходит приложениям, которые имеют возможность использовать oauth2-аутентификацию самостоятельно, без помощи oauth2-proxy
.
Чтобы позволить подобным приложениям взаимодействовать с Dex, используется кастомном ресурс DexClient
.
apiVersion: deckhouse.io/v1
kind: DexClient
metadata:
name: myname
namespace: mynamespace
spec:
redirectURIs:
- https://app.example.com/callback
- https://app.example.com/callback-reserve
allowedGroups:
- Everyone
- admins
trustedPeers:
- opendistro-sibling
После создания такого ресурса в Dex будет зарегистрирован клиент с идентификатором (clientID) dex-client-myname@mynamespace
.
Пароль доступа к клиенту (clientSecret) сохранится в секрете:
apiVersion: v1
kind: Secret
metadata:
name: dex-client-myname
namespace: mynamespace
type: Opaque
data:
clientSecret: c2VjcmV0
Пример создания статического пользователя
Придумайте пароль и укажите его хэш-сумму в поле password
.
Для вычисления хэш-суммы пароля воспользуйтесь командой:
echo "$password" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0
Также можно воспользоваться онлайн-сервисом.
apiVersion: deckhouse.io/v1
kind: User
metadata:
name: admin
spec:
email: admin@yourcompany.com
password: $2a$10$etblbZ9yfZaKgbvysf1qguW3WULdMnxwWFrkoKpRH1yeWa5etjjAa
ttl: 24h
Пример добавления статического пользователя в группу
apiVersion: deckhouse.io/v1alpha1
kind: Group
metadata:
name: admins
spec:
name: admins
members:
- kind: User
name: admin
Выдача прав пользователю или группе
Для настройки используются параметры в кастомном ресурсе ClusterAuthorizationRule
.