Настройка LDAP Adapter

Схема работы

Stronghold может осуществлять двухфакторную аутентификацию пользователей из каталога LDAP или Active Directory:

  • Пользователь подключается к Stronghold, вводит логин и пароль;
  • Stronghold по протоколу LDAP подключается к компоненту MULTIFACTOR LDAP Adapter;
  • Компонент проверяет логин и пароль пользователя в Active Directory или другом LDAP-каталоге и запрашивает второй фактор аутентификации;
  • Пользователь подтверждает запрос доступа выбранным способом аутентификации.

Настройка MULTIFACTOR

  • Зайдите в систему управления MULTIFACTOR, в разделе «Ресурсы» создайте новое LDAP приложение. После создания будут доступны два параметра: NAS Identifier и Shared Secret, они потребуются для последующих шагов.
  • Загрузите и установите MULTIFACTOR LDAP Adapter.

Запуск LDAP Adapter в Kubernetes

Для запуска можно воспользоваться образом trublast/multifactor-ldap-adapter и следующим манифестом:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ldap-adapter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ldap-adapter
  template:
    metadata:
      labels:
        app: ldap-adapter
    spec:
      containers:
      - image: trublast/multifactor-ldap-adapter:3.0.7
        name: ldap-adapter
        volumeMounts:
        - mountPath: /opt/multifactor/ldap/multifactor-ldap-adapter.dll.config
          name: config
          subPath: multifactor-ldap-adapter.dll.config
      volumes:
      - configMap:
          defaultMode: 420
          name: ldap-adapter
        name: config
---
apiVersion: v1
kind: Service
metadata:
  name: ldap-adapter
spec:
  ports:
  - port: 389
    protocol: TCP
    targetPort: 389
  selector:
    app: ldap-adapter
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: ldap-adapter
data:
  multifactor-ldap-adapter.dll.config: |
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <section name="UserNameTransformRules" type="MultiFactor.Ldap.Adapter.Configuration.UserNameTransformRulesSection, multifactor-ldap-adapter" />
      </configSections>
      <appSettings>
        <add key="adapter-ldap-endpoint" value="0.0.0.0:389"/>
        <add key="ldap-server" value="ldap://ldap.example.com"/>
        <add key="ldap-service-accounts" value="CN=admin,DC=example,DC=com"/>
        <add key="ldap-base-dn" value="ou=Users,dc=example,dc=com"/>
        <add key="multifactor-api-url" value="https://api.multifactor.ru" />
        <add key="multifactor-nas-identifier" value="YOUR-NAS-IDENTIFIER" />
        <add key="multifactor-shared-secret" value="YOUR-NAS-SECRET" />
        <add key="logging-level" value="Debug"/>
      </appSettings>
    </configuration>

В конфигурации укажите адрес своего LDAP-сервера и значения multifactor-nas-identifier и multifactor-shared-secret из панели управления Multifactor.

Настройка Stronghold

Потребуется создать и сконфигурировать метод аутентификации ldap, где в качестве сервера указать адрес ldap-adapter. Если для запуска адаптера вы использовали манифест из примера выше, то адрес будет ldap://ldap-adapter.default.svc:

d8 stronghold auth enable ldap
d8 stronghold write auth/ldap/config url="ldap://ldap-adapter.default.svc" \
   binddn="cn=admin,dc=example,dc=com" bindpass="Password-1" \
   userdn="ou=Users,dc=example,dc=com" groupdn="ou=Groups,dc=example,dc=com" \
   username_as_alias=true

Тестирование с помощью локального сервера openldap

Ниже приведен пример манифеста, с помощью которого можно запустить сервис OpenLDAP в Kubernetes для целей тестирования:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: openldap
spec:
  replicas: 1
  selector:
    matchLabels:
      app: openldap
  template:
    metadata:
      labels:
        app: openldap
    spec:
      containers:
      - env:
        - name: LDAP_ADMIN_DN
          value: cn=admin,dc=example,dc=com
        - name: LDAP_ROOT
          value: dc=example,dc=com
        - name: LDAP_ADMIN_USERNAME
          value: admin
        - name: LDAP_ADMIN_PASSWORD
          value: Password-1
        image: bitnami/openldap:2.6.10
        name: openldap
---
apiVersion: v1
kind: Service
metadata:
  name: openldap
spec:
  ports:
  - name: p389
    port: 389
    protocol: TCP
    targetPort: 1389
  selector:
    app: openldap

После того как запустите контейнер, создайте пользователя (в качестве примера приведено создание пользователя alice с паролем D3mo-Passw0rd).

Сначала выполните вход в контейнер openldap:

d8 kubectl exec svc/openldap -it -- bash

Создайте пользователя с помощью следующих команд:

cd /tmp
cat << EOF > create_entries.ldif
dn: uid=alice,ou=users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: person
objectClass: top
cn: Alice
sn: User
userPassword: D3mo-Passw0rd
EOF

ldapadd -H ldap://openldap -cxD "cn=admin,dc=example,dc=com" \
        -w "Password-1" -f "create_entries.ldif"

Можете выполнить вход под пользователем alice с паролем D3mo-Passw0rd. В панели управления MULTIFACTOR в разделе Пользователи будет создан пользователь alice, для которого можно назначить второй фактор. Далее будет требоваться его подтверждение при каждом входе в Stronghold. Помимо аудит-логов на стороне Stronghold подтверждение второго фактора будет фиксироваться также на стороне Multifactor.