DexAuthenticator

Scope: Namespaced

При появлении объекта DexAuthenticator в namespace будут созданы:

  • Deployment с oauth2-proxy и redis;
  • Service, ведущий на Deployment с oauth2-proxy;
  • Ingress, который принимает запросы по адресу https://<applicationDomain>/dex-authenticator и отправляет их в сторону Service;
  • Secret’ы, необходимые для доступа к Dex.

Важно! При перезапуске пода с oauth2-proxy с помощью refresh token’а будут получены и сохранены в память redis актуальные access token и id token.

Пример:

apiVersion: deckhouse.io/v1
kind: DexAuthenticator
metadata:
  name: app-name
  namespace: app-namespace
spec:
  applicationDomain: app-name.kube.my-domain.com
  sendAuthorizationHeader: false
  applicationIngressCertificateSecretName: ingress-tls
  applicationIngressClassName: nginx
  keepUsersLoggedInFor: 720h
  allowedGroups:
  - everyone
  - admins
  whitelistSourceRanges:
  - 1.1.1.1/32
  - 192.168.0.0/24
  • spec
    объект

    Обязательный параметр

    • spec.allowedGroups
      массив строк

      Группы, пользователям которых разрешено проходить аутентификацию.

      Дополнительно параметр помогает ограничить список групп до тех, которые несут для приложения полезную информацию.

      Например, в случае если у пользователя более 50 групп, но приложению Grafana мы хотим передать только определенные 5 групп.

      По умолчанию: All groups are allowed.

    • spec.applicationDomain
      строка

      Обязательный параметр

      Внешний адрес вашего приложения, с которого пользовательский запрос будет перенаправлен для авторизации в Dex.

      Не должен содержать HTTP-схему.

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

      Пример:

      applicationDomain: my-app.domain.com
      
    • spec.applicationIngressCertificateSecretName
      строка

      Имя Secret’а с TLS-сертификатом (от домена applicationDomain), который используется в Ingress-объекте приложения. Secret должен обязательно находиться в том же namespace, что и DexAuthenticator.

      Шаблон: ^(|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)$

      Пример:

      applicationIngressCertificateSecretName: ingress-tls
      
    • spec.applicationIngressClassName
      строка

      Обязательный параметр

      Название Ingress-класса, которое будет использоваться в Ingress-объекте (должно совпадать с названием Ingress-класса для applicationDomain).

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

      Пример:

      applicationIngressClassName: nginx
      
    • spec.keepUsersLoggedInFor
      строка

      Отвечает за то, как долго пользовательская сессия будет считаться активной, если пользователь бездействует (указывается с суффиксом s, m или h).

      По умолчанию: "168h"

      Пример:

      keepUsersLoggedInFor: 24h
      
    • spec.nodeSelector
      объект

      Определяет nodeSelector для подов dex-authenticator.

      Если ничего не указано или указано false, будет использоваться автоматика.

      Формат: стандартный список nodeSelector. Поды инстанса унаследуют это поле как есть.

    • spec.sendAuthorizationHeader
      булевый

      Флаг, который отвечает за отправку конечному приложению заголовка Authorization: Bearer.

      Включать, только если приложение умеет обрабатывать такой заголовок.

    • spec.signOutURL
      строка

      Передайте URL приложения, запросы с которого будут проксированы на URL выхода у dex-authenticator.

    • spec.tolerations
      массив объектов

      Определяет tolerations для подов dex-authenticator.

      Если ничего не указано или указано false, будет использоваться автоматика.

      Формат: стандартный список toleration. Поды инстанса унаследуют это поле как есть.

      • spec.tolerations.effect
        строка

        Определяет, какому effect’у taint’а соответствует описываемый toleration. Пустой подразумевает соответствие любому effect’у.

        Допустимые значения: NoSchedule, PreferNoSchedule, NoExecute

      • spec.tolerations.key
        строка

        Определяет, какому ключу (key) taint’a соответствует описываемый toleration. Пустой подразумевает соответствие любому ключу.

        Если ключ не указан (пуст), operator должен быть Exists, что подразумевает соответствие любым value и key.

      • spec.tolerations.operator
        строка

        Определяет отношение ключа (key) к значению (value) — должен ли ключ быть равен (Equal) значению или допустимо существование ключа с любым значением.

        Указание Exists равносильно допуску любого значения (для value), чтобы под с указанным toleration удовлетворял соответствующему taint’у.

        По умолчанию: "Equal"

        Допустимые значения: Exists, Equal

      • spec.tolerations.tolerationSeconds
        целочисленный

        Определяет период времени в секундах, в течение которого планировщик должен ждать, прежде чем вытеснить (evict) под с узла, если toleration перестал удовлетворять taint’у (справедливо только для effect NoExecute, иначе игнорируется).

        Если не установлено, под не будет вытеснен с узла, если toleration перестал удовлетворять taint. Если установлен в ноль (или отрицателен), под будет вытеснен с узла немедленно, если toleration перестал удовлетворять taint’у.

        По умолчанию используется значение «не установлено».

      • spec.tolerations.value
        строка

        Значение, которому должен удовлетворять toleration.

        Должно быть пустым, если operator — Exists.

    • spec.whitelistSourceRanges
      массив строк

      Список адресов в формате CIDR, которым разрешено проходить аутентификацию. Если параметр не указан, аутентификацию разрешено проходить без ограничения по IP-адресу.

      Пример:

      whitelistSourceRanges: 192.168.42.0/24
      
      • Элемент массива
        строка

        Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$

При появлении объекта DexAuthenticator в namespace будут созданы:

  • Deployment с oauth2-proxy и redis;
  • Service, ведущий на Deployment с oauth2-proxy;
  • Ingress, который принимает запросы по адресу https://<applicationDomain>/dex-authenticator и отправляет их в сторону Service;
  • Secret’ы, необходимые для доступа к Dex.

Важно! При перезапуске пода с oauth2-proxy с помощью refresh token’а будут получены и сохранены в память redis актуальные access token и id token.

Пример:

apiVersion: deckhouse.io/v1
kind: DexAuthenticator
metadata:
  name: app-name
  namespace: app-namespace
spec:
  applicationDomain: app-name.kube.my-domain.com
  sendAuthorizationHeader: false
  applicationIngressCertificateSecretName: ingress-tls
  applicationIngressClassName: nginx
  keepUsersLoggedInFor: 720h
  allowedGroups:
  - everyone
  - admins
  whitelistSourceRanges:
  - 1.1.1.1/32
  - 192.168.0.0/24
  • spec
    объект

    Обязательный параметр

    • spec.allowedGroups
      массив строк

      Группы, пользователям которых разрешено проходить аутентификацию.

      Дополнительно параметр помогает ограничить список групп до тех, которые несут для приложения полезную информацию.

      Например, в случае если у пользователя более 50 групп, но приложению Grafana мы хотим передать только определенные 5 групп.

      По умолчанию: All groups are allowed.

    • spec.applicationDomain
      строка

      Обязательный параметр

      Внешний адрес вашего приложения, с которого пользовательский запрос будет перенаправлен для авторизации в Dex.

      Не должен содержать HTTP-схему.

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

      Пример:

      applicationDomain: my-app.domain.com
      
    • spec.applicationIngressCertificateSecretName
      строка

      Имя Secret’а с TLS-сертификатом (от домена applicationDomain), который используется в Ingress-объекте приложения. Secret должен обязательно находиться в том же namespace, что и DexAuthenticator.

      Шаблон: ^(|[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)$

      Пример:

      applicationIngressCertificateSecretName: ingress-tls
      
    • spec.applicationIngressClassName
      строка

      Обязательный параметр

      Название Ingress-класса, которое будет использоваться в Ingress-объекте (должно совпадать с названием Ingress-класса для applicationDomain).

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

      Пример:

      applicationIngressClassName: nginx
      
    • spec.keepUsersLoggedInFor
      строка

      Отвечает за то, как долго пользовательская сессия будет считаться активной, если пользователь бездействует (указывается с суффиксом s, m или h).

      По умолчанию: "168h"

      Пример:

      keepUsersLoggedInFor: 24h
      
    • spec.nodeSelector
      объект

      Определяет nodeSelector для подов dex-authenticator.

      Если ничего не указано или указано false, будет использоваться автоматика.

      Формат: стандартный список nodeSelector. Поды инстанса унаследуют это поле как есть.

    • spec.sendAuthorizationHeader
      булевый

      Флаг, который отвечает за отправку конечному приложению заголовка Authorization: Bearer.

      Включать, только если приложение умеет обрабатывать такой заголовок.

    • spec.signOutURL
      строка

      Передайте URL приложения, запросы с которого будут проксированы на URL выхода у dex-authenticator.

    • spec.tolerations
      массив объектов

      Определяет tolerations для подов dex-authenticator.

      Если ничего не указано или указано false, будет использоваться автоматика.

      Формат: стандартный список toleration. Поды инстанса унаследуют это поле как есть.

      • spec.tolerations.effect
        строка

        Определяет, какому effect’у taint’а соответствует описываемый toleration. Пустой подразумевает соответствие любому effect’у.

        Допустимые значения: NoSchedule, PreferNoSchedule, NoExecute

      • spec.tolerations.key
        строка

        Определяет, какому ключу (key) taint’a соответствует описываемый toleration. Пустой подразумевает соответствие любому ключу.

        Если ключ не указан (пуст), operator должен быть Exists, что подразумевает соответствие любым value и key.

      • spec.tolerations.operator
        строка

        Определяет отношение ключа (key) к значению (value) — должен ли ключ быть равен (Equal) значению или допустимо существование ключа с любым значением.

        Указание Exists равносильно допуску любого значения (для value), чтобы под с указанным toleration удовлетворял соответствующему taint’у.

        По умолчанию: "Equal"

        Допустимые значения: Exists, Equal

      • spec.tolerations.tolerationSeconds
        целочисленный

        Определяет период времени в секундах, в течение которого планировщик должен ждать, прежде чем вытеснить (evict) под с узла, если toleration перестал удовлетворять taint’у (справедливо только для effect NoExecute, иначе игнорируется).

        Если не установлено, под не будет вытеснен с узла, если toleration перестал удовлетворять taint. Если установлен в ноль (или отрицателен), под будет вытеснен с узла немедленно, если toleration перестал удовлетворять taint’у.

        По умолчанию используется значение «не установлено».

      • spec.tolerations.value
        строка

        Значение, которому должен удовлетворять toleration.

        Должно быть пустым, если operator — Exists.

    • spec.whitelistSourceRanges
      массив строк

      Список адресов в формате CIDR, которым разрешено проходить аутентификацию. Если параметр не указан, аутентификацию разрешено проходить без ограничения по IP-адресу.

      Пример:

      whitelistSourceRanges: 192.168.42.0/24
      
      • Элемент массива
        строка

        Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$

DexClient

Scope: Namespaced

Позволяет приложениям, поддерживающим DC-аутентификацию, взаимодействовать с Dex.

После появления в кластере объекта DexClient:

  • в Dex будет зарегистрирован клиент с идентификатором (clientID) dex-client-<NAME>@<NAMESPACE>, где <NAME> и <NAMESPACE>metadata.name и metadata.namespace объекта DexClient соответственно;
  • в соответствующем namespace будет создан Secret dex-client-<NAME> (где <NAME>metadata.name объекта DexClient), содержащий пароль доступа к клиенту (clientSecret).

Пример использования…

  • spec
    объект

    Обязательный параметр

    • spec.allowedGroups
      массив строк

      Список групп, участникам которых разрешено подключаться к этому клиенту;

      По умолчанию разрешено всем группам.

    • spec.redirectURIs
      массив строк

      Список адресов, на которые допустимо редиректить Dex’у после успешного прохождения аутентификации.

    • spec.trustedPeers
      массив строк

      ID клиентов, которым позволена cross-аутентификация.

      Подробнее…

Позволяет приложениям, поддерживающим DC-аутентификацию, взаимодействовать с Dex.

После появления в кластере объекта DexClient:

  • в Dex будет зарегистрирован клиент с идентификатором (clientID) dex-client-<NAME>@<NAMESPACE>, где <NAME> и <NAMESPACE>metadata.name и metadata.namespace объекта DexClient соответственно;
  • в соответствующем namespace будет создан Secret dex-client-<NAME> (где <NAME>metadata.name объекта DexClient), содержащий пароль доступа к клиенту (clientSecret).

Пример использования…

  • spec
    объект

    Обязательный параметр

    • spec.allowedGroups
      массив строк

      Список групп, участникам которых разрешено подключаться к этому клиенту;

      По умолчанию разрешено всем группам.

    • spec.redirectURIs
      массив строк

      Список адресов, на которые допустимо редиректить Dex’у после успешного прохождения аутентификации.

    • spec.trustedPeers
      массив строк

      ID клиентов, которым позволена cross-аутентификация.

      Подробнее…

DexProvider

Scope: Cluster

Описывает конфигурацию подключения стороннего провайдера.

С его помощью можно гибко настроить интеграцию каталога учетных записей с Kubernetes.

Пример использования…

  • spec
    объект

    Обязательный параметр

    • spec.bitbucketCloud
      объект

      Параметры провайдера Bitbucket Cloud (можно указывать, только если type: BitbucketCloud).

      • spec.bitbucketCloud.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в Bitbucket Cloud (Key).

      • spec.bitbucketCloud.clientSecret
        строка

        Обязательный параметр

        Secret приложения, созданного в Bitbucket Cloud (Secret).

      • spec.bitbucketCloud.includeTeamGroups
        булевый

        Включает в список команд все группы команды, в которых состоит пользователь.

        Пример групп пользователя с включенной опцией:

        groups=["my_team", "my_team/administrators", "my_team/members"]
        

        По умолчанию: false

      • spec.bitbucketCloud.teams
        массив строк

        Список-фильтр команд, допустимых для приема из Bitbucket Cloud.

        Токен пользователя будет содержать пересечение множеств команд из Bitbucket Cloud и команд из этого списка. Если если множество окажется пустым, авторизация не будет считаться успешной.

        Токен будет содержать команды пользователя в claim groups, как и у других провайдеров.

    • spec.crowd
      объект

      Параметры провайдера Crowd (можно указывать, только если type: Crowd).

      • spec.crowd.baseURL
        строка

        Обязательный параметр

        Адрес Crowd.

        Пример:

        baseURL: https://crowd.example.com/crowd
        
      • spec.crowd.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в Crowd (Application Name).

      • spec.crowd.clientSecret
        строка

        Обязательный параметр

        Пароль приложения, созданного в Crowd (Password).

      • spec.crowd.enableBasicAuth
        булевый

        Включает возможность basic-авторизации для Kubernetes API server.

        В качестве credentials для basic-авторизации указываются логин и пароль пользователя из приложения, созданного в Crowd (возможно включить при указании только одного провайдера с типом OIDC/Crowd).

        Работает только при включенном publishAPI.

        Полученные от IdP данные авторизации и групп сохраняются в кэш на 10 секунд.

      • spec.crowd.groups
        массив строк

        Список-фильтр групп, допустимых для приема из Crowd.

        Токен пользователя будет содержать пересечение множеств групп из Crowd и групп из этого списка. Если множество окажется пустым, авторизация не будет считаться успешной.

        Если параметр не указан, токен пользователя будет содержать все группы из Crowd.

      • spec.crowd.usernamePrompt
        строка

        Строка, которая будет отображаться возле поля для имени пользователя в форме ввода логина и пароля.

        По умолчанию: "Crowd username"

    • spec.displayName
      строка

      Обязательный параметр

      Имя провайдера, которое будет отображено на странице выбора провайдера для аутентификации.

      Если настроен всего один провайдер, страница выбора провайдера показываться не будет.

    • spec.github
      объект

      Параметры провайдера GitHub (можно указывать, только если type: Github).

      • spec.github.clientID
        строка

        Обязательный параметр

        ID организации на GitHub.

      • spec.github.clientSecret
        строка

        Обязательный параметр

        Secret организации на GitHub.

      • spec.github.orgs
        массив объектов

        Массив названий организаций в GitHub.

        • spec.github.orgs.name
          строка

          Обязательный параметр

          Название организации.

        • spec.github.orgs.teams
          массив строк

          Список-фильтр команд, допустимых для приема из GitHub.

          Токен пользователя будет содержать пересечение множеств команд из GitHub и команд из этого списка. Если множество окажется пустым, авторизация не будет считаться успешной.

          Если параметр не указан, токен пользователя будет содержать все команды из GitHub.

      • spec.github.teamNameField
        строка

        Формат команд, которые будут получены из GitHub.

        Если в организации acme есть группа Site Reliability Engineers, в случае:

        • Name будет получена группа с именем ['acme:Site Reliability Engineers'];
        • Slug будет получена группа с именем ['acme:site-reliability-engineers'];
        • Both будут получены группы с именами ['acme:Site Reliability Engineers', 'acme:site-reliability-engineers'].

        По умолчанию: "Name"

        Допустимые значения: Name, Slug, Both

      • spec.github.useLoginAsID
        булевый

        Позволяет вместо использования внутреннего GitHub ID использовать имя пользователя.

    • spec.gitlab
      объект

      Параметры провайдера GitLab (можно указывать, только если type: Gitlab).

      • spec.gitlab.baseURL
        строка

        Адрес GitLab.

        Пример:

        baseURL: https://gitlab.example.com
        
      • spec.gitlab.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в GitLab (Application ID).

      • spec.gitlab.clientSecret
        строка

        Обязательный параметр

        Secret приложения, созданного в GitLab (Secret).

      • spec.gitlab.groups
        массив строк

        Список-фильтр групп (пути групп — path, а не имена), допустимых для приема из GitLab.

        Токен пользователя будет содержать пересечение множеств групп из GitLab и групп из этого списка. Если множество окажется пустым, авторизация не будет считаться успешной.

        Если параметр не указан, токен пользователя будет содержать все группы из GitLab.

      • spec.gitlab.useLoginAsID
        булевый

        Позволяет вместо использования внутреннего GitLab ID, использовать имя пользователя.

    • spec.ldap
      объект

      Параметры провайдера LDAP.

      • spec.ldap.bindDN
        строка

        Путь до сервис-аккаунта приложения в LDAP.

        Пример:

        bindDN: uid=serviceaccount,cn=users,dc=example,dc=com
        
      • spec.ldap.bindPW
        строка

        Пароль для сервис-аккаунта приложения в LDAP.

        Пример:

        bindPW: password
        
      • spec.ldap.groupSearch
        объект

        Настройки фильтра для поиска групп для указанного пользователя.

        Подробнее о процессе фильтрации…

        • spec.ldap.groupSearch.baseDN
          строка

          Обязательный параметр

          Откуда будет начат поиск групп

          Пример:

          baseDN: cn=users,dc=example,dc=com
          
        • spec.ldap.groupSearch.filter
          строка

          Фильтр для директории с группами.

          Пример:

          filter: "(objectClass=person)"
          
        • spec.ldap.groupSearch.nameAttr
          строка

          Обязательный параметр

          Имя атрибута, в котором хранится уникальное имя группы.

          Пример:

          nameAttr: name
          
        • spec.ldap.groupSearch.userMatchers
          массив объектов

          Обязательный параметр

          Список сопоставлений атрибута имени юзера с именем группы.

          • spec.ldap.groupSearch.userMatchers.groupAttr
            строка

            Обязательный параметр

            Имя атрибута, в котором хранятся имена пользователей, состоящих в группе.

            Пример:

            groupAttr: member
            
          • spec.ldap.groupSearch.userMatchers.userAttr
            строка

            Обязательный параметр

            Имя атрибута, в котором хранится имя пользователя.

            Пример:

            userAttr: uid
            
      • spec.ldap.host
        строка

        Обязательный параметр

        Адрес и порт (опционально) LDAP-сервера.

        Пример:

        host: ldap.example.com:636
        
      • spec.ldap.insecureNoSSL
        булевый

        Подключаться к каталогу LDAP не по защищенному порту.

        По умолчанию: false

      • spec.ldap.insecureSkipVerify
        булевый

        Не производить проверку подлинности провайдера с помощью TLS. Небезопасно, не рекомендуется использовать в production-окружениях.

        По умолчанию: false

      • spec.ldap.rootCAData
        строка

        Цепочка CA в формате PEM, используемая для валидации TLS.

        Пример:

        rootCAData: |
          -----BEGIN CERTIFICATE-----
          MIIFaDC...
          -----END CERTIFICATE-----
        
      • spec.ldap.startTLS
        булевый

        Использовать STARTTLS для шифрования.

        По умолчанию: false

      • spec.ldap.userSearch
        объект

        Обязательный параметр

        Настройки фильтров пользователей, которые помогают сначала отфильтровать директории, в которых будет производиться поиск пользователей, а затем найти пользователя по полям (его имени, адресу электронной почты или отображаемому имени).

        Подробнее о процессе фильтрации…

        • spec.ldap.userSearch.baseDN
          строка

          Обязательный параметр

          Откуда будет начат поиск пользователей.

          Пример:

          baseDN: cn=users,dc=example,dc=com
          
        • spec.ldap.userSearch.emailAttr
          строка

          Обязательный параметр

          Имя атрибута, из которого будет получен email пользователя.

          Пример:

          emailAttr: mail
          
        • spec.ldap.userSearch.filter
          строка

          Позволяет добавить фильтр для директории с пользователями.

          Пример:

          filter: "(objectClass=person)"
          
        • spec.ldap.userSearch.idAttr
          строка

          Обязательный параметр

          Имя атрибута, из которого будет получен ID пользователя.

          Пример:

          idAttr: uid
          
        • spec.ldap.userSearch.nameAttr
          строка

          Атрибут отображаемого имени пользователя.

          Пример:

          nameAttr: name
          
        • spec.ldap.userSearch.username
          строка

          Обязательный параметр

          Имя атрибута, из которого будет получен username пользователя.

          Пример:

          username: uid
          
      • spec.ldap.usernamePrompt
        строка

        Строка, которая будет отображаться возле поля для имени пользователя в форме ввода логина и пароля.

        По умолчанию: "LDAP username"

        Пример:

        usernamePrompt: SSO Username
        
    • spec.oidc
      объект

      Параметры провайдера OIDC (можно указывать, только если type: OIDC).

      • spec.oidc.basicAuthUnsupported
        булевый

        Использовать POST-запросы для общения с провайдером вместо добавления токена в Basic Authorization header.

        В большинстве случаев Dex сам определяет, какой запрос ему нужно сделать, но иногда включение этого параметра может помочь.

        По умолчанию: false

      • spec.oidc.claimMapping
        объект

        Некоторые провайдеры возвращают нестандартные claim’ы (например, mail). Claim mappings помогают Dex преобразовать их в стандартные claim’ы OIDC.

        Dex может преобразовать нестандартный claim в стандартный, только если id_token, полученный от OIDC-провайдера, не содержит аналогичный стандартный claim.

        • spec.oidc.claimMapping.email
          строка

          Claim, который будет использован для получения email пользователя.

          По умолчанию: "email"

        • spec.oidc.claimMapping.groups
          строка

          Claim, который будет использован для получения групп пользователя.

          По умолчанию: "groups"

        • spec.oidc.claimMapping.preferred_username
          строка

          Claim, который будет использован для получения предпочтительного имени пользователя.

          По умолчанию: "preferred_username"

      • spec.oidc.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в OIDC-провайдере.

      • spec.oidc.clientSecret
        строка

        Обязательный параметр

        Пароль приложения, созданного в OIDC-провайдере.

      • spec.oidc.enableBasicAuth
        булевый

        Включает возможность basic-авторизации для Kubernetes API server.

        В качестве credentials для basic-авторизации указываются логин и пароль пользователя из приложения, созданного в OIDC (возможно включить при указании только одного провайдера с типом OIDC/Crowd).

        Работает только при включенном параметре publishAPI.

        Полученные от IdP данные авторизации и групп сохраняются в кэш на 10 секунд.

      • spec.oidc.getUserInfo
        булевый

        Запрашивать дополнительные данные об успешно подключенном пользователе.

        Подробнее…

        По умолчанию: false

      • spec.oidc.insecureSkipEmailVerified
        булевый

        Игнорировать информацию о статусе подтверждения email пользователя.

        Как именно подтверждается email, решает сам провайдер. В ответе от провайдера приходит лишь информация — подтвержден email или нет.

        По умолчанию: false

      • spec.oidc.insecureSkipVerify
        булевый

        Не производить проверку подлинности провайдера с помощью TLS. Небезопасно, не рекомендуется использовать в production-окружениях.

        По умолчанию: false

      • spec.oidc.issuer
        строка

        Обязательный параметр

        Адрес OIDC-провайдера.

        Пример:

        issuer: https://accounts.google.com
        
      • spec.oidc.promptType
        строка

        Определяет — должен ли Issuer запрашивать подтверждение и давать подсказки при аутентификации.

        По умолчанию будет запрошено подтверждение при первой аутентификации. Допустимые значения могут изменяться в зависимости от Issuer.

        По умолчанию: "consent"

      • spec.oidc.rootCAData
        строка

        Цепочка CA в формате PEM, используемая для валидации TLS.

        Пример:

        rootCAData: |
          -----BEGIN CERTIFICATE-----
          MIIFaDC...
          -----END CERTIFICATE-----
        
      • spec.oidc.scopes
        массив строк

        Список полей для включения в ответ при запросе токена.

        По умолчанию: ["openid","profile","email","groups","offline_access"]

      • spec.oidc.userIDKey
        строка

        Claim, который будет использован для получения ID пользователя.

        По умолчанию: "sub"

      • spec.oidc.userNameKey
        строка

        Claim, который будет использован для получения имени пользователя.

        По умолчанию: "name"

    • spec.type
      строка

      Обязательный параметр

      Тип внешнего провайдера.

      Допустимые значения: Github, Gitlab, BitbucketCloud, Crowd, OIDC, LDAP

Описывает конфигурацию подключения стороннего провайдера.

С его помощью можно гибко настроить интеграцию каталога учетных записей с Kubernetes.

Пример использования…

  • spec
    объект

    Обязательный параметр

    • spec.bitbucketCloud
      объект

      Параметры провайдера Bitbucket Cloud (можно указывать, только если type: BitbucketCloud).

      • spec.bitbucketCloud.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в Bitbucket Cloud (Key).

      • spec.bitbucketCloud.clientSecret
        строка

        Обязательный параметр

        Secret приложения, созданного в Bitbucket Cloud (Secret).

      • spec.bitbucketCloud.includeTeamGroups
        булевый

        Включает в список команд все группы команды, в которых состоит пользователь.

        Пример групп пользователя с включенной опцией:

        groups=["my_team", "my_team/administrators", "my_team/members"]
        

        По умолчанию: false

      • spec.bitbucketCloud.teams
        массив строк

        Список-фильтр команд, допустимых для приема из Bitbucket Cloud.

        Токен пользователя будет содержать пересечение множеств команд из Bitbucket Cloud и команд из этого списка. Если если множество окажется пустым, авторизация не будет считаться успешной.

        Токен будет содержать команды пользователя в claim groups, как и у других провайдеров.

    • spec.crowd
      объект

      Параметры провайдера Crowd (можно указывать, только если type: Crowd).

      • spec.crowd.baseURL
        строка

        Обязательный параметр

        Адрес Crowd.

        Пример:

        baseURL: https://crowd.example.com/crowd
        
      • spec.crowd.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в Crowd (Application Name).

      • spec.crowd.clientSecret
        строка

        Обязательный параметр

        Пароль приложения, созданного в Crowd (Password).

      • spec.crowd.enableBasicAuth
        булевый

        Включает возможность basic-авторизации для Kubernetes API server.

        В качестве credentials для basic-авторизации указываются логин и пароль пользователя из приложения, созданного в Crowd (возможно включить при указании только одного провайдера с типом OIDC/Crowd).

        Работает только при включенном publishAPI.

        Полученные от IdP данные авторизации и групп сохраняются в кэш на 10 секунд.

      • spec.crowd.groups
        массив строк

        Список-фильтр групп, допустимых для приема из Crowd.

        Токен пользователя будет содержать пересечение множеств групп из Crowd и групп из этого списка. Если множество окажется пустым, авторизация не будет считаться успешной.

        Если параметр не указан, токен пользователя будет содержать все группы из Crowd.

      • spec.crowd.usernamePrompt
        строка

        Строка, которая будет отображаться возле поля для имени пользователя в форме ввода логина и пароля.

        По умолчанию: "Crowd username"

    • spec.displayName
      строка

      Обязательный параметр

      Имя провайдера, которое будет отображено на странице выбора провайдера для аутентификации.

      Если настроен всего один провайдер, страница выбора провайдера показываться не будет.

    • spec.github
      объект

      Параметры провайдера GitHub (можно указывать? только если type: Github).

      • spec.github.clientID
        строка

        Обязательный параметр

        ID организации на GitHub.

      • spec.github.clientSecret
        строка

        Обязательный параметр

        Secret организации на GitHub.

      • spec.github.orgs
        массив объектов

        Массив названий организаций в GitHub.

        • spec.github.orgs.name
          строка

          Обязательный параметр

          Название организации.

        • spec.github.orgs.teams
          массив строк

          Список команд, допустимых для приема из GitHub.

          Токен пользователя будет содержать объединенное множество команд из GitHub и команд из этого списка. Если множество окажется пустым, авторизация не будет считаться успешной.

          Если параметр не указан, токен пользователя будет содержать все команды из GitHub.

      • spec.github.teamNameField
        строка

        Формат команд, которые будут получены из GitHub.

        Если в организации acme есть группа Site Reliability Engineers, в случае:

        • name будет получена группа с именем ['acme:Site Reliability Engineers'];
        • slug будет получена группа с именем ['acme:site-reliability-engineers'];
        • both будут получены группы с именами ['acme:Site Reliability Engineers', 'acme:site-reliability-engineers'].

        По умолчанию: "name"

        Допустимые значения: name, slug, both

      • spec.github.useLoginAsID
        булевый

        Позволяет вместо использования внутреннего GitHub ID использовать имя пользователя.

    • spec.gitlab
      объект

      Параметры провайдера GitLab (можно указывать, только если type: Gitlab).

      • spec.gitlab.baseURL
        строка

        Адрес GitLab.

        Пример:

        baseURL: https://gitlab.example.com
        
      • spec.gitlab.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в GitLab (Application ID).

      • spec.gitlab.clientSecret
        строка

        Обязательный параметр

        Secret приложения, созданного в GitLab (Secret).

      • spec.gitlab.groups
        массив строк

        Список-фильтр групп (пути групп — path, а не имена), допустимых для приема из GitLab.

        Токен пользователя будет содержать пересечение множеств групп из GitLab и групп из этого списка. Если множество окажется пустым, авторизация не будет считаться успешной.

        Если параметр не указан, токен пользователя будет содержать все группы из GitLab.

      • spec.gitlab.useLoginAsID
        булевый

        Позволяет вместо использования внутреннего GitLab ID, использовать имя пользователя.

    • spec.ldap
      объект

      Параметры провайдера LDAP.

      • spec.ldap.bindDN
        строка

        Путь до сервис-аккаунта приложения в LDAP.

        Пример:

        bindDN: uid=serviceaccount,cn=users,dc=example,dc=com
        
      • spec.ldap.bindPW
        строка

        Пароль для сервис-аккаунта приложения в LDAP.

        Пример:

        bindPW: password
        
      • spec.ldap.groupSearch
        объект

        Настройки фильтра для поиска групп для указанного пользователя.

        Подробнее о процессе фильтрации…

        • spec.ldap.groupSearch.baseDN
          строка

          Обязательный параметр

          Откуда будет начат поиск групп

          Пример:

          baseDN: cn=users,dc=example,dc=com
          
        • spec.ldap.groupSearch.filter
          строка

          Фильтр для директории с группами.

          Пример:

          filter: "(objectClass=person)"
          
        • spec.ldap.groupSearch.nameAttr
          строка

          Обязательный параметр

          Имя атрибута, в котором хранится уникальное имя группы.

          Пример:

          nameAttr: name
          
        • spec.ldap.groupSearch.userMatchers
          массив объектов

          Обязательный параметр

          Список сопоставлений атрибута имени юзера с именем группы.

          • spec.ldap.groupSearch.userMatchers.groupAttr
            строка

            Обязательный параметр

            Имя атрибута, в котором хранятся имена пользователей, состоящих в группе.

            Пример:

            groupAttr: member
            
          • spec.ldap.groupSearch.userMatchers.userAttr
            строка

            Обязательный параметр

            Имя атрибута, в котором хранится имя пользователя.

            Пример:

            userAttr: uid
            
      • spec.ldap.host
        строка

        Обязательный параметр

        Адрес и порт (опционально) LDAP-сервера.

        Пример:

        host: ldap.example.com:636
        
      • spec.ldap.insecureNoSSL
        булевый

        Подключаться к каталогу LDAP не по защищенному порту.

        По умолчанию: false

      • spec.ldap.insecureSkipVerify
        булевый

        Не производить проверку подлинности провайдера с помощью TLS. Небезопасно, не рекомендуется использовать в production-окружениях.

        По умолчанию: false

      • spec.ldap.rootCAData
        строка

        Цепочка CA в формате PEM, используемая для валидации TLS.

        Пример:

        rootCAData: |
          -----BEGIN CERTIFICATE-----
          MIIFaDC...
          -----END CERTIFICATE-----
        
      • spec.ldap.startTLS
        булевый

        Использовать STARTTLS для шифрования.

        По умолчанию: false

      • spec.ldap.userSearch
        объект

        Обязательный параметр

        Настройки фильтров пользователей, которые помогают сначала отфильтровать директории, в которых будет производиться поиск пользователей, а затем найти пользователя по полям (его имени, адресу электронной почты или отображаемому имени).

        Подробнее о процессе фильтрации…

        • spec.ldap.userSearch.baseDN
          строка

          Обязательный параметр

          Откуда будет начат поиск пользователей.

          Пример:

          baseDN: cn=users,dc=example,dc=com
          
        • spec.ldap.userSearch.emailAttr
          строка

          Обязательный параметр

          Имя атрибута, из которого будет получен email пользователя.

          Пример:

          emailAttr: mail
          
        • spec.ldap.userSearch.filter
          строка

          Позволяет добавить фильтр для директории с пользователями.

          Пример:

          filter: "(objectClass=person)"
          
        • spec.ldap.userSearch.idAttr
          строка

          Обязательный параметр

          Имя атрибута, из которого будет получен ID пользователя.

          Пример:

          idAttr: uid
          
        • spec.ldap.userSearch.nameAttr
          строка

          Атрибут отображаемого имени пользователя.

          Пример:

          nameAttr: name
          
        • spec.ldap.userSearch.username
          строка

          Обязательный параметр

          Имя атрибута, из которого будет получен username пользователя.

          Пример:

          username: uid
          
      • spec.ldap.usernamePrompt
        строка

        Строка, которая будет отображаться возле поля для имени пользователя в форме ввода логина и пароля.

        По умолчанию: "LDAP username"

        Пример:

        usernamePrompt: SSO Username
        
    • spec.oidc
      объект

      Параметры провайдера OIDC (можно указывать, только если type: OIDC).

      • spec.oidc.basicAuthUnsupported
        булевый

        Использовать POST-запросы для общения с провайдером вместо добавления токена в Basic Authorization header.

        В большинстве случаев Dex сам определяет, какой запрос ему нужно сделать, но иногда включение этого параметра может помочь.

        По умолчанию: false

      • spec.oidc.claimMapping
        объект

        Некоторые провайдеры возвращают нестандартные claim’ы (например, mail). Claim mappings помогают Dex преобразовать их в стандартные claim’ы OIDC.

        Dex может преобразовать нестандартный claim в стандартный, только если id_token, полученный от OIDC-провайдера, не содержит аналогичный стандартный claim.

        • spec.oidc.claimMapping.email
          строка

          Claim, который будет использован для получения email пользователя.

          По умолчанию: "email"

        • spec.oidc.claimMapping.groups
          строка

          Claim, который будет использован для получения групп пользователя.

          По умолчанию: "groups"

        • spec.oidc.claimMapping.preferred_username
          строка

          Claim, который будет использован для получения предпочтительного имени пользователя.

          По умолчанию: "preferred_username"

      • spec.oidc.clientID
        строка

        Обязательный параметр

        ID приложения, созданного в OIDC-провайдере.

      • spec.oidc.clientSecret
        строка

        Обязательный параметр

        Пароль приложения, созданного в OIDC-провайдере.

      • spec.oidc.enableBasicAuth
        булевый

        Включает возможность basic-авторизации для Kubernetes API server.

        В качестве credentials для basic-авторизации указываются логин и пароль пользователя из приложения, созданного в OIDC (возможно включить при указании только одного провайдера с типом OIDC/Crowd).

        Работает только при включенном параметре publishAPI.

        Полученные от IdP данные авторизации и групп сохраняются в кэш на 10 секунд.

      • spec.oidc.getUserInfo
        булевый

        Запрашивать дополнительные данные об успешно подключенном пользователе.

        Подробнее…

        По умолчанию: false

      • spec.oidc.insecureSkipEmailVerified
        булевый

        Игнорировать информацию о статусе подтверждения email пользователя.

        Как именно подтверждается email, решает сам провайдер. В ответе от провайдера приходит лишь информация — подтвержден email или нет.

        По умолчанию: false

      • spec.oidc.insecureSkipVerify
        булевый

        Не производить проверку подлинности провайдера с помощью TLS. Небезопасно, не рекомендуется использовать в production-окружениях.

        По умолчанию: false

      • spec.oidc.issuer
        строка

        Обязательный параметр

        Адрес OIDC-провайдера.

        Пример:

        issuer: https://accounts.google.com
        
      • spec.oidc.promptType
        строка

        Определяет — должен ли Issuer запрашивать подтверждение и давать подсказки при аутентификации.

        По умолчанию будет запрошено подтверждение при первой аутентификации. Допустимые значения могут изменяться в зависимости от Issuer.

        По умолчанию: "consent"

      • spec.oidc.rootCAData
        строка

        Цепочка CA в формате PEM, используемая для валидации TLS.

        Пример:

        rootCAData: |
          -----BEGIN CERTIFICATE-----
          MIIFaDC...
          -----END CERTIFICATE-----
        
      • spec.oidc.scopes
        массив строк

        Список полей для включения в ответ при запросе токена.

        По умолчанию: ["openid","profile","email","groups","offline_access"]

      • spec.oidc.userIDKey
        строка

        Claim, который будет использован для получения ID пользователя.

        По умолчанию: "sub"

      • spec.oidc.userNameKey
        строка

        Claim, который будет использован для получения имени пользователя.

        По умолчанию: "name"

    • spec.type
      строка

      Обязательный параметр

      Тип внешнего провайдера.

      Допустимые значения: Github, Gitlab, BitbucketCloud, Crowd, OIDC, LDAP

Group

Scope: Cluster
Version: v1alpha1

Содержит информацию о статических группах.

  • spec
    объект

    Обязательный параметр

    • spec.members
      массив объектов

      Обязательный параметр

      Список членов группы.

      • spec.members.kind
        строка

        Обязательный параметр

        Тип члена группы.

        Допустимые значения: User, Group

      • spec.members.name
        строка

        Обязательный параметр

        Имя пользователя (члена группы) или название группы (члена группы).

    • spec.name
      строка

      Обязательный параметр

      Уникальное имя группы.

    • spec.status
      объект
      • spec.status.errors
        массив объектов
        • spec.status.errors.message
          строка
        • spec.status.errors.objectRef
          объект
          • spec.status.errors.objectRef.kind
            строка

            Допустимые значения: User, Group

          • spec.status.errors.objectRef.name
            строка

User

Scope: Cluster

Содержит информацию о статическом пользователе.

Пример использования…

  • spec
    объект

    Обязательный параметр

    • spec.email
      строка

      Обязательный параметр

      Email пользователя.

      Важно! При использовании совместно с модулем user-authz, для выдачи прав конкретному пользователю в качестве имени пользователя в CR ClusterAuthorizationRule необходимо указывать email.

      Пример:

      email: user@domain.com
      
    • spec.groups
      Параметр устарел
      массив строк

      Список групп, в которых у пользователя есть членство.

      Т.к. параметр устарел, добавление пользователя в группы теперь осуществляется через ресурс Group.

    • spec.password
      строка

      Обязательный параметр

      Хэш пароля пользователя в явном виде или закодированный в Base64.

      Для получения хэша пароля в Base64 можно воспользоваться командой echo "<PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0. Также можно воспользоваться онлайн-сервисом (например, https://bcrypt-generator.com/).

      Пример:

      password: JDJ5JDEwJE9HN1lOOUhnOXU5NmY2cGp4R3NIcS56NWQuOVQxQ0VrdWIud3BRdVJ5Sy5QQU5INlpKNDguCgo=
      
    • spec.ttl
      строка

      Время жизни учетной записи пользователя (TTL).

      Задаётся в виде строки с указанием часов и минут: 30m, 1h, 2h30m, 24h.

      Указать TTL можно только 1 раз. При повторном изменении TTL, дата expireAt не обновляется.

      Шаблон: ^([0-9]+h([0-9]+m)?|[0-9]+m)$

      Пример:

      ttl: 24h
      
    • spec.userID
      Параметр устарел
      строка

      Уникальное имя (ID) пользователя.

      Больше не используется. Заполняется автоматический.

Содержит информацию о статическом пользователе.

Пример использования…

  • spec
    объект

    Обязательный параметр

    • spec.email
      строка

      Обязательный параметр

      Email пользователя.

      Важно! При использовании совместно с модулем user-authz для выдачи прав конкретному пользователю в качестве имени пользователя в custom resource ClusterAuthorizationRule необходимо указывать email.

      Пример:

      email: user@domain.com
      
    • spec.groups
      Параметр устарел
      массив строк

      Список групп, в которых у пользователя есть членство.

      Т.к. параметр устарел, добавление пользователя в группы теперь осуществляется через ресурс Group.

    • spec.password
      строка

      Обязательный параметр

      Хэш пароля пользователя в явном виде или закодированный в Base64.

      Для получения хэша пароля в Base64 можно воспользоваться командой echo "<PASSWORD>" | htpasswd -BinC 10 "" | cut -d: -f2 | base64 -w0. Также можно воспользоваться онлайн-сервисом (например, https://bcrypt-generator.com/).

      Пример:

      password: JDJ5JDEwJE9HN1lOOUhnOXU5NmY2cGp4R3NIcS56NWQuOVQxQ0VrdWIud3BRdVJ5Sy5QQU5INlpKNDguCgo=
      
    • spec.ttl
      строка

      Время жизни учетной записи пользователя (TTL).

      Задается в виде строки с указанием часов и минут: 30m, 1h, 2h30m, 24h.

      Указать TTL можно только 1 раз. При повторном изменении TTL дата expireAt не обновляется.

      Шаблон: ^([0-9]+h([0-9]+m)?|[0-9]+m)$

      Пример:

      ttl: 24h
      
    • spec.userID
      строка

      Уникальное имя (ID) пользователя.

      Пример:

      userID: '08a8684b-db88-4b73-90a9-3cd1661f5466'