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é.
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: {}
- Seznam uzlů s instancí seacat-auth.
- URI vašeho LDAP serveru.
- 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:
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: {}
- Vystavte certifikáty/klíče z Vaultu v sekci
secrets. - Převeďte tajemství na soubory dostupné službě SeaCat Auth.
- Propojte certifikát/klíč v LDAP konfiguraci SeaCat Auth.
- 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¶
- Skript se připojí k LDAP stejnou konfigurací SeaCat Auth LDAP (
uri, bind user,base,filter, TLS atd.). - Vyhledá uživatele odpovídající LDAP
filterz konfigurace. - Pro každého uživatele čte atribut
memberOfa porovnává DN skupin s mapou skupin. - 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.
"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).
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,basea 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
filterv LDAP credentials konfiguraci. memberOf— Skript vždy žádá atributmemberOf. 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.