Compare languages | Модуль user-authn: примеры конфигурации

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

An example of the module configuration

В примере представлена конфигурация модуля user-authn в Deckhouse Kubernetes Platform.

The example shows the configuration of the ‘user-authn` module in the Deckhouse Kubernetes Platform.

yaml 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: enable: true

yaml 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: enable: true

Примеры настройки провайдера

Configuring a provider

GitHub

GitHub

В примере представлены настройки провайдера для интеграции с GitHub.

The example shows the provider’s settings for integration with GitHub.

yaml apiVersion: deckhouse.io/v1 kind: DexProvider metadata: name: github spec: type: Github displayName: My Company GitHub github: clientID: plainstring clientSecret: plainstring

yaml apiVersion: deckhouse.io/v1 kind: DexProvider metadata: name: github spec: type: Github displayName: My Company Github github: clientID: plainstring clientSecret: plainstring

В организации GitHub необходимо создать новое приложение.

In your GitHub organization, create a new application:

Для этого выполните следующие шаги: Перейдите в Settings -> Developer settings -> OAuth Aps -> Register a new OAuth application и в качестве Authorization callback URL укажите адрес https://dex.<modules.publicDomainTemplate>/callback.

To do this, go to Settings -> Developer settings -> OAuth Aps -> Register a new OAuth application and specify the https://dex.<modules.publicDomainTemplate>/callback address as the Authorization callback URL.

Полученные Client ID и Client Secret укажите в кастомном ресурсе DexProvider.

Paste the generated Client ID and Client Secret into the DexProvider custom resource.

Если организация GitHub находится под управлением клиента, перейдите в Settings -> Applications -> Authorized OAuth Apps -> <name of created OAuth App> и нажмите Send Request для подтверждения. Попросите клиента подтвердить запрос, который придет к нему на email.

If the GitHub organization is managed by the client, go to Settings -> Applications -> Authorized OAuth Apps -> <name of created OAuth App> and request confirmation by clicking on Send Request. Then ask the client to confirm the request that will be sent to him by email.

GitLab

GitLab

В примере представлены настройки провайдера для интеграции с GitLab.

The example shows the provider’s settings for integration with GitLab.

yaml 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

yaml 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 проекта необходимо создать новое приложение.

Create a new application in the GitLab project.

Для этого выполните следующие шаги:

  • 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 при создании приложения.

To do this, you need to:

  • self-hosted: go to Admin area -> Application -> New application and specify the https://dex.<modules.publicDomainTemplate>/callback address as the Redirect URI (Callback url) and set scopes read_user, openid;
  • cloud gitlab.com: under the main project account, go to User Settings -> Application -> New application and specify the https://dex.<modules.publicDomainTemplate>/callback address as the Redirect URI (Callback url); also, don’t forget to set scopes read_user, openid;
  • (for GitLab version starting with 16) enable the Trusted/Trusted applications are automatically authorized on Gitlab OAuth flow checkbox when creating an application.

Полученные Application ID и Secret укажите в кастомном ресурсе DexProvider.

Paste the generated Application ID and Secret into the DexProvider custom resource.

Atlassian Crowd

Atlassian Crowd

В примере представлены настройки провайдера для интеграции с Atlassian Crowd.

The example shows the provider’s settings for integration with Atlassian Crowd.

yaml 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

yaml 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-приложение.

Create a new Generic application in the corresponding Atlassian Crowd project.

Для этого выполните следующие шаги: Перейдите в Applications -> Add application.

To do this, go to Applications -> Add application.

Полученные Application Name и Password укажите в custom ресурсе DexProvider.

Paste the generated Application Name and Password into the DexProvider custom resource.

Группы CROWD укажите в lowercase-формате для кастомного ресурса DexProvider.

CROWD groups are specified in the lowercase format for the custom resource DexProvider.

Bitbucket Cloud

Bitbucket Cloud

В примере представлены настройки провайдера для интеграции с Bitbucket.

The example shows the provider’s settings for integration with Bitbucket Cloud.

yaml apiVersion: deckhouse.io/v1 kind: DexProvider metadata: name: gitlab spec: type: BitbucketCloud displayName: Bitbucket bitbucketCloud: clientID: plainstring clientSecret: plainstring includeTeamGroups: true teams:

  • administrators
  • users

yaml apiVersion: deckhouse.io/v1 kind: DexProvider metadata: name: bitbucket spec: type: BitbucketCloud displayName: Bitbucket bitbucketCloud: clientID: plainstring clientSecret: plainstring includeTeamGroups: true teams:

  • administrators
  • users

Для настройки аутентификации необходимо в Bitbucket в меню команды создать нового OAuth consumer.

Create a new OAuth consumer in the Bitbucket’s team menu.

Для этого выполните следующие шаги: Перейдите в Settings -> OAuth consumers -> New application и в качестве Callback URL укажите адрес https://dex.<modules.publicDomainTemplate>/callback, разрешите доступ для Account: Read и Workspace membership: Read.

To do this, go to Settings -> OAuth consumers -> New application and specify the https://dex.<modules.publicDomainTemplate>/callback address as the Callback URL. Also, allow access for Account: Read and Workspace membership: Read.

Полученные Key и Secret укажите в кастомном ресурсе DexProvider.

Paste the generated Key and Secret into the DexProvider custom resource.

OIDC (OpenID Connect)

OIDC (OpenID Connect)

В примере представлены настройки провайдера для интеграции с Okta.

The example shows the provider’s settings for integration with Okta.

yaml 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

yaml 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).

Authentication through the OIDC provider requires registering a client (or “creating an application”). Please refer to the provider’s documentation on how to do it (e.g., Okta, Keycloak, Gluu).

Полученные в ходе выполнения инструкции clientID и clientSecret укажите в кастомном ресурсе DexProvider.

Paste the generated clientID and clientSecret into the DexProvider custom resource.

LDAP

LDAP

В примере представлены настройки провайдера для интеграции с Active Directory.

The example shows the provider’s settings for integration with Active Directory.

yaml apiVersion: deckhouse.io/v1 kind: DexProvider metadata: name: active-directory spec: type: LDAP displayName: Active Directory ldap: host: ad.example.com:636 insecureSkipVerify: true

yaml 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!

bindDN: cn=Administrator,cn=users,dc=example,dc=com bindPW: admin0!

usernamePrompt: Email Address

usernamePrompt: Email Address

userSearch: baseDN: cn=Users,dc=example,dc=com filter: “(objectClass=person)” username: userPrincipalName idAttr: DN emailAttr: userPrincipalName nameAttr: cn

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

groupSearch: baseDN: cn=Users,dc=example,dc=com filter: “(objectClass=group)” userMatchers:

  • userAttr: DN groupAttr: member nameAttr: cn

Для настройки аутентификации заведите в LDAP read-only-пользователя (service account).

To configure authentication, create a read-only user (service account) in LDAP.

Полученные путь до пользователя и пароль укажите в параметрах bindDN и bindPW кастомном ресурсе DexProvider.

  1. Если в LDAP настроен анонимный доступ на чтение, настройки можно не указывать.
  2. В параметре bindPW укажите пароль в plain-виде. Стратегии с передачей хэшированных паролей не предусмотрены.

Specify the generated user path and password in the bindDN and bindPW fields of the DexProvider custom resource.

  1. You can omit these settings of anonymous read access is configured for LDAP.
  2. Enter the password into the bindPW in the plain text format. Strategies involving the passing of hashed passwords are not supported.

Настройка OAuth2-клиента в Dex для подключения приложения

Configuring the OAuth2 client in Dex for connecting an application

Этот вариант настройки подходит приложениям, которые имеют возможность использовать oauth2-аутентификацию самостоятельно, без помощи oauth2-proxy. Чтобы позволить подобным приложениям взаимодействовать с Dex, используется кастомном ресурс DexClient.

This configuration is suitable for applications that can independently perform oauth2 authentication without using an oauth2 proxy. The DexClient custom resource enables applications to use dex.

yaml 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

yaml 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.

After the DexClient custom resource is created, Dex will register a client with a dex-client-myname@mynamespace ID (clientID).

Пароль доступа к клиенту (clientSecret) сохранится в секрете:

The client access password (clientSecret) will be stored in the secret object:

yaml apiVersion: v1 kind: Secret metadata: name: dex-client-myname namespace: mynamespace type: Opaque data: clientSecret: c2VjcmV0

yaml apiVersion: v1 kind: Secret metadata: name: dex-client-myname namespace: mynamespace type: Opaque data: clientSecret: c2VjcmV0

Пример создания статического пользователя

An example of creating a static user

Придумайте пароль и укажите его хэш-сумму в поле password.

Create a password and enter its hash in the password field.

Для вычисления хэш-суммы пароля воспользуйтесь командой:

Use the command below to calculate the password hash:

shell echo “$password” | htpasswd -inBC 10 “” | tr -d ‘:\n’ | sed ‘s/$2y/$2a/’

shell echo “$password” | htpasswd -inBC 10 “” | tr -d ‘:\n’ | sed ‘s/$2y/$2a/’

Также можно воспользоваться онлайн-сервисом.

Alternatively, you can use the online service to calculate the password hash.

yaml apiVersion: deckhouse.io/v1 kind: User metadata: name: admin spec: email: admin@yourcompany.com password: $2a$10$etblbZ9yfZaKgbvysf1qguW3WULdMnxwWFrkoKpRH1yeWa5etjjAa ttl: 24h

yaml apiVersion: deckhouse.io/v1 kind: User metadata: name: admin spec: email: admin@yourcompany.com password: $2a$10$etblbZ9yfZaKgbvysf1qguW3WULdMnxwWFrkoKpRH1yeWa5etjjAa groups:

  • Everyone
  • admins ttl: 24h

По умолчанию пользователь получит роль User.

By default, the user is assigned the role User.

Пример добавления статического пользователя в группу

Example of adding a static user to a group

yaml apiVersion: deckhouse.io/v1alpha1 kind: Group metadata: name: admins spec: name: admins members:

  • kind: User name: admin

yaml apiVersion: deckhouse.io/v1alpha1 kind: Group metadata: name: admins spec: name: admins members:

  • kind: User name: admin

Выдача прав пользователю или группе

How to set permissions for a user or group

Для настройки используются параметры в кастомном ресурсе ClusterAuthorizationRule.

Parameters in the custom resource ClusterAuthorizationRule are used for configuration.