LPS:IdM/midPoint

Z HelpDesk
< LPS:IdM
Verze z 1. 7. 2016, 20:03, kterou vytvořil Valtri (diskuse | příspěvky) (verze 3.4)

ZČU

Dokumentace

midPoint:


Connectors:

  1. OpenICF:
  2. ConnId:
  3. Polygon (ConnId+OpenICF):

Instalace

# version of midPoint
v='3.4'

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
cat << EOF
JAVA_OPTS="${JAVA_OPTS} -Xms256m -Xmx768m -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" -Doracle.net.tns_admin=/usr/lib/oracle/12.1/client64/network/admin
TZ=CET
LANG="en_US.UTF-8"
EOF >> /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

1) vyžaduje Oracle clienta

2) JDBC ovladač

ln -s /usr/lib/oracle/12.1/client64/lib/ojdbc7.jar /var/lib/tomcat8/lib/

3) do /etc/default/tomcat8:

  • přidat k JAVA_OPTS (kvuli fungování tnsnames): -Doracle.net.tns_admin=/usr/lib/oracle/12.1/client64/network/admin'
  • přidat: TZ=CET (jinak hláška o časových zónách z Oraclu, a vůbec je dobré mít kvuli lokálnímu času ;-))

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.4-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.4-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
  • vyzkoušet: repo-ninja --validate

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>

Detaily

inbound/outbound mappings:

  • authoritative (autoritativní): odebrat hodnotu při odstranění resourcu/role
  • exclusive (exkluzivní): vrátit chybu, pokud přijde hodnota i z jiného zdroje
  • strength (váha):
    • weak (slabý): jen default (nepřepisovat)
    • normal (normální): přepisovat (při výskytu NULL danou hodnotu také přepíše, resp. smaže)
    • strong (silný): přepisovat, změnu pošle dále do provisioningu vždy
  • source (zdroj):
    • seznam atributů k dispozici pro výpočet nové hodnoty
    • vyžadováno pro <expression><script><code>...</code></script></expression>, bez výrazu pouze s target není potřeba
    • midPoint to nějak používá k detekcí změn a práci s multihodnotami
    • příklad:
      • xml: <c:path>$account/attributes/ri:MOBIL</c:path>
      • GUI: $account/attributes/MISTNOST
    • nepovinný tag <name>: normálně je daný atribut k dispozici ve výrazu pod svým jménem, tagem name lze změnit
  • target (cíl): kam hodnotu uložit, příklad:
    • xml: <c:path>$user/honorificSuffix</c:path>
    • GUI: $user/honorificSuffix
  • condition (podmínka)

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>

Profiling

Konfigurace - Profiling

Koukání do logu jen na tasky >= 1s:

tail -f /var/log/tomcat8/idm-profile.log | egrep '[0-9]{3}\.[0-9]{3} ms$'

Ú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č. Logování do tabulek ve formátu doporučovaném midPointem (https://wiki.evolveum.com/display/midPoint/Auditing)?