In dieser Dokumentation möchte ich zeigen, wie man eine Liste von Usern, die man z.B. von einer Human Resources (HR) Abteilung bekommt, in dem in dem open source Identity, Governance Administration (IGA) Server "Midpoint" importiert.
Ich habe im Vorfeld einen leeren Midpointserver via Podman bei mir lokal installiert (meine Dokumentation dazu siehe hier).
Starten des Midpoint servers:
Initial:
Wir wechseln in einer Linux- oder Windows Shell in das Midpoint Verzeichnis, welches hier geholt werden kann.
Ich habe in der docker-compose.yml noch die Zeile
./:/opt/midpoint/var/import:Z
hinzugefügt, damit man später einfacher Dateien austauschen und importieren kann:
Wir starten den Server mit:
podman compose up
Details dazu habe ich, wie oben schon erwähnt, hier beschrieben.
Regelmäßiges Starten
Sobald der Server einmal eingerichtet wurde, liegt er als Podman Container vor und kann gestartet werden mit (in der Reihenfolge):
podman start midpoint-midpoint_data-1
podman start midpoint-data_init-1
podman start -a midpoint-midpoint_server-1
Gestoppt wird der Server in der Konsole mit STRG-x oder dem Löschen des Terminals in dem der Server läuft.
Reset des Midpoint Servers
Man könnte nach der Installation auch die Container mit einem "podman compose up" neu erstellen und mit "podman compose down" löschen. Die Daten bleiben dabei erhalten, weil sie in einem Volume liegen. Dennoch ist es einfacher, die Container zu stoppen, anstatt sie immer zu löschen und neu anzulegen.
Wenn man die Daten aus Midpoint löschen/zurücksetzen will, geht das wie folgt:
podman compose down
podman volume rm midpoint_midpoint_data
podman compose up
Damit ist der Midpoint Server wieder jungfräulich.
Anlegen eines Users in Midpoint
In einem Browser geben wir ein: http://localhost:8082/
Username: Administrator
Passwort: Test5ecr3t
Ich habe mir zunächst manuell einen User namens Achim angelegt. Dazu bin ich in der Adminoberfläche auf Benutzer gegangen und habe dort mit dem "+" Symbol einfach einen neuen User angelegt
Import von Usern aus einer XML Datei
User brauchen ein Format. Da ich dieses erst mal nicht hatte und daher ein Import einer einfachen csv Datei nicht klappt, habe ich das Format über eine XML Datei mitgegeben:
[
{
"user": {
"name": "beispielmitarbeiter",
"givenName": "Max",
"familyName": "Mustermann",
"fullName": "Max Mustermann",
"employeeNumber": "12345",
"assignment": [
{
"targetRef": {
"oid": "86d3b462-2334-11ea-bbac-13d84ce0a1df",
"type": "RoleType"
}
}
]
}
},
{
"user": {
"name": "Ali Mente",
"givenName": "Ali",
"familyName": "Mente",
"fullName": "Ali Mente",
"employeeNumber": "12346",
"assignment": [
{
"targetRef": {
"oid": "86d3b462-2334-11ea-bbac-13d84ce0a1df",
"type": "RoleType"
}
}
]
}
},
{
"user": {
"name": "Rudi Mente",
"givenName": "Rudi",
"familyName": "Mente",
"fullName": "Rudi Mente",
"employeeNumber": "12347",
"assignment": [
{
"targetRef": {
"oid": "86d3b462-2334-11ea-bbac-13d84ce0a1df",
"type": "RoleType"
}
}
]
}
}
]
Nach dem Klicken auf das Import Symbol (rechts neben dem "+") konnte ich die User importieren:
Import von Usern aus einer csv Datei
In der Realität kommen große Userdaten eher als csv (Comma Separated Value) Dateien daher.
Wie man diese importiert ist hier in einem Youtube Video zu sehen (nicht zu hören). Im Folgenden habe ich dies nachgestellt:
die Dateien hr.csv, resource-csv-hr.xml und task-hr-import.xml herunter geladen:
Diese Dateien habe ich in das gemountete Verzeichnis /opt/midpoint/var/import gelegt.
Ich habe dazu von dieser Seite: https://github.com/Evolveum/midpoint-book/tree/master/samples/5
Man kann auch, wenn im Podman Container die Mountoption nicht angegeben wurde, von Hand Dateien in den Container kopieren:
podman cp hr.csv midpoint-midpoint_server-1:/opt/midpoint/var/import/hr.csv
Der Inhalt von hr.csv sieht wie folgt aus:
Die Resource und den Task habe ich als Objekt importiert (unter Resources/All Resources/Import bzw. Server Tasks/All Tasks/Import).
Ich musste den Pfad noch in der Resource unter Connector Configuration anpassen:
Nun konnte ich den "HR System Import Task" laufen lassen:
Es wurden daraufhin Resourcen-Accounts erstellt und diese auch als User importiert:
Damit habe ich mein Etappenziel erreicht. Die User sind erfolgreich importiert (Juhuuu).
Details
Man kann nun in dem Resourcenobject die Mappings und andere Einstellungen anpassen.
Zum Experimentieren empfehle ich, eine Kopie der Resource zu erstellen:
Import Task
Dort kann man manuell einen neuen HR Import Task hinzufügen:
Der Task wird wie folgt ausgefüllt:
Das Ergebnis sieht man, wenn man in der csv Datei eine Person hinzufügt und diese dann auch importiert wird. Ich hatte "Axel Haar" noch hinzugefügt und er wurde erfolgreich importiert:
CSV Import Resource
Ich habe versucht die von der Evolveum Demo Seite hochgeladene HR Import Resource von Hand nachzubauen. Leider hat das nach vielen Versuchen nicht geklappt. Irgendetwas scheint in der XML-Datei die ich importiere (resource-csv-hr.xml), versteckt zu sein, was sich über die graphische Oberfläche nicht einbauen lässt. Das sieht man auch, wenn man dort in die Basic Attributes des Account Objekts klickt. Dort wird angemeckert, dass das Feld "Kind" ein Mussfeld ist, aber nichts drin steht (Bild dazu siehe unten).
Bei meinem nachgebautem HR Import Resource Objekt werden die Daten zwar importiert, aber sie erscheinen nur als Resourcenaccounts und nicht als User.
Nichtsdestoweniger möchte ich hier ein paar Screenshots des originalen, importierten Resourcenobjekts zeigen:
Fazit
Mit dem oben gebauten Konstrukt haben wir einen einfachen, funktionierenden IGA Server, der größere Mengen von Userdaten importieren kann. Diese können nun aufbereitet (z.B. für Logins oder mit Rechten verknüpft werden) und weiter gereicht werden.
Als nächstes möchte ich diese User an einen LDAP Server exportieren.
So, stay tuned!
Achim Mertens
#hive