LPS:IdM/midPoint
Obsah |
ZČU
- https://themis3.civ.zcu.cz/midpoint
- https://alfresco.zcu.cz/midpoint (ke zrušení)
- git clone /afs/.zcu.cz/project/software/git/idm/midpoint.git
Dokumentace
midPoint:
- URL: https://evolveum.com/midpoint/
- First steps: https://wiki.evolveum.com/display/midPoint/First+Steps
- API+schemas: https://evolveum.com/downloads/midpoint/3.3.1/
- source code: https://github.com/Evolveum/midpoint
- examply:
- https://github.com/Evolveum/midpoint/tree/v3.3.1/samples (jednotlivé resourcy)
- https://github.com/Evolveum/midpoint/tree/master/testing/story/src/test/resources (komplexnější příklady)
- demo: http://demo.evolveum.com/midpoint
- hlavní dokumentace: https://wiki.evolveum.com/display/midPoint/Documentation
Connectors:
- OpenICF:
- URL: https://forgerock.org/openicf/
- source code: https://stash.forgerock.org/projects/OPENICF
- ConnId:
- Polygon (ConnId+OpenICF):
Instalace
# version of midPoint v='3.3.1' apt-get install -y less mc screen vim man apt-get install -y bzip2 net-tools sudo wget apt-get install -y openjdk-7-jdk tomcat8 apache2 # apache2 cat > /etc/apache2/conf-available/midpoint.conf <<EOF ProxyRequests Off ProxyPreserveHost On ProxyPass /midpoint http://localhost:8080/midpoint ProxyPassReverse /midpoint http://localhost:8080/midpoint RewriteEngine On RewriteRule ^/?$ /midpoint/ [R] EOF # tomcat8 echo 'JAVA_OPTS="${JAVA_OPTS} -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -Dmidpoint.home=/var/opt/midpoint/ -Djavax.net.ssl.trustStore=/var/opt/midpoint/keystore.jceks -Djavax.net.ssl.trustStoreType=jceks"' >> /etc/default/tomcat8 mkdir /var/opt/midpoint chown tomcat8:tomcat8 /var/opt/midpoint service tomcat8 stop # mc (cosmetics) mkdir -p ~/.config/mc/ || : echo 'ENTRY "/var/opt/midpoint" URL "/var/opt/midpoint"' >> ~/.config/mc/hotlist ln -s /usr/lib/mc/mc.csh /etc/profile.d/ || : ln -s /usr/lib/mc/mc.sh /etc/profile.d/ || : # midpoint wget -nv https://evolveum.com/downloads/midpoint/${v}/midpoint-${v}-dist.tar.bz2 tar xjf midpoint-${v}-dist.tar.bz2 echo "alias repo-ninja='`pwd`/midpoint-${v}/bin/repo-ninja'" > /etc/profile.d/midpoint.sh # initial launch without anything a2enmod rewrite proxy proxy_http a2dissite 000-default a2enconf midpoint service apache2 start service tomcat8 start service postgresql start # midpoint initial deployment cp -vp midpoint-${v}/war/midpoint.war /var/lib/tomcat8/webapps/ ln -s /usr/share/java/mysql-connector-java.jar /var/lib/tomcat8/lib/ service tomcat8 start while ! test -f /var/opt/midpoint/config.xml; do sleep 0.5; done wget -nv -P /var/opt/midpoint/icf-connectors http://nexus.evolveum.com/nexus/content/repositories/openicf-releases/org/forgerock/openicf/connectors/scriptedsql-connector/1.1.2.0.em3/scriptedsql-connector-1.1.2.0.em3.jar
Oracle
TODO: vyzkoušet
Vyžaduje Oracle clienta.
ln -s /usr/lib/oracle/12.1/client64/lib/ojdbc7.jar /var/lib/tomcat8/lib/
Switch repository
PostgreSQL
pass=`dd if=/dev/random bs=9 count=1 2>/dev/null | base64` export PATH=$PATH:/usr/lib/postgresql/9.4/bin useradd -s /bin/bash midpoint sudo -u postgres psql -U postgres postgres -c "CREATE USER midpoint password '${pass}'" sudo -u postgres createdb --owner=midpoint midpoint sudo -u midpoint psql midpoint < midpoint-${v}/config/sql/_all/postgresql-3.3-all.sql # also for repo-ninja apt-get install -y postgresql libpostgresql-jdbc-java ln -s /usr/share/java/postgresql.jar midpoint-${v}/lib/ service tomcat8 stop
Manually edit /var/opt/midpoint/config.xml (replace ${pass}):
<repository> <repositoryServiceFactoryClass>com.evolveum.midpoint.repo.sql.SqlRepositoryFactory</repositoryServiceFactoryClass> <embedded>false</embedded> <driverClassName>org.postgresql.Driver</driverClassName> <jdbcUsername>midpoint</jdbcUsername> <jdbcPassword>${pass}</jdbcPassword> <jdbcUrl>jdbc:postgresql://localhost/midpoint</jdbcUrl> <hibernateDialect>com.evolveum.midpoint.repo.sql.util.MidPointPostgreSQLDialect</hibernateDialect> <hibernateHbm2ddl>validate</hibernateHbm2ddl> </repository>
MySQL
pass=`dd if=/dev/random bs=9 count=1 2>/dev/null | base64` # also for repo-ninja apt-get install -y mariadb-server libmysql-java ln -s /usr/share/java/mysql-connector-java.jar midpoint-${v}/lib/ mysql -e "CREATE DATABASE midpoint" mysql -e "GRANT ALL ON midpoint.* TO midpoint IDENTIFIED BY '${pass}'" mysql -u midpoint -p${pass} midpoint < midpoint-${v}/config/sql/_all/mysql-3.3-all.sql service tomcat8 stop
Manually edit /var/opt/midpoint/config.xml (replace ${pass}):
<repository> <repositoryServiceFactoryClass>com.evolveum.midpoint.repo.sql.SqlRepositoryFactory</repositoryServiceFactoryClass> <embedded>false</embedded> <driverClassName>org.gjt.mm.mysql.Driver</driverClassName> <jdbcUsername>midpoint</jdbcUsername> <jdbcPassword>${pass}</jdbcPassword> <jdbcUrl>jdbc:mysql://localhost/midpoint</jdbcUrl> <hibernateDialect>com.evolveum.midpoint.repo.sql.util.MidPointMySQLDialect</hibernateDialect> <hibernateHbm2ddl>validate</hibernateHbm2ddl> </repository>
Common
Finaly:
service tomcat8 stop killall java rm -fv /var/opt/midpoint/midpoint*.db service tomcat8 start
Stronger key
su -s /bin/bash -c "keytool -genseckey -alias strong -keystore /var/opt/midpoint/keystore.jceks -storetype jceks -storepass changeit -keyalg AES -keysize 256 -keypass midpoint" tomcat8
Manualy edit /var/opt/midpoint/config.xml:
<keystore> <keyStorePath>${midpoint.home}/keystore.jceks</keyStorePath> <keyStorePassword>changeit</keyStorePassword> <encryptionKeyAlias>strong</encryptionKeyAlias> <xmlCipher>http://www.w3.org/2001/04/xmlenc#aes256-cbc</xmlCipher> </keystore>
Fix security policy
# maxFailedLogins: 3 -> 10 # loginTimeout: 15 -> 2 vim /var/lib/tomcat8/webapps/midpoint/WEB-INF/ctx-web-security.xml service tomcat8 restart
Admin password
Change admin password.
- initial user: administrator
- initial password: 5ecr3t
Upgrade
Postupovat podle release notes a podle obecných pravidel na https://wiki.evolveum.com/display/midPoint/Upgrade+HOWTO .
Upgrade databáze
Např.:
cd /opt/newMidpoint/midpoint-3.4/config/sql/_all mysql -u root -p midpoint < mysql-upgrade-3.3-3.4.sql
Deployment war
...chtělo to i promazat starý adresář ve /var/lib/tomcat8/webapps/midpoint
Upgrade connectorů
Viz také: https://wiki.evolveum.com/display/midPoint/Connector+Upgrade
- překlikat resourcy na novější connectory
- smazat <schema>...</schema> a znovu schéma nacucnout
- odstranit staré reference z midPointu: Configuration - Repository Objects - Connector
- radši i restart midPointu (natáhne si případně omylem smazané objekty)
repo-ninja
- úprava /etc/profile.d/midpoint.sh
- ln -s /usr/share/java/mysql-connector-java.jar /opt/midpoint.../lib
Docker
https://hub.docker.com/r/valtri/docker-midpoint/
docker pull valtri/docker-midpoint docker run -itd --name midpoint valtri/docker-midpoint
Tipy
XML
Klonování konfigurace resource
Při kopírování XML nutno smazat sekci <schema></schema>, doporučeno i další.
Smazat:
- schema
- fetchResult
- metadata
- operationalState
Také smazat nebo vymyslet nové OID resourcu.
Import do git repozitáře
Připravit XML, u resourců viz také #Klonování konfigurace resource.
Vhodné mít v XML i OID (nechat midPointem vygenerovat nové nebo si něco vymyslet). Možno využít i tzv. "Smart References", např.:
<resource> ... <connectorRef type="ConnectorType"> <filter> <q:equal> <q:path>c:connectorType</q:path> <q:value>org.identityconnectors.ldap.LdapConnector</q:value> </q:equal> </filter> </connectorRef> ... </resource>
Repozitář: viz #ZČU
Mapování atributů
Matching rule
V mapování nezapomínat na matching rule, např.:
<matchingRule xmlns:mr="http://prism.evolveum.com/xml/ns/public/matching-rule-3">mr:stringIgnoreCase</matchingRule>
Jinak to začne duplikovat atributy (nové hodnoty se přidávají místo nahrazování).
Multiplicity
1) Max
Pokud je na koncovém systému víc hodnot jednoho atributu a midPoint by to měl napravovat (nahradit jednou), pak nastavit omezení v mapování:
<limitations> <maxOccurs>1</maxOccurs> </limitations>
Což se vlastně hodí vždy. Není třeba, pokud je omezení již na úrovni schématu z resource adaptéru.
2) Min
Byly potíže s GUI, pokud schéma z resource adaptéru vyžadovalo minimální počet výskytu 1. Lze přerazit v mapování:
<limitations> <minOccurs>0</minOccurs> </limitations>
Synchronizace
Opatrně při modifikaci účtů při rekoncilaci (="atributová rekoncilace"), může jít o náročnější operaci.
TODO: ověřit. Náročnost se IMHO týkala údržby velké skupiny v LDAPu, což SunIdM zvládá, resp. dělá v rámci ActiveSync najednou a odděleně od účtů.
Modifikaci je možno přeskočit, ale přesto nechat dělat pro live synchronizaci:
<reaction> <name>Linked reaction</name> <situation>linked</situation> <channel>http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#liveSync</channel> <action> <name>Modify Action</name> <handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/action-3#modifyUser</handlerUri> </action> </reaction>
Úkoly
S nároky na nové IdM se bude potřeba s midPoint naučit. Příklad úkolů, které bude zřejmě potřeba umět:
JDBC connector
- případně i jako generátor skupin a pracovišť, ale nevíme, jak dobře je to podporované
Aktivace identit
- midPoint má nějaký komplexnější způsob na aktivace/deaktivace identit, které jsou spojené s datumy
- prozkoumání, jak na disablování identit (někde jiné atributy, někde smazané, ...), v Sun Idm na to máme speciální role
- datum deaktivace případně k využití na expirace hostovských kont nebo odchody identit
Sosání skupin
- engine midPointu to zatím neumí tím správným způsobem krz entitlements, ale lze nějak obejít (<focusType>c:RoleType</focusType> v ObjectSynchronization)
- viz také email thread "Sync Entitlements to Role/Org Object with CSVFileConnector"
- otázka mimo midPoint: budem nahrazovat i trychtýř, co máme před Grouperem? (tj. budem se napojovat přímo do několika databází nebo budem sosat sadu csv souborů? nevýhoda přímého napojení by byl větší chaos uvnitř midPointu)
Groupová aritmetika
- sčítání nám stačí, lze dělat přidáváním rolí do jiných rolí
- máme informace o členství jak "dopředné" (memberUid v LDAPu u skupin), tak "zpětné" (memberof v LDAPu u identit)
- jak na update identit po přeskupení rolí? (memberof v LDAPu): ruční update lidí v daných skupinách/rolích?
Korelační pravidla
- budeme potřebovat "dělat CRO": umět se vypořádat se změnami klíčů
- zkusit se napojovat podle rodných čísel a umět se vypořádat s jejich změnami:
- napojit si nějaký systém podle RČ a přenášet změny z CRO
- zkoušet dělat změny RČ
- zkoušet dělat duplicity: jaké reporty, aby šly pozat? resuscitační emaily nebo workflow?
midPoint API
Určitě bude potřeba nějaké rozhraní pro uživatele (registrace kont, projekty, self-management).
- umí něco přímo midPoint? (3.4 slibuje "Custom GUI forms" na wicketech)
- jaká midPoint má API?
- (šlo by mít i nějakou propojovací tabulku, ale dokumentace midPoint slibuje víc)
WebAuth SSO
Pokud by šlo využít přímo GUI midPointu, bude potřeba umět plně WebAuth.
Info o SSO: https://wiki.evolveum.com/display/midPoint/MidPoint+and+SSO+HOWTO
Bulk action
Základ umíme (modifikace křesního jména u jedné identity).
Příklady:
- vynucený update nebo rekoncilace u seznamu identit
- přidání/odebrání role
Ohledně přidání odebrání role bych to viděl pokud by to byla nějaká multihodnota v někde uložena.
- aktivace/deaktivace
Aktivace/deaktivace by šla řešit sloupcem který by reprezentoval aktivovaný/deaktivovaný účet. Pak při live synchronizaci nebo rekoncilaci by šlo detekovat a dle toho nastavit
Reporty
Naučit se s audity a reporty. Umět poznat, kdy se co měnilo a proč.