LDAP / Active Directory feed pro normalizaci identity uživatele¶
Logy často nesou zobrazovaná jména, přihlašovací jména nebo jiné řetězcové identity, které neodpovídají jedinému kanonickému user.id. LDAP (Active Directory) feed může synchronizovat účty do lookupu usernames2userid. Parsec pak používá tento lookup při normalizaci identity aktiv, aby user.name na událostech mapoval na stabilní user.id.
Jde o stejnou cestu feed → lookup jako u threat intelligence feedů, ale cílem je konzistence identity pro Assets, Discover a detekce, ne IOC watchlisty.
Co potřebujete (LDAP vstup)¶
Než feed napíšete, shromážděte tyto hodnoty. Patří do sekce input: feedu:
| Pole | Povinné | Příklad | Význam |
|---|---|---|---|
source |
ano | ldap://10.91.44.128 nebo "{{LDAP_URL}}" |
LDAP URL řadiče domény. Použijte ldap://host nebo ldap://host:389. Pro TLS ldaps://host nebo ldaps://host:636. Feeds zkopíruje URL do LDAP připojení uri. Může použít Vault placeholder (Feeds v26.12.07+, LogMan.io v26.12.12). |
username |
ano | adldap@domain.int nebo "{{LDAP_BIND_USER}}" |
Bind účet (UPN nebo DOMAIN\user). Potřebuje čtení uživatelů, které hledáte. Může použít Vault placeholder (Feeds v26.12.07+, LogMan.io v26.12.12). |
password |
ano | "{{LDAP_USER_PASSWORD}}" |
Bind heslo. Preferujte Vault placeholder (Feeds v26.12.07+, LogMan.io v26.12.12); plaintext jen v labu. |
base |
ano | dc=DOMAIN,dc=int |
LDAP base DN, kde začíná hledání (obvykle kořen domény nebo konkrétní OU). |
filter |
ano | (&(objectCategory=person)(objectClass=user)) |
LDAP filtr výběru uživatelských účtů (bez počítačových objektů). |
attributes |
ano | sAMAccountName displayName |
AD atributy oddělené mezerou. Každý atribut v schema / apply musí být uveden zde. |
period |
ano | 1h |
Jak často feed znovu spustí hledání (např. 1h, 1d). |
type |
ano | ldap |
Musí být ldap, aby LogMan.io Feeds použil LDAP zdroj. |
Síť: služba LogMan.io Feeds musí dosáhnout na host a port v source (firewall / DNS). Preferujte dedikovaný bind účet pouze pro čtení omezený na potřebné OU.
Na straně LogMan.io také:
- Existuje lookup
usernames2userid(common library,default: true, skupinaasset). - Parsery emitují
user.name(nebo jiné pole uvedené podusernames2useridv/Schemas/Mappings/Asset_<schema>.yaml).
Varianta podle SID (sids2userid): Threat intelligence feedy: Active Directory SID na user ID. Jak Parsec aplikuje asset lookupy: Správa aktiv a activity stream.
Použití Vault placeholderu pro heslo¶
Dostupnost
Rozbalení placeholderů {{…}} / ${passwords:…} z [passwords] v deklaracích feedů vyžaduje LogMan.io Feeds v26.12.07 nebo novější (LogMan.io v26.12.12).
Neukládejte tajemství do sdíleného YAML feedu v Knihovně jako plaintext. Do polí jako source / url, username, password nebo HTTP headers dejte placeholder; LogMan.io Feeds načte skutečnou hodnotu ze své konfigurace služby ([passwords]), kterou ASAB Maestro doplní z Vaultu.
Typické rozdělení práce:
| Krok | Kdo | Co |
|---|---|---|
| 1 | Admin / operátor | Uložit tajemství do Vaultu |
| 2 | Admin / operátor | Namapovat tajemství na lmio-feeds v /Site/model.yaml a aplikovat |
| 3 | Analytik | Použít placeholdery v deklaraci feedu (Knihovna /Feeds/…) |
1. Uložení hesla do Vaultu¶
Na hostu LogMan.io (upravte název tajemství, pokud používáte jiné id):
curl -X PUT localhost:8891/vault/LDAP_USER_PASSWORD --data 'supersecret'
Názvy tajemství jsou case insensitive. Použijte stabilní id velkými písmeny, např. LDAP_USER_PASSWORD nebo LDAP_FEEDS_BIND_PASSWORD.
Stejný Vault vzor používá SeaCat Auth LDAP; viz Integrace LDAP serveru.
2. Mapování tajemství do konfigurace Feeds¶
V /Site/model.yaml deklarujte tajemství a vložte ho do sekce Feeds [passwords]:
services:
lmio-feeds:
asab:
config:
passwords:
LDAP_USER_PASSWORD: "{{LDAP_USER_PASSWORD}}"
secrets:
LDAP_USER_PASSWORD: {}
Poté aplikujte model (Použít v Knihovně na /Site, nebo na hostu ./gov.sh up). Po aplikaci vygenerovaný /conf/lmio-feeds.conf obsahuje např.:
[passwords]
LDAP_USER_PASSWORD=<value from vault>
Restartujte / znovu vytvořte instanci Feeds, pokud váš provozní proces automaticky nenačte změny konfigurace.
3. Odkaz na tajemství ve feedu¶
V sekci input feedu nastavte password na placeholder (stejný název jako ve Vaultu / modelu):
input:
source: ldap://10.91.44.128
type: ldap
username: adldap@domain.int
password: "{{LDAP_USER_PASSWORD}}"
base: dc=DOMAIN,dc=int
filter: (&(objectCategory=person)(objectClass=user))
attributes: sAMAccountName displayName
period: 1h
Ekvivalent ve stylu ASAB:
password: ${passwords:LDAP_USER_PASSWORD}
Obyčejné password: … stále funguje v labu; necommitujte reálná hesla do sdílených Knihoven.
HTTP hlavičky (Authorization a podobně)¶
Stejné placeholdery fungují uvnitř hodnot HTTP hlaviček, včetně JSON řetězců headers u TI a jiných HTTP feedů:
input:
source: https://ti.example.com/api/v1/ips
type: json
headers: '{"Authorization": "Bearer {{API_TOKEN}}"}'
Mapujte API_TOKEN do Feeds [passwords] stejně jako LDAP (Vault + model.yaml). Můžete použít i YAML mapování:
headers:
Authorization: "Bearer {{API_TOKEN}}"
X-Api-Key: "{{API_TOKEN}}"
Pole URL (source, url, uri, oauth2_token_url, proxy_url) podporují stejné placeholdery, např. source: "{{LDAP_URL}}".
Když feed selže při bindu¶
- Ověřte, že záznam ve Vaultu existuje (
curllist/get přes Remote Control Vault API podle vašeho procesu). - Ověřte, že
secrets:apasswords:v modelu používají stejný název jako uvnitř{{…}}. - Ověřte, že model byl aplikován a Feeds conf byl znovu vygenerován.
- V logu Feeds chybějící mapování vypadá jako: secret was not found in the
[passwords]section.
Co získáte¶
| Část | Role |
|---|---|
| LDAP / AD | Zdroj pravdy pro názvy účtů (displayName, sAMAccountName a podobně) |
Feed (lmio/feed, type: ldap) |
Periodicky čte AD a zapisuje řádky lookupu |
Lookup usernames2userid |
Mapuje řetězec uživatelského jména (klíč) na user.id (atribut) |
| Parsec asset mapping | U každé události hledá user.name v usernames2userid a doplní user.id, pokud chybí |
Active Directory → LDAP feed → usernames2userid → Parsec identity normalization → user.id on events / Assets
1. Lookup: usernames2userid¶
Deklarace v common library (/Lookups/usernames2userid.yaml):
---
define:
type: lookup/string
name: usernames2userid
label: User names to User ID
description_title: List of user names or other string values to user IDs
group: asset
default: true
keys:
- name: name
type: str
fields:
user.id:
type: str
- Klíč: řetězec, jak se objeví v logách (např.
displayNamenebo jiný AD atribut zvolený jakoapply.key). - Atribut
user.id: kanonická identita, kterou Parsec zapíše po úspěšné normalizaci (častosAMAccountNamenebosAMAccountName@tenant).
ECS asset mapping propojí lookup s user.name:
identity:
usernames2userid:
- user.name
Pokud je user.id na události už nastaveno, Parsec ho nepřepisuje. Lookup se stále spouští pro kontext aktiva. Když lookup nic nenajde, volitelný fallback na user.name (např. lowercase_and_domain_removal) může stále vytvořit id.
2. Vytvoření LDAP feedu¶
Přidejte deklaraci feedu pod /Feeds/ v Knihovně (nebo ji vytvořte z UI Lookups s cestou feedu). Vyplňte každé povinné pole input podle Co potřebujete.
---
define:
type: lmio/feed
name: LDAP User Name Extractor
schema:
sAMAccountName: str
displayName: str
input:
source: ldap://10.91.44.128
type: ldap
username: adldap@domain.int
password: "{{LDAP_USER_PASSWORD}}"
base: dc=DOMAIN,dc=int
filter: (&(objectCategory=person)(objectClass=user))
attributes: sAMAccountName displayName
period: 1h
apply:
key: !ITEM EVENT displayName
user.id:
!JOIN
delimiter: "@"
items:
- !ITEM EVENT sAMAccountName
- !ARG TENANT
output:
lookup: usernames2userid
Mapování:
source/type: ldap: LogMan.io Feeds otevře LDAP připojení (ldap://…neboldaps://…) a při každémperiodprovede hledání.password: "{{…}}": bind heslo z Vaultu / Feeds[passwords](viz Použití Vault placeholderu pro heslo); vyhněte se plaintext heslům ve sdíleném YAML Knihovny.baseafilter: omezí hledání na OU / uživatelské objekty, které vás zajímají.attributes: do schématu feedu se načtou jen uvedené AD atributy.apply.key: stane se klíčem lookupu. ZdedisplayNameodpovídá logům se zobrazovaným jménem vuser.name.apply.user.id: hodnota uložená na řádku lookupu. Příklad sestavísAMAccountName@<tenant>pomocí!JOINa!ARG TENANT. Pro prostý název účtu:
apply:
key: !ITEM EVENT displayName
user.id:
!CAST
what: !ITEM EVENT sAMAccountName
type: str
Zvolte atribut klíče tak, aby odpovídal tomu, co parsery dávají do user.name. Pokud logy už používají sAMAccountName, nastavte klíč i user.id z toho atributu (nebo feed pro ty zdroje přeskočte).
Volitelně: e-maily → user.id¶
Stejný vzor plní useremails2userid z AD mail, které Parsec mapuje z user.email. Viz testovací feed v knihovně Feeds LDAP User Email Extractor; výstupní lookup musí být useremails2userid.
3. Ověření lookupu¶
- Počkejte jeden
periodfeedu (nebo spusťte feed ručně, pokud to váš provoz umožňuje). - Otevřete Lookups → usernames2userid a ověřte klíče (display names) a hodnoty
user.id. - Pošlete nebo počkejte na událost, kde
user.namerovná klíči lookupu auser.idje prázdné. - V Discover ověřte doplněné
user.id. V Assets by měl uživatelský principál odpovídat tomuto id.
4. Jak automatická normalizace používá data¶
Na parse cestě, po obohacení, AssetIdentityProcessor (z /Schemas/Mappings/Asset_ECS.yaml):
- Načte
user.namez události. - Vyhledá řetězec v
usernames2userid. - Pokud řádek má
user.id, zapíše ho na událost, kdyžuser.idbylo prázdné. - Pokračuje s
useremails2userid/ fallbacky podle konfigurace.
Normalizované user.id řídí inventář Assets, principály activity streamu a konzistentní korelaci na identitu.
Pořadí e-mailových lookupů: nejdřív uživatelská jména, pak e-maily, pak fallback. Detaily: Parsec správa aktiv.
Praktické tipy¶
- Preferujte Vault placeholder v
password(např."{{LDAP_USER_PASSWORD}}"); viz Použití Vault placeholderu pro heslo. - Slaďte velikost písmen a formát klíčů feedu s parsovaným
user.name(mezery, diakritika,DOMAIN\uservs display name). Neshoda klíčů tiše mine. - Preferujte read-only AD bind účet omezený na potřebné OU.
perioddržte dost krátké pro nástupy a odchody (často1h); velmi velké adresáře mohou potřebovat delší periodu nebo užší filtr.- Jeden feed by měl vlastnit obsah
usernames2userid, pokud nemáte jasnou strategii slučování. - Pro Windows události jen se SID použijte samostatný LDAP feed do
sids2userid(a Windows SID enrichery), ne tento lookup. - UI alternate names na aktivu mohou lookupy doplnit; feed udržuje mapování ve škále adresáře aktuální automaticky.
Související čtení¶
- Threat intelligence feedy: deklarace feedů včetně AD SID →
sids2userid - Integrace LDAP serveru: Vault tajemství pro SeaCat Auth LDAP (stejná idea Vaultu)
- Správa aktiv: UI Assets pro analytiky
- Parsec: normalizace identity: jak lookupy plní
user.id - Lookupy v detekcích: lookupy v korelačních pravidlech
- Reference Lookups: typy lookupů a nasazení