Пример конфигурации модуля

В примере представлена конфигурация модуля 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.

  1. Если в LDAP настроен анонимный доступ на чтение, настройки можно не указывать.
  2. В параметре 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.