Teknisk oversikt over AD-synkroniseringa

Ein teknisk oversikt over Cerebrum sin integrasjon med Active Directory, gjennom WinRM og powershell.

1   Oppførsel

AD oppdaterast av Cerebrum på to ulike måtar:

  • Fullsynk: Hent ut all informasjon frå AD, samanlikn denne med Cerebrum, og oppdater AD med det som ikkje stemmer. Denne metoden rydder opp i AD.
  • Hurtigsynk: Oppdater AD med dei siste endringane i Cerebrum. Denne metoden venter på bekreftelse på at endringa vart godkjend, men elles sjekker den ikkje status i AD. Det er berre nokre av hendingane i Cerebrum som vert handtert av hurtigsynken, til dømes passordbytter.

Ulike synkroniseringar kan køyre i parallell med kvarandre utan å skape konflikt, så dei treng ikkje vente på kvarandre. Dette vil kunne trekke meir ressursar av Windows-maskina vi kommuniserer med.

1.1   Fullsynk

Fullsynken fungerer på samme måte for alle typar objekt:

  1. Cerebrum ber AD om informasjon om alle objekta i eit eller fleire OU vi er ute etter å oppdatere. Dette vil kunne ta nokre minuttar.

  2. Cerebrum henter ut all relevant informasjon om dei entitetane som skal synkroniserast, dvs. dei som har eit gitt spread til AD.

  3. Når vi har informasjon frå både AD og Cerebrum samanlikner vi listene.

  4. All informasjon frå AD som ikkje stemmer med Cerebrum fører til at AD vert oppdatert med endringar. Dømer på endringar:

    • Om ein entitet ikkje eksisterer i AD vert det oppretta.
    • Om ein entitet ligg i feil OU kan den bli flytta på, avhengig av konfigurasjonen.
    • Om eit objekt i AD ikkje eksisterer kan objektet bli sletta, deaktivert og/eller flytta til eit anna OU i AD, avhengig av konfigurasjonen.
    • Attributtar i AD som ikkje stemmer med kva som er registrert i Cerebrum oppdaterast.

    Når eit objekt har blitt endra på, og det er spesifisert opp at et powershell-skript skal køyrast, vert skriptet starta. Sjå meir info om dette i Scripts i AD2-synk.

  5. Noko etterarbeid kan forekomme, avhengig av kva typar objekt som oppdaterast. Eit døme er oppdatering av gruppemedlemskap.

Å få generert komplette lister frå begge sider vil ta ei stund, men synkroniseringa vil generere begge listene samtidig. Kvar endring vil også ta ei lita stund å få sendt tilbake til AD, så om det er mange endringar som skal til AD vil synken ta lenger tid.

1.2   Hurtigsynk

Hurtigsynken fungerer på samme måte for alle typar objekt:

  1. Hent ut alle siste endringane frå Cerebrum sin logg, som ikkje allereie har blitt bekrefta som utført av AD-synken. Kva typar endringar som skal hentast ut kan konfigurerast.
  2. Sjekk om entiteten er meint å vere i AD eller ikkje. Til dømes må entiteten ha AD-spread, og objektet kan ikkje vere deaktivert (td. expired).
  3. Send endringar til AD. Kva som sendast avhenger av typen endring. Til dømes vil ei brukaroppretting opprette eit objekt i AD, medan ei endring i ein person sin kontaktinformasjon vil måtte oppdatere eit eller fleire attributtar til alle personen sine brukarkontoar som har relevant AD-spread.
  4. Vent på svar frå AD. Dersom AD bekrefter at endringa har blitt godkjend vert hendinga markert som ferdig-prosessert i Cerebrum. Dersom AD kjem med ei feilmelding vil hendinga gå tilbake i køa og vert forsøkt køyrd på nytt ved neste køyring av hurtigsynken.
  5. Marker endringa som fullført i Cerebrum, dersom AD sa ok. Neste runde med synkronisering vil då ignorere allereie fullførde endringar.

Hurtigsynken krever mindre ressursar, spesielt om det ikkje er nokon endringar i Cerebrum, og kan difor settast opp til å køyre med korte mellomrom.

Hurtigsynken rydder ikkje opp i AD om det skulle vore gjort nokre manuelle endringar. Dette er fullsynken sin jobb.

2   Funksjonalitet

Synkroniseringa med AD er lik for alle objekt, men med små variasjonar.

2.1   Generell funksjonalitet

AD2-synken støtter:

  • Oppretting av AD-objekt, når ein entitet eksisterer i Cerebrum, men ikkje i AD.

  • Oppdatering av attributtar til AD-objekt, når verdiar endrast i Cerebrum. For kvar AD-integrasjon lagast det ein spesifikasjon over alle attributtane som integrasjonen skal vedlikeholde. Verdiane kan i stor grad konfigurerast. Cerebrum rører ikkje attributtar som ikkje er spesifiserte opp.

    Nokre attributtar vert generert ut frå informasjon i Cerebrum som namn, adresser og telefonnummer, medan nokre attributtar kan definerast i ein eigen tabell for AD-attributtar i Cerebrum,

  • Flytting av AD-objekt, når objektet ligg i feil OU i følge Cerebrum, og dette er konfigurert opp. Dette skjer typisk ved deaktivering av entitetar.

  • Oppdatering av manglande OU, når desse mangler i AD. Integrasjonen har berre støtte for å opprette OU-et, utan handtering og vedlikehold av attributtar.

  • Sletting av AD-objekt når ein entitet vert deaktivert eller mister tilhøyrande AD-spread. Cerebrum vil ikkje slette AD-objekt med mindre dette er konfigurert opp.

  • Skript-køyring: Når integrasjonen gjer endringar i AD, vil den etter endringa kunne starte powershell-skript som ligg på Windows-maskina, om dette er konfigurert opp. Dei som drifter AD kan legge til alt dei har behov for at skal skje etter at integrasjonen har køyrd, til dømes opprette heimeområde for nye brukarar, opprette Exchange-kontoar, og varsle IT-drift om endringar.

    Sjå meir info og oppsett av dette Scripts i AD2-synk.

2.2   Brukarsynkronisering

Brukarar har nokre ekstra behov som ikkje gjeld for andre typar objekt:

  • Brukarar som er i karantene kan bli deaktiverte, sletta og/eller flytta til eit anna OU. Dette er opp til konfigurasjonen.
  • Brukarar som er aktive i Cerebrum, men deaktiverte i AD blir aktiverte.
  • Brukere med trait account_exempt vil ikke bli tatt med i eksporten, før traitet er fjernet. Dette gjør at AD-drift kan gjøre vedlikehold på brukere uten at AD-integrasjonen skal gjøre endringer midt i prosessen.

2.3   Gruppesynkronisering

Grupper har nokre ekstra behov som ikkje gjeld for andre typar objekt:

  • Den initielle gruppetypen settast etter kva konfigurasjonen seier, standard er Security Group. Integrasjonen endrer ikkje gruppetypen i etterkant.
  • Det initielle gruppeskopet settast etter kva konfigurasjonen seier, standard er Global Group. Integrasjonen endrer ikkje gruppetypen i etterkant.
  • Grupper med trait group_exempt vil ikke bli tatt med i eksporten, før traitet er fjernet. Dette gjør at AD-drift kan gjøre vedlikehold på brukere uten at AD-integrasjonen vil påvirke prosessen.
  • Grupper kan i AD ikkje ha samme namn som ein brukarkonto, dersom dei er security principals. Dette er tillatt i Cerebrum. For å unngå namnekollisjonar vil integrasjonen legge til ein prefiks eller suffiks, til dømes -gruppe.
  • Gruppemedlemskap oppdaterast, sjå neste avsnitt.

2.3.1   Gruppemedlemskap

Oppdatering av medlemskap til ei gruppe gjerast etter at gruppa sjølv er blitt oppdatert:

  1. AD vert spurd om ei liste over alle medlem av gruppa. Den returnerer då ei liste over alle direkte medlem.

  2. Cerebrum genererer ei liste over medlem av gruppa, med kriteria:

    • Det er berre medlem som har eit definert AD-spread som vert tatt med. Konfigurasjonen vil innehalde ei liste over kva spread dette er.

      Døme: group@ad og account@ad, som betyr at det er berre grupper og brukarar med desse spreadsa som vil bli lagt til som medlem i AD.

    • Undergrupper som har eit AD-spread vert inkludert som medlem. Slike undergrupper sine medlem vert oppdatert når det er denne gruppa sin tur å synkroniserast. For slike grupper vil ein då beholde samme gruppehierarki som i Cerebrum.

    • Undergrupper som ikkje har eit AD-spread vert flata ut. Det betyr at alle medlem av ei slik undergruppe vert tatt med som direkte medlem av hovudgruppa i AD, så lenge dei har eit AD-spread. Dette er sidan undergruppa ikkje har AD-spread, og vil då ikkje vere synleg i AD, men det er likevel ønskeleg å få med dei indirekte medlem av hovudgruppa, sidan dei har AD-spread.

  3. Når begge listene er ferdig generert samanliknast dei.

    • Medlem som er i Cerebrum, men ikkje i AD vert lagt til i gruppa i AD.
    • Medlem som er i AD, men ikkje i Cerebrum vert fjerna frå gruppa i AD.

2.4   Funksjonalitet i hurtigsynken

Kva hurtigsynken støtter av funksjonalitet:

  • Passordbytte: Alle nye passord vert sendt til AD, men berre dersom brukaren har riktig AD-spread.

    Passordbytter vil berre fungere så lenge vi framleis har klartekstpassordet til brukaren tilgjengeleg. Sidan klartekstpassord slettast etter ei viss stund, vil brukaren i visse situasjonar måtte sette seg eit nytt passord etter å ha fått tilgang til AD (fått satt AD-spread).

    Merk: Passordbytter oppdaterast berre gjennom hurtigsynken, med unntak av ved oppretting av nye brukarkontoar i AD.

  • Karantener: Alle endringar i karantener på ein brukar gjer at integrasjonen sjekker om brukaren skal bli aktivert eller deaktivert i AD.

3   Identifisering av objekt

Integrasjonen har ei knytting mellom ein entitet i Cerebrum og eit objekt i AD. Denne knyttinga gjerast i dei fleste situasjonar gjennom entitetsnamnet i Cerebrum, som brukarnamn og gruppenamn, og SAMAccountName i AD.

AD har ulike typar identifikatorar:

  • SamAccountName: Dette er ein globalt unik id, og er det integrasjonen som oftast bruker som identifikator.

  • DistinguishedName: Ein unik id, som består av Name, namnet på OU-et objektet ligg i og alle foreldre-OU av dette. For å kunne bruke dette krever det at integrasjonen veit nøyaktig lokasjon til objektet. Dette er ikkje alltid tilfelle og vil kunne føre til feilsituasjonar.

    Integrasjonen har av og til behov for å bruke denne id-typen som identifikator, til dømes ved handtering av gruppemedlemskap.

  • Name: Dette er det lokale namnet, og er ein del av DistinguishedName. Name er lokalt unik, som betyr at det må vere unikt innanfor samme OU i AD, men det kan finnast andre objekt med samme Name i andre OU.

    For brukarar legg vi brukarnamn i Name, og ikkje personen sitt fulle namn, sidan dette ikkje er unikt nok. Dette for å unngå namnekollisjonar i AD. Det brukast likevel ikkje som ein identifikator.

  • SID: Kan brukast som ein unik, universal id, men det krever at Cerebrum allereie kjenner til verdien. I tillegg vil eit objekt få ein ny SID om den slettast og opprettast på nytt. SID kan heller ikkje settast av andre enn AD sjølv.

  • GUID: Kan brukast som unik, global id, men krever at Cerebrum allereie kjenner til verdien. I tillegg vil eit objekt få ein ny SID om den slettast og opprettast på nytt.

4   Feilsituasjonar

Integrasjonen kan feile av ulike årsaker:

  • Cerebrum har ikkje tilgang til eit AD-objekt. Dette kan komme av at objektet er blitt flytta til eit OU utanfor Cerebrum sin kontroll, eller at Cerebrum ikkje har tilgang til å utføre ei spesifikk endring i OU-et.
  • Det finnast allereie eit AD-objekt med samme id, men utanfor OU som Cerebrum har tilgang til å sjå.
  • Enkelte attributtar er blitt feilkonfigurerte. Til dømes kan eit attributt ha krav på seg å peike på ein gyldig mail-database, men som ikkje lenger finnast.

5   Script

AD-synken har mulighet for å starte PowerShell-scripts på domenekontrolleren ved enkelte endringer. Se dokumentet Scripts i AD2-synk for mer informasjon og eksempler.

6   Kommunikasjonen

Cerebrum kobler til ein Windows-server i AD-miljøet den skal oppdatere gjennom WinRM-protokollen. Gjennom WinRM kan vi starte cmd, som igjen starter powershell. Det aller meste av det Cerebrum gjer i AD, gjerast med powershell, og då spesielt med ActiveDirectory-modulen til powershell.

Måten vi kommuniserer med Windows på har nokre begrensingar:

  • Standard WinRM gjennom cmd har ikkje støtte for linjeskift. Dersom vi hentar eller set verdiar i AD som har linjeskift i seg vil dei forsvinne.
  • Cerebrum får ikkje sende inn input gjennom stdin, men kan berre sende inn kommandoar. Dette gjer at vi ikkje kan sende informasjon til prompt, og må omgå dette på ulike vis. Cerebrum kan då ikkje køyre kommandoar som ber om detaljar gjennom popups, til dømes credentials.

Dersom du vil gjenskape hvordan AD-integrasjonen oppdaterer AD, kan du starte programmet cmd (ikke start powershell), og kjøre kommandoen:

%SystemRoot%\syswow64\WindowsPowerShell\\v1.0\powershell.exe \
    -NonInteractive -NoLogo -NoProfile -Command "Get-ADDomainController"

Obs: Om du vil kjøre kommandoen i et powershell-vindu må du vere obs på å escape en del spesialtegn, spesielt rundt powershell sin bruk av arrays.

For å omgå manglende input i prompt, starter powershell-kommandoer med noen besvergelser:

$pass = ConvertTo-SecureString -Force -AsPlainText PASSWORD;
$cred = New-Object System.Management.Automation.PSCredential(CEREBRUM, $pass);
Import-Module ActiveDirectory;
...

Dette gjør at en for AD-kommandoer kan legge ved -Credential, for eksempel:

Get-ADUser -Credential $cred USERNAME

6.1   LDAP

Cerebrum støtter også uthenting av data via AD-LDAP. Uthenting av data via LDAP går mykje kjappare enn powershell, og kan settast opp ved tidskritisk behov, ved bestilling, men krever då ekstra tilgangar til AD-miljøet. Cerebrum støtter likevel ikkje oppdateringar av data via LDAP, dette må skje gjennom powershell.

7   Begrensingar

AD-synken er meint å vere generell og brukbar for alle instansar, så den kan difor konfigurerast ein del. Det er likevel visse begrensingar som vi har måtte sette for at den skal forbli generell og unngå å bli for kompleks:

  • To spreads kan ikkje synke mot samme OU i samme domenet. Dette vil føre til at objekta vert fjerna eller deaktiverte i annankvar runde. Eitt OU i eitt domene kan berre oppdaterast av ein type objekt i Cerebrum.

  • AD krever at passord settast med klartekstpassordet. Dette betyr at det ikkje er mulig å gjere ein AD-brukar aktiv om vi har sletta klartekstpassordet frå Cerebrum.

    Cerebrum lagrer vanlegvis ikkje klartekstpassord i meir enn ein kort periode etter at eit nytt passord er blitt satt, av sikkerhetsmessige hensyn. Dette gjer at brukarar som skal opprettast i AD og som ikkje har satt eit nytt passord på ei stund, må bytte passordet sitt før dei kan logge på i AD-domenet.

    Alternativ for å løyse behovet for klartekstpassord:

    • Cerebrum kan ta vare på klartekstpassordet i ein periode, fram til brukaren har blitt oppretta i AD. Ved migrering til ny AD kan dette settast opp ei stund i forvegen, for å redusere behovet for passordbytter.
    • Kreve at brukarar som skal få ny AD-tilgang må bytte passord for å få tilgang til AD.
  • AD har nokre begrensingar, som er greit å vere klar over:

    • Fully Qualified Domain Name (FQDN) kan vere på maks 64 teikn. Døme på eit FQDN er: cerebrum-synk.usit.uio.no.
    • Namn på OU kan vere på maksimalt 63 teikn.
    • Security principals kan ha maksimalt 1015 gruppemedlemskap.
  • Å lese ut innstillinga AccountControl, PASSWD_CANT_CHANGE, for eit objekt er tidkrevande, då dette er ikkje eit attributt som ligg i AD LDAP. Cerebrum synker difor ikkje desse verdiane anna enn ved oppretting.

  • Det vil ta litt tid før oppdatert informasjon frå Cerebrum når alle domenekontrollarane i domenet. Cerebrum passer på å snakke med samme domenekontroller gjennom ein heil synk, for å unngå trøbbel med dette. Ved starten av kvar synk ber Cerebrum om ein passande DC med kommandoen Get-ADDomainController.

    Dette fører til at DC-en vi får beskjed om å bruke, vil mens synken pågår få meir last enn dei andre DC-ane, enn om vi hadde brukt AD si vanlege lastbalansering.

8   Konfigurasjon

Synkroniseringa har ein del konfigurasjon for å styre kva som skal synkast, og kva som skal gjerast i ulike tilfeller. Meir informasjon om dette finn du i dokument for konfigurasjon av AD-synk. Merk at dette dokumentet nemner ikkje alle innstillingane.

9   Feilmeldingar og varsling

Det vil kunne oppstå ein del feilsituasjonar i integrasjonen. Når dette skjer vil Cerebrum drift kunne feilsøke og eventuelt varsle dei som drifter AD. I mange situasjonar er det dei som drifter AD som kan rydde opp i problemet, sidan Cerebrum skal ha begrensa tilgang til AD. Dette skjer typisk ved rettighetsproblem, til dømes at eit AD-objekt ligg i eit OU utanfor Cerebrum sin kontroll.

Av jokim
Publisert 31. aug. 2015 09:58