Identity and Access Management Praktické cvičení pavel.horal@orchitech.cz
Cíl cvičení Identity & Access Management
Identity Management Část IdM Seznámení s OpenIDM Načtení HR exportu Synchronizace do LDAPu Přiřazení role a propagace do LDAPu Schvalování přístupu
Access Management Část AM Nakonfigurování domény a SSO brány Reverzní proxy a centrální autentizace Cross-domain SSO a federace Propojení s IdM
OpenIDM Identity Management
Úlohy IdM K čemu IdM slouží? Centrální řízení účtů a práv v systémech Životní cyklus uživatele a přidělených práv Provisioning nastavení do cílových systémů Synchronizace hesel napříč systémy Validace a synchronizace nastavení User-self service Podpora auditu
Ideální situace Kdy potřebujeme IdM nejméně? Centrální úložiště uživatelů a práv SSO v rámci všech aplikací PC Server Prohlížeč Aplikace Y Aplikace Active Directory
Základní pojmy Objekty a procesy managed object system object resource source system, source object target system, target object synchronization, validation mapping
Architektura Celková architektura
Úloha I Vytvoření uživatele Nastartování OpenIDM $./startup.sh Získání seznamu uživatelů $ curl \ --header "-OpenIDM-Username: openidm-admin" \ --header "-OpenIDM-Password: openidm-admin" \ http://localhost:8080/openidm/managed/user/?_queryid=query-all-ids Vytvoření uživatele { "_id": "frank", "username": "frank", "givenname": "frank", "familyname": "smith", "email": "frank@example.com", "password": "idm", "description": "My first user" } Zobrazení uživatele http://localhost:8080/openidm/managed/user/joe
Úloha II Kontrola databáze Otevření OrientDB studia http://localhost:2480/studio/ Seznam dostupných tříd / tabulek $ bin/console.sh > classes Zobrazení objektů > select * from managed_user > select * from audit_activity
OpenICF Open Identity Connectors Framework and Toolkit
Úloha III Načtení dat z CSV http://openidm.forgerock.org/doc/install-guide/index.html#more-sample4 Změna konfigurační složky $./startup.sh -p samples/sample4 Konfigurace - mapování provisioner-**.json - konektor schedule- **.json - spouštěná úloha sync.json Manuální spuštění http://localhost:8080/openidm/recon? _action=recon&mapping=systemhraccounts_manageduser
Konfigurační namespacy Jak se odkazovat na typy objektů
Úloha IV Kontrola záznamů Aplikační logy $ less logs/openidm0.log.0 Aplikační logy $ less audit/action.log Seznam uživatelů $ curl \ --header "-OpenIDM-Username: openidm-admin" \ --header "-OpenIDM-Password: openidm-admin" \ --request GET \ "http://localhost:8080/openidm/managed/user/?_queryid=query-all-ids"
.500 a LDAP Adresářové služby DIT Protokoly.500
.500 a LDAP Schéma a data Objectclasses (structural vs auxilary) Attributes (matching rules, syntaxes) Distinguished name Naming attribute dn: ou=groups,dc=example,dc=com changetype: add objectclass: organizationalunit objectclass: top ou: groups description: Groups container.
Úloha V Příprava ApacheDS Spuštění serveru $ /etc/init.d/apacheds-2.0.0-m12-default start Vtvoření kontejnerů pro uživatele a skupiny $ ldapadd -D uid=admin,ou=system -w secret -h localhost -p 10389 dn: ou=people,dc=example,dc=com objectclass: organizationalunit objectclass: top ou: users description: People container. # To samé pro ou=groups
Úloha VI Kontrola záznamů a LDAP search Zobrazení celého podstromu $ ldapsearch -D uid=admin,ou=system -w secret -h localhost -p 10389 -LLL \ -b dc=example,dc=com -s subtree Zobrazen kořenového záznamu $ ldapsearch -D uid=admin,ou=system -w secret -h localhost -p 10389 -LLL \ -b "" -s base "" + Dohledání skupin systémového uživatele $ ldapsearch -D uid=admin,ou=system -w secret -h localhost -p 10389 -LLL \ -b "ou=system" -s subtree "(uniquemember=uid=admin,ou=system)" "*" Zobrazení schématu $ ldapsearch -D uid=admin,ou=system -w secret -h localhost -p 10389 -LLL \ -b "cn=schema" -s base "" "+"
.500 a LDAP Kde se vzal LDAP.500 protokoly pracují pouze s OID OSI networking stack RFC pro LDAP Navázané standardy LDIF Shadowing, changelog DSML
Úloha VII Apache Directory Studio Připojení k serveru Procházení DIT Zobrazení schématu
Úloha VIII Vytvoření uživatelů a skupin dn: uid=jdoe,ou=people,dc=example,dc=com objectclass: inetorgperson cn: John Doe sn: Doe givenname: John mail: jdoe@example.com telephonenumber: 12345 uid: jdoe dn: cn=openidm,ou=groups,dc=example,dc=com objectclass: groupofuniquenames objectclass: top cn: openidm uniquemember: uid=dummy,ou=system uniquemember: uid=jdoe,ou=people,dc=example,dc=com dn: cn=openidm2,ou=groups,dc=example,dc=com objectclass: groupofuniquenames objectclass: top cn: openidm uniquemember: uid=dummy,ou=system
Úloha I Synchronizace s LDAPem $ bin/startup.sh -p samples/sample2d Oprava konfigurace LDAPu provisioner.openicf-ldap.json: credential Spuštění rekonciliace $ curl \ --header "-OpenIDM-Username: openidm-admin" \ --header "-OpenIDM-Password: openidm-admin" \ --request POST \ "http://localhost:8080/openidm/recon? _action=recon&mapping=systemldapgroups_managedgroup"... systemldapaccounts_manageduser... manageduser_systemldapaccounts
Úloha Oprava úlohy I Oprava konfigurace synchronizace "source" : "", "transform" : { "type" : "text/javascript", "source" : "source.displayname? source.displayname : source.username;" }, "target" : "cn"
Reconciliation Validace a synchronizace systémů SOURCE OBJECT SOURCE OBJECT LINK LINK TARGET OBJECT TARGET OBJECT 1. Iterate through all objects for the object set specified as "source". 2. Iterate through all object identifiers for the object set specified as "target". 3. Iterate through all link objects, carrying out the following steps.
Úloha I Kontrola dat OpenIDM Zobrazení záznamů > classes > select from managed_user > select from managed_group > select from managed_group > browse class managed_group > display record 0 > display record 1 > select @this.tojson() from managed_group > select from link... audit_recon, audit_activity...
Synchronizační situace Source reconciliation (LEFT JOIN) Source Qualifies? Yes No Link Exists? Yes No Target Found? 0 1 IGNORE SOURCE_MISSING DELETE UNQUALIFIED DELETE UNQUALIFIED DELETE TARGET_IGNORED IGNORE UNQUALIFIED DELETE ABSENT CREATE FOUND UPDATE AMBIGUOUS ECEPTION MISSING ECEPTION CONFIRMED UPDATE Default Action TARGET_IGNORED Situation >1
Synchronizační situace Target reconciliation (RIGHT JOIN) Target Qualifies? Yes No Link Exists? Yes No Source Exists? Yes No Source Qualifies? Yes No Situation Default Action TARGET_IGNORED IGNORE UNASSIGNED ECEPTION CONFIRMED UPDATE UNQUALIFIED DELETE SOURCE_MISSING DELETE
Úloha II Synchronizace členství ve skupinách Úprava skupin pro uživatele $ curl \ --header "-OpenIDM-Username: openidm-admin" \ --header "-OpenIDM-Password: openidm-admin" \ --request POST \ -d '[{ "replace":"ldapgroups", \ "value": ["cn=openidm2,ou=groups,dc=example,dc=com"] }]' \ "http://localhost:8080/openidm/managed/user?_action=patch&_queryid=forusername&uid=jdoe" Spuštění rekonciliace $ curl \ --header "-OpenIDM-Username: openidm-admin" \ --header "-OpenIDM-Password: openidm-admin" \ --request POST \ "http://localhost:8080/openidm/recon? _action=recon&mapping=manageduser_systemldapaccounts"
Úloha III Workflow http://openidm.forgerock.org/doc/integrators-guide/index.html#example-provisioning-workflow http://activiti.org/userguide/index.html#activitidesigner
IDM v praxi Ukázky reálných implementací Ukázka OSK a TO2 GUI org-tree, práva, účty, žádosti, delegace Ukázka Dir Identity cílové systémy, privilege hierarchy, workflow, metadirectory
OpenAM Access Management
Úlohy AM K čemu AM slouží? Centrální řízení přístupových politik Poskytování autentizačních služeb Poskytování autorizačních služeb Podpora auditu
Identity vs Access Management Hledání hranice *.foo.com *.bar.com IDENTITIES IDENTITIES ACCOUNTS ACCOUNTS FEDERATION
Architektura Komponenty OpenIDM
Integrace s OpenIDM Policy Agents PEP PAP
Komunikace mezi komponentami Centrální autentizace a autorizace
Úloha I Instalace Nastavení domény $ sudo vim /etc/hosts 127.0.0.1 jcu-{prijmeni}.example.com Stažení Apache Tomcat OpenAM Nastavení Tomcatu $ sudo vim ${catalina.home}/bin/setenv.sh JAVA_OPTS="-mx1024m -:MaxPermSize=256m" $ sudo vim ${catalina.home}/conf/server.xml port="9080" protocol="http/1.1" Nasazení OpenAM ${catalina.home}/webapps/ openam-server-10.1.0-press.war => openam.war
Úloha II Konfigurace aplikace Nastartování Tomcatu $ bin/startup.sh $ tail -f logs/catalina.out Konfigurace pomocí webového rozhraní http://jcu-{prijmeni}.example.com:9080/openam/
Samostatná cvičení Identity & Access Management
Samostatné úkoly Úkoly na zápočet ApacheDS jako LDAP PAM modul http://wiki.debian.org/ldap/pam Nakonfigurování jednoho Policy Agenta http://docs.forgerock.org/en/openig/2.1.0/gateway-guide/index/chapfederation-tutorial.html Identity Federation http://openam.forgerock.org/openam-documentation/openam-docsource/doc/admin-guide/index/chap-federation.html