The current official EUDAT implementation uses the following steps:
Figure 1. EUDAT B2ACCESS - B2STAGE/B2SAFE integration
The mapping of the (external/DN) user name to local (iRODS) user is configured in role_map.json file. The file allows mapping one or more B2ACCESS/Unity groups (organizations) or users to iRODS account. The names of groups or user ids must be explicitly mentioned in that file. This type of mapping means, that normally multiple users are mapped to single iRODS account and share their data within the defined group.
User accounts are kept in a central LDAP and local accounts on PRACE nodes are provisioned by this database directly or by synchronizing it offline. The users are authenticated by X.509 (long living) certificates signed by IGTF approved CA. In particular, B2ACCESS X.509 short living certificates will not be widely accepted by PRACE nodes.
There is deisaUserProfile attribute in the LDAP schema. This attribute with value “EUDAT” is provided to users who indicated a consent that their user information may be shared between PRACE and EUDAT.
Figure 2. Overview of the integration components
Users from PRACE LDAP with deisaUserProfile set to “EUDAT” must be imported to B2ACCESS. While this import some LDAP attributes shall be converted to B2ACCESS groups, also all these users probably shall belong to “PRACE” group. In this way we distinguish PRACE users from anyone with IGTF certificate who can setup an B2ACCESS account.
Technically, this component is implemented in Python as a proxy between the PRACE LDAP (using LDAP interface) and B2ACCESS (using Unity HTTP API as interface). This component must be run periodically (cron job) under EUDAT control (suggested place is the B2ACCESS machine), as with the current Unity implementation needed API functions require an account with full administration rights. On the other side only limited (read-only) access to LDAP is necessary.
The script (prace_eudat_users_sync.py) works as follows:
As the result all and only PRACE users with deisaUserProfile set to “EUDAT” have B2ACCESS accounts and belong to PRACE group, which also implies access to other EUDAT services.
Two different integration methods are implemented.
The modified (remote_users_sync.py) script is run from cron on B2STAGE and provisions user's account. Besides EUDAT DN (one from the certificate generated by B2ACCESS) the script maps also DN from the X500Name identity which is certificate used to authenticate the user against B2ACCESS (in this case: the “PRACE” certificate), e.g:
[[
"/C=DE/L=Juelich/O=FZJ/OU=JSC/CN=a7f7c4b5-7005-4af6-b346-b87f6e8ba442/CN=226",
"/C=PL/O=GRID/O=PSNC/CN=Michal Jankowski"
]]
Technical details:
"identities":[
{"typeId":"x500Name",
"value":"CN=Michal Jankowski,O=PSNC,O=GRID,C=PL", …},
{"typeId":"persistent",
"value":"a7f7c4b5-7005-4af6-b346-b87f6e8ba442" …}]
Authentication and mapping DN of the initiator of incoming gridFTP request to iRODS user is done by B2STAGE software (gridmap_iRODS_callout) implemented by EUDAT. This solution introduces a additional callout to B2STAGE code: an external application is called prior the authentication and mapping. The application gets the DN as a parameter, so it may perform online verification against B2ACCESS of this single user.
The application is implemented as a Python script (irods_user_sync.py) and works as follows:
B2ACCESS -> B2STAGE ”old” mechanism:
B2ACCESS -> B2STAGE ”new” mechanism: