LPS:IdM/midPoint/Office365

Z HelpDesk

Info

Microsoft Office365 - cloudová aplikace. Identity jsou spravované přes Graph API.

Konektor:

  • git repozitář: connector-msgraph
  • drobné patche na závislosti
  • hlavní změny mergované v upstramu (optimalizace, opravy, podpora licencí)

Resource: Office365

Přes Graph API nelze spravovat emaily. Nastavování přesměrování ve skriptech mimo režii IdM.

Admin přístup

  1. https://office365.zcu.cz (testovací: https://login.microsoftonline.com/?whr=zcutest.civ.zcu.cz TODO: lepčí URL?)
  2. Admin Center -> Azure Active Directory -> Azure Active Directory -> App registrations
  3. identita "OpenICF MSGraph Connector" -> Client credentials

==> jako hlavní ID je Application (client) ID

==> jako heslo: secret z Client credentials

==> (lze si zvolit dobu platnosti, v 2021-05-31 zvoleno na 2 roky)

Model

Osoby

Zaměstnanci, studenti, rozšířená hostovská konta (je vyžadováno CRO ID).

Primární klíče:

  • __NAME__ - LOGIN@DOMAIN
  • onPremisesImmutableId - CRO ID (nikdy se nesmí měnit)
  • userPrincipalName - LOGIN

Atributy:

  • mail: LOGIN@DOMENA, jen přo zakládání, ale nelze spravovat přes Graph API

Merge: nelze

Povolení/blokace: 1:1 podle identity v midPointu

Přejmenování: potřeba ruční zásah kolem správy emailů. Původní email je u přejmenovávané identity ponechán. (TODO: čistit to ve skriptech mimo?)

Fyzické mazání: Po smazání je identita v koši po dobu 1 měsíce. Po tuto dobu ji nelze znovuzaložit automaticky přes Graph API. Lze ji obnovit přes administrátorské rozhraní Office 365, anebo smazat vývojovými administrátorskými nástroji (koš nelze vysypat přes midPoint - umí to Graph API, ale identity mají divoké identifikátory).

Skupiny

Neposílají se (ale jinak vyzkoušeno).

Licence

Read-only identity. V midPointu použito pro výpočty atributů pro přidělováné licencí (technicky: jde o "ruční" query, nelze použít přímo asociace na resourcu).

Licence se skládá z jednotlivých aplikací.

Pro každou licenci lze nastavit globální vyjímku pro nějakou aplikaci. Ale nelze nastavovat různé vyjímky pro každého uživatele (technicky: přes Graph API to lze, ale vedlo by to na strukturovaný atribut u uživatele, což nelze).

Výpočet licencí

Princip

Šílenost. Vychází se z dokumentu: https://software.zcu.cz/files/MS_EES.html

V zásadě dva typy licencí: A1 a A3 a každá z nich má studentskou a zaměstnaneckou verzi. Typ studentské se volí podle fakulty, zaměstnanecké podle self-managementu, ale jen pro vybraná prcoviště. Studentská má vždy přednost.

Role v midPointu

Počáteční import 2021-06:

# === studenti ===
./group.py o365proplus-students -s "Licence Microsoft pro všechny studenty"

for fak in fdu fst fel fav fpe; do ./modify-role.py -q subtype=stag-global-group-student extension/ext:GROUP_ZKRATKA=${fak^^} -a role-group-o365proplus-students:role; done

# === per fakulta ===
# 1) self role
for fak in fdu fst fel fav fpe rek-ntc rek-civ rek-ps rek-uk rek-ujp rek-rek rek-skm rek-suz; do
	FAK=${fak^^}
	FAK=$(echo $FAK | tr '-' '/')
	org=$(echo $fak | cut -d - -f2)
	ORG=${org^^}

	./create-role.py --oid role-self-o365proplus-$fak subtype=self-role "name=SELF: O365 $FAK" displayName="o365proplus-$fak" description="Licence pro Microsoft365 (A3plus) - $ORG" extension/ext:requestableGroups=$org requestable=true
	./modify-role.py --oid role-self-o365proplus-$fak extension/ext:requestableGroups+=staff
done
# tune catchall REK
./modify-role.py --oid role-self-o365proplus-rek-rek 'extension/ext:requestableGroups+=!civ'
./modify-role.py --oid role-self-o365proplus-rek-rek 'extension/ext:requestableGroups+=!ps'
./modify-role.py --oid role-self-o365proplus-rek-rek 'extension/ext:requestableGroups+=!suz'
./modify-role.py --oid role-self-o365proplus-rek-rek 'extension/ext:requestableGroups+=!uk' 

#./query-org.py extension/ext:OU_ZKRATKA=$FAK 'subtype=hr-org-str' | head -n 3
##==> OID
#oid=
#./modify-org.py --oid $oid -i role-group-o365proplus-${fak}:role

# 2) output roles (groups)
for fak in fdu fst fel fav fpe; do
	ORG=${fak^^}
	./group.py o365proplus-$fak -s "Licence pro Microsoft365 (A3plus) - $ORG"
done
ORG=REK; ./group.py o365proplus-rek -s "Licence Microsoft pro zaměstnance ${ORG}"

# 3) self / output connections
for fak in fdu fst fel fav fpe; do
	./modify-role.py --oid role-self-o365proplus-$fak -a role-group-o365proplus-${fak}:role
done
for org in ntc civ ps uk ujp rek skm suz; do
 ./modify-role.py --oid role-self-o365proplus-rek-${org} -a role-group-o365proplus-rek:role
done

Ručně přidat do každé self-management role pro assignment výstupní role (dodatečná kontrola při rušení autorizace):

		<condition>
			<source>
			   <path>$source/name</path>
			</source>
			<source>
			   <path>$source/extension/requestableGroups</path>
			</source>
			<expression>
				<script>
					<relativityMode>absolute</relativityMode>
					<code>
						return zcuUtils.execute('authRequestable', [
							'userObj': focus,
							'roleName': name,
							'requestableGroup': requestableGroups,
						]);
					</code>
				</script>
			</expression>
		</condition>

CA

# C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
keytool -importcert -keystore ./keystore.jceks -file /usr/share/ca-certificates/mozilla/DigiCert_Global_Root_G2.crt -alias digicert-g2
# C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
keytool -importcert -keystore ./keystore.jceks -file /usr/share/ca-certificates/mozilla/DigiCert_Global_Root_CA.crt -alias digicert-ca

(starší postup byl: https://www.microsoft.com/pki/mscorp/cps/default.htm + import např. M$ CA1, CA2, CA4 a CA5)

Postupy

Hostovská konta

Postup přidání přístupu pro hostovská konta:

  1. přidělit CRO ID, viz LPS:IdM/midPoint#Přidělení CRO ID
  2. zařadit do skupiny gapps nebo office365 (gapps znamená i google apps)