Benutzerveränderungen im AD überwachen
Hallo Freunde,
ich muss ein Programm schreiben, welches die Benutzer in unserem AD über eine API mit einer externen DB synct.
Ich wollte mal fragen welche Konzepte es da grundsätzlich gibt. Folgende spontane Ideen kommen mir da:
1. Das Programm in der Nacht laufen lassen. Bei 10K Benutzern sehr Arbeitslastig und ich würde die API dauernd fluten, weil ich ja bei jedem Benutzer fragen müsste: existiert der Benutzer schon, hat sich was verändert, etc... Ausserdem ist diese Methode dann nicht live.
2. AD Auditing: Habe dazu diese Anleitung gefunden: https://www.windowspro.de/wolfgang-sommergut/auditing-administratoren-ac .... Ich stelle mir das gerade schwierig vor. Ich sehe Schwierigkeiten darin alle Events auch wirklich zu erwischen.
Änderungen an einem Benutzer die mich interessieren sind : Änderungen an einzelnen Eigenschaften / Aktivieren eines Benutzers / Deaktivieren eines Benutzers / Löschen eines Benutzers
Kennt ihr unter Umständen noch andere Konzepte?
Vielen lieben Dank und mit freundlichen Grüßen
ich muss ein Programm schreiben, welches die Benutzer in unserem AD über eine API mit einer externen DB synct.
Ich wollte mal fragen welche Konzepte es da grundsätzlich gibt. Folgende spontane Ideen kommen mir da:
1. Das Programm in der Nacht laufen lassen. Bei 10K Benutzern sehr Arbeitslastig und ich würde die API dauernd fluten, weil ich ja bei jedem Benutzer fragen müsste: existiert der Benutzer schon, hat sich was verändert, etc... Ausserdem ist diese Methode dann nicht live.
2. AD Auditing: Habe dazu diese Anleitung gefunden: https://www.windowspro.de/wolfgang-sommergut/auditing-administratoren-ac .... Ich stelle mir das gerade schwierig vor. Ich sehe Schwierigkeiten darin alle Events auch wirklich zu erwischen.
Änderungen an einem Benutzer die mich interessieren sind : Änderungen an einzelnen Eigenschaften / Aktivieren eines Benutzers / Deaktivieren eines Benutzers / Löschen eines Benutzers
Kennt ihr unter Umständen noch andere Konzepte?
Vielen lieben Dank und mit freundlichen Grüßen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1023564851
Url: https://administrator.de/contentid/1023564851
Ausgedruckt am: 03.12.2024 um 18:12 Uhr
11 Kommentare
Neuester Kommentar
Hi.
Ein paar Tipps:
Trotzdem klingt das zunächst nach "zu ambitioniert" bzw. "am falschen Ende angepackt", da das AD selbst ja auch direkt ausgewertet werden könnte.
Ein paar Tipps:
- Es wäre weitaus schöner, wenn das System, was die Daten nutzen soll, keine gesyncte DB braucht, sondern das AD selbst nutzt - warum ist das nicht möglich?
- Du schreibst, dass angestrebt wird, die Daten möglichst "live" zu bekommen, sprich: ohne Zeitverzug. Aber ist das wirklich wichtig? Ich könnte mir vorstellen, dass ein Versatz von einer Stunde kaum stören wird und somit möglicherweise ein stündlicher kompletter Dump, also kein Syncing, am einfachsten wäre.
- Nun zu den Tasks und dem Auditing: da man sehr einfach einstellen kann, was pro OU (oder gar pro Domain) überwacht werden soll, ist der Ansatz, das Eventlog zu nutzen, natürlich in Ordnung. Du könntest nun geplante Tasks etablieren, die von den bestimmten Ereignissen getriggert würden, so dass Du keine Sorgen hättest, etwas nicht zu erwischen. Man kann sich hierzu Filter erstellen, die nicht nur auf bestimmte EventIDs anspringen, sondern zusätzlich die Eventmessage ansehen und entsprechend handeln könnten.
Trotzdem klingt das zunächst nach "zu ambitioniert" bzw. "am falschen Ende angepackt", da das AD selbst ja auch direkt ausgewertet werden könnte.
Hi,
ist das besagte Programm von euch?
Wäre es nicht sinnvoll bei einer solchen Größe den Hersteller zu fragen ob es in dem "Programm" eine LDAP Schnittstelle gibt? Hier hast du dann keine Fehlerquelle welche Mal nicht läuft... Und die Daten sind immer Aktuell bei der Abfrage.
Fehler kann dann nur noch ein nicht verfügbares AD sein was aber dann nicht so schlimm ist wenn das Programm nicht läuft denn dann hast du bestimmt anderes zu tun.
Grüße
ist das besagte Programm von euch?
Wäre es nicht sinnvoll bei einer solchen Größe den Hersteller zu fragen ob es in dem "Programm" eine LDAP Schnittstelle gibt? Hier hast du dann keine Fehlerquelle welche Mal nicht läuft... Und die Daten sind immer Aktuell bei der Abfrage.
Fehler kann dann nur noch ein nicht verfügbares AD sein was aber dann nicht so schlimm ist wenn das Programm nicht läuft denn dann hast du bestimmt anderes zu tun.
Grüße
Du hast ja mehrere Optionen hier... Das kommt nur auf den Aufwand an den du reinstecken willst. Du kannst ja z.B. auch mit ner simplen Datenbank arbeiten:
1) Du liest ein Objekt aus dem AD raus
2) Du machst eine Checksumme über alle Felder die für dich relevant sind und packst die zusammen mit der SSID in die DB
3) Du vergleichst:
a)Ist die Checksumme bereits in der DB und identisch -> keine änderung
b) Ist die Checksumme bereits in der DB aber unterschiedlich, SSID existiert -> update
c) Ist die Checksumme nicht in der DB, SSID existiert nicht: Neuer Eintrag
4) Ich würde noch ein Datumswert einfügen bei jedem Durchlauf wird das Datum auch aktuell gesetzt. Ist ein Datumswert z.B. älter als X Stunden (z.B. 2 oder 3 durchläufe): Der Benutzer wurde gelöscht...
Schon brauchst du nur wenige Abfragen an die Web-Api zu machen weil du ja bereits weisst welche Einträge sich geändert haben.
Allerdings musst du natürlich in dem Fall auch die ganze Fehlerbehandlung sauber machen -> was passiert wenn dein AD-Server grad nicht erreichbar ist? Was passiert wenn die Web-Api nen Fehler wirft? Wie kannst du prüfen ob der Wert auf dem Zielsystem wirklich eingetragen wurde?
Ich würde daher auch eher dazu tendieren zu schauen das ich den Zugriff für den DL so anpasse wie es nötig ist statt das selbst zu programmieren. Denn wenn du es auch nur halbwegs sauber haben willst müsstest du ja auch sauber testen, in der Grössenordnung können das auch mal einige Wochen sein. Weil ja eben ggf. auch div. Spezialfälle berücksichtigt werden müssen:
- Umlaute im Namen (und ggf. sogar Namen mit Nicht-Europäischen Zeichensatz)
- Lange bzw. Kurze Namen
- Titel bzw. "Mittel-Namen" (inkl. möglicher Experten die z.B. den Titel ins Namensfeld packen - dabei aber vergessen das es Dr. Müller ist - aber Prinz Charles....)
- ...
Und das nur bei dem Namen, da gibts aber ja noch zig Checks die ggf. relevant sein können...
1) Du liest ein Objekt aus dem AD raus
2) Du machst eine Checksumme über alle Felder die für dich relevant sind und packst die zusammen mit der SSID in die DB
3) Du vergleichst:
a)Ist die Checksumme bereits in der DB und identisch -> keine änderung
b) Ist die Checksumme bereits in der DB aber unterschiedlich, SSID existiert -> update
c) Ist die Checksumme nicht in der DB, SSID existiert nicht: Neuer Eintrag
4) Ich würde noch ein Datumswert einfügen bei jedem Durchlauf wird das Datum auch aktuell gesetzt. Ist ein Datumswert z.B. älter als X Stunden (z.B. 2 oder 3 durchläufe): Der Benutzer wurde gelöscht...
Schon brauchst du nur wenige Abfragen an die Web-Api zu machen weil du ja bereits weisst welche Einträge sich geändert haben.
Allerdings musst du natürlich in dem Fall auch die ganze Fehlerbehandlung sauber machen -> was passiert wenn dein AD-Server grad nicht erreichbar ist? Was passiert wenn die Web-Api nen Fehler wirft? Wie kannst du prüfen ob der Wert auf dem Zielsystem wirklich eingetragen wurde?
Ich würde daher auch eher dazu tendieren zu schauen das ich den Zugriff für den DL so anpasse wie es nötig ist statt das selbst zu programmieren. Denn wenn du es auch nur halbwegs sauber haben willst müsstest du ja auch sauber testen, in der Grössenordnung können das auch mal einige Wochen sein. Weil ja eben ggf. auch div. Spezialfälle berücksichtigt werden müssen:
- Umlaute im Namen (und ggf. sogar Namen mit Nicht-Europäischen Zeichensatz)
- Lange bzw. Kurze Namen
- Titel bzw. "Mittel-Namen" (inkl. möglicher Experten die z.B. den Titel ins Namensfeld packen - dabei aber vergessen das es Dr. Müller ist - aber Prinz Charles....)
- ...
Und das nur bei dem Namen, da gibts aber ja noch zig Checks die ggf. relevant sein können...