Přeskočit obsah

Jak integrovat LDAP server

LDAP server nebo Active Directory umožňuje uživatelům bezproblémové přihlášení do TeskaLabs LogMan.io.

Připojení k LDAP specifikujte v modelu konfigurací TeskaLabs SeaCat Auth (autorizační server v rámci TeskaLabs LogMan.io).

V modelu najděte službu seacat-auth a postupujte podle tohoto příkladu.

Důležité

Před aplikací změn v modelu bezpečně nahrajte tajemství (v tomto případě LDAP_USER_PASSWORD) do Vaultu. Tajemství je dostupné při aplikaci změn na konfiguraci SeaCat Auth jen poté.

/Site/model.yaml
define:
  type: rc/model

services:
  ...
  seacat-auth:
    instances:
      - node1  #(1)
    asab:
      config:
        "seacatauth:credentials:ldap:external":
          uri: ldap://ad.company.cz  #(2)
          username: "CN=user,OU=Users_System,DC=company,DC=cz"  #(3)
          attrusername: sAMAccountName
          password: "{{LDAP_USER_PASSWORD}}"
          base: DC=company,DC=cz
          filter: "(&(objectClass=user)(|(sAMAccountName=novakjan)(sAMAccountName=novotnypavel)))"
          attributes: "mail mobile"

secrets:
  LDAP_USER_PASSWORD: {}
  1. Seznam uzlů s instancí seacat-auth.
  2. URI vašeho LDAP serveru.
  3. Celé uživatelské jméno v Active Directory.

Tajemství uložte do Vaultu na hostiteli LogMan.io tímto příkazem. Upravte klíč a hodnotu hesla podle potřeby.

curl -X PUT localhost:8891/vault/LDAP_USER_PASSWORD  --data 'supersecret'

Klikněte na Apply ve složce /Site v Library nebo použijte příkazovou řádku.

Na hostiteli v adresáři /opt/site spusťte:

./gov.sh up

Zabezpečené LDAP připojení (LDAPS)

Pro zabezpečené připojení uveďte LDAP uri se schématem ldaps://.

Dodání certifikátů a klíčů

Podle politiky můžete zadat CA soubor serveru a/nebo klientský certifikát a klíč.

Připravte soubory na serveru a bezpečně je nahrajte do Vaultu:

cd /opt/site
./gov.sh curl -X PUT $NODE_ID:8891/vault/ldap_tls_cafile --data-binary '@/absolute/path/to/cafile.crt'
./gov.sh curl -X PUT $NODE_ID:8891/vault/ldap_tls_certfile --data-binary '@/absolute/path/to/certfile.crt'
./gov.sh curl -X PUT $NODE_ID:8891/vault/ldap_tls_keyfile --data-binary '@/absolute/path/to/keyfile.pem'

Nahraďte $NODE_ID názvem serveru.

Aktualizujte soubor /Site/model.yaml v Library:

/Site/model.yaml
services:
  ...
  seacat-auth:
    ...
    asab:
      config:
        "seacatauth:credentials:ldap:external":
          ...
          tls_cafile: /conf/tls_cafile.crt  #(3)
          tls_certfile: /conf/tls_certfile.crt
          tls_keyfile: /conf/tls_keyfile.pem
          tls_require_cert: allow  #(4)
    files:  #(2)
      - "/conf/tls_cafile.crt": "{{LDAP_TLS_CAFILE}}"
      - "/conf/tls_certfile.crt": "{{LDAP_TLS_CERTFILE}}"
      - "/conf/tls_keyfile.pem": "{{LDAP_TLS_KEYFILE}}"

secrets:  #(1)
  ...
  LDAP_TLS_CAFILE: {}
  LDAP_TLS_CERTFILE: {}
  LDAP_TLS_KEYFILE: {}
  1. Vystavte certifikáty/klíče z Vaultu v sekci secrets.
  2. Převeďte tajemství na soubory dostupné službě SeaCat Auth.
  3. Propojte certifikát/klíč v LDAP konfiguraci SeaCat Auth.
  4. Politika TLS certifikátu serveru: never, allow, demand, hard

Nakonec změny uložte a aplikujte tlačítkem Apply v Library nebo příkazem /opt/site/gov.sh up na serveru.

LDAP skupiny pro řízení přístupu

Tenanty a role LogMan.io můžete přiřadit automaticky podle členství ve skupinách LDAP (nebo Active Directory). Sync skript v kontejneru SeaCat Auth čte memberOf skupiny uživatele, porovnává je s mapou skupin a udržuje přiřazení tenantů a rolí aktuální.

Užitečné, pokud přístup spravujete v LDAP a chcete, aby oprávnění LogMan.io sledovala stejné skupiny — bez ručního přiřazování pro každého uživatele.

Note

LDAP přihlášení musí fungovat (viz výše). Sync pouze přiřazuje tenanty a role; nezakládá účty LogMan.io. Uživatelé se stále autentizují přes LDAP credentials provider.

Jak to funguje

  1. Skript se připojí k LDAP stejnou konfigurací SeaCat Auth LDAP (uri, bind user, base, filter, TLS atd.).
  2. Vyhledá uživatele odpovídající LDAP filter z konfigurace.
  3. Pro každého uživatele čte atribut memberOf a porovnává DN skupin s mapou skupin.
  4. Přiřadí mapované tenanty a role v SeaCat Auth a odstraní dříve synchronizovaná přiřazení, která už neplatí.

Přiřazení ze sync jsou označena jako spravovaná lmio-access-sync. Skript přidává/odebírá jen tato spravovaná přiřazení. Ruční tenanty a role zůstávají.

Uživatel ve více mapovaných skupinách má tenanty a role jako sjednocení všech odpovídajících záznamů.

Příprava mapy skupin

Vytvořte YAML mapující DN každé LDAP skupiny na tenanty a role LogMan.io pro její členy.

Použijte plné distinguished name skupiny přesně jako v LDAP (např. v Active Directory Users and Computers nebo atributu distinguishedName). Porovnávání je bez ohledu na velikost písmen.

ldap-group-map.yaml
"CN=System Administrators,CN=Builtin,DC=EXAMPLE,DC=com":
  tenants:
    - system
    - mycompany
  roles:
    - "*/admin"
"CN=Analysts,CN=Users,DC=EXAMPLE,DC=com":
  tenants:
    - mycompany
  roles:
    - "*/analyst"
"CN=Operators,CN=Users,DC=EXAMPLE,DC=com":
  tenants:
    - mycompany
  roles:
    - "*/operator"
Pole Popis
Klíč (DN skupiny) Plné LDAP distinguished name skupiny.
tenants Seznam ID tenantů LogMan.io k přidělení.
roles Seznam ID rolí LogMan.io. Globální role */admin, */analyst, */operator, */reader nebo tenant-scoped např. mycompany/analyst.

Viz User Roles and Responsibilities pro vestavěné role.

Tip

Začněte s malou mapou (jedna–dvě skupiny) a ověřte sync před mapováním celého adresáře.

Nasazení mapy skupin přes model

Přidejte mapu skupin jako soubor služby seacat-auth v /Site/model.yaml. Po Apply je soubor v kontejneru na /conf/ldap-group-map.yaml (výchozí cesta sync skriptu).

/Site/model.yaml
services:
  ...
  seacat-auth:
    ...
    files:
      - "conf/ldap-group-map.yaml": |
        "CN=System Administrators,CN=Builtin,DC=EXAMPLE,DC=com":
          tenants:
            - system
            - mycompany
          roles:
            - "*/admin"
        "CN=Analysts,CN=Users,DC=EXAMPLE,DC=com":
          tenants:
            - mycompany
          roles:
            - "*/analyst"

Pokud seacat-auth už má sekci files: (např. pro LDAPS certifikáty), přidejte mapu do stejného seznamu — nevytvářejte druhý klíč files:.

Model uložte a aplikujte Apply v Library nebo na hostiteli:

cd /opt/site
./gov.sh up

Ruční spuštění sync

Na hostiteli LogMan.io najděte kontejner SeaCat Auth:

docker ps | grep seacat-auth

Název je např. seacat-auth-1 (číslo je ID instance).

Sync spusťte jednou:

docker exec seacat-auth-1 python3 /app/seacat-auth/scripts/ldap-access-sync.py

Ve výchozím nastavení skript čte:

  • Konfiguraci SeaCat Auth z /conf/seacatauth.conf
  • Mapu skupin z /conf/ldap-group-map.yaml

Další argumenty v kontejneru obvykle nepotřebujete.

Úspěšný výstup

Při přiřazení nebo odebrání přístupu skript vytiskne jeden řádek na změnu:

Assigned tenant 'mycompany' to credentials 'ldap:external:Q049am5vdmFrLE9VPVVzZXJzLERDPWV4YW1wbGUsREM9Y29t'
Assigned role '*/analyst' to credentials 'ldap:external:Q049am5vdmFrLE9VPVVzZXJzLERDPWV4YW1wbGUsREM9Y29t'
Unassigned role '*/operator' from credentials 'ldap:external:Q049am5vdmFrLE9VPVVzZXJzLERDPWV4YW1wbGUsREM9Y29t'
Unassigned tenant 'oldtenant' from credentials 'ldap:external:Q049am5vdmFrLE9VPVVzZXJzLERDPWV4YW1wbGUsREM9Y29t'

Pokud nic nemění, výstup může být malý nebo prázdný — normální při nezměněném členství v LDAP.

Varování:

LDAP query returned no users
Group from group map not found in any user: 'CN=Analysts,CN=Users,DC=EXAMPLE,DC=com'
  • No users — zkontrolujte LDAP filter, base a konektivitu v konfiguraci SeaCat Auth LDAP. Syncují se jen uživatelé odpovídající filtru.
  • Group not found — žádný synchronizovaný uživatel nemá skupinu v memberOf. Ověřte DN, členství ve skupině a že uživatelé spadají pod LDAP filter.

Plánování sync přes cron

Změny přístupu v LDAP se do LogMan.io aplikují až po dalším běhu skriptu. Naplánujte ho na hostiteli.

Vytvořte cron soubor, např. /etc/cron.d/lmio-ldap-access-sync:

*/10 * * * * root docker exec seacat-auth-1 python3 /app/seacat-auth/scripts/ldap-access-sync.py

Sync běží každých 10 minut. Upravte plán a název kontejneru (seacat-auth-1) podle prostředí.

Po instalaci cron položky počkejte na další běh nebo spusťte sync ručně a ověřte v LogMan.io tenanty a role testovacího uživatele.

Provozní poznámky

  • LDAP filter — Sync zpracuje jen uživatele z filter v LDAP credentials konfiguraci.
  • memberOf — Skript vždy žádá atribut memberOf. Standardní na Active Directory. U jiného LDAP zajistěte ekvivalent členství ve skupinách.
  • Ruční přepsání — Tenanty a role můžete přiřadit ručně; sync je neodstraní. Pro plnou kontrolu LDAP vyhněte se konfliktní kombinaci ručního a synchronizovaného přiřazení.
  • Po změně mapy — Aktualizujte /Site/model.yaml, aplikujte model, spusťte skript (nebo počkejte na cron). Odebrání skupiny z mapy při dalším sync odebere tenanty a role od té skupiny (jen spravovaná přiřazení).
  • LDAPS — Při ldaps:// a TLS souborech SeaCat Auth sync tuto konfiguraci znovu použije bez dalšího TLS nastavení pro sync.