cn:ccr:cloud:autenticazione_openstack:ldap_kerberos
Differences
This shows you the differences between two versions of the page.
| cn:ccr:cloud:autenticazione_openstack:ldap_kerberos [2014/01/09 22:50] – created aiftim@infn.it | cn:ccr:cloud:autenticazione_openstack:ldap_kerberos [2014/01/13 11:25] (current) – [Requisiti] aggiunto python-ldap mpanella@infn.it | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== LDAP e Kerberos ====== | ||
| + | ===== Introduzione ===== | ||
| + | |||
| + | Questa breve guida illustra i concetti ed i passaggi necessari per configurare OpenStack utilizzando LDAP per la gestione degli utenti e Kerberos per l' | ||
| + | |||
| + | Al fine di evitare il polluting della directory((Keystone tende ad utilizzare LDAP come se fosse un database relazionale)), | ||
| + | |||
| + | In particolare, | ||
| + | |||
| + | Per questi motivi, è consigliabile utilizzare una directory dedicata e quanto più " | ||
| + | |||
| + | ===== Requisiti ===== | ||
| + | |||
| + | La guida è stata sviluppata e testata nel seguente ambiente: | ||
| + | |||
| + | * Ubuntu 12.04.2 (x86_64) | ||
| + | * OpenStack Grizzly | ||
| + | * Python 2.7 | ||
| + | * python-ldap | ||
| + | * setup di OpenStack eseguito utilizzando come riferimento il manuale di OpenStack e la [[https:// | ||
| + | |||
| + | Non dovrebbe essere complesso adattarla ad ambienti RDO, ma **non** è stata testata con packstack. | ||
| + | |||
| + | ===== Setup di OpenStack ===== | ||
| + | |||
| + | Si faccia riferimento alla guida, arrestandosi alla configurazione di Keystone. | ||
| + | |||
| + | ===== Setup di OpenLDAP ===== | ||
| + | |||
| + | Come directory server si è scelto OpenLDAP, ma è ugualmente possibile utilizzare 389ds. | ||
| + | |||
| + | Negli esempi (LDIF e file di configurazione di Keystone) si utilizzeranno i seguenti valori: | ||
| + | |||
| + | ^ Parametro ^ Valore | ||
| + | | Dominio | ||
| + | | Base DN | dc=ostack, | ||
| + | | Admin DN | cn=admin, | ||
| + | | Password | ||
| + | |||
| + | ==== Preparazione della directory ==== | ||
| + | |||
| + | Creare un file chiamato '' | ||
| + | |||
| + | < | ||
| + | # Users | ||
| + | dn: ou=Users, | ||
| + | objectClass: | ||
| + | ou: Users | ||
| + | |||
| + | # Tenants | ||
| + | dn: ou=Groups, | ||
| + | objectClass: | ||
| + | ou: Groups | ||
| + | |||
| + | # Roles | ||
| + | dn: ou=Roles, | ||
| + | objectClass: | ||
| + | ou: Roles | ||
| + | |||
| + | # Hardcoded in OpenStack!!!! | ||
| + | dn: cn=9fe2ff9ee4384b1894a90878d3e92bab, | ||
| + | objectClass: | ||
| + | ou: _member_ | ||
| + | cn: 9fe2ff9ee4384b1894a90878d3e92bab | ||
| + | |||
| + | # Enabled bit emulation for users | ||
| + | dn: cn=enabled_users, | ||
| + | objectClass: | ||
| + | cn: enabled_users | ||
| + | member: cn=dumb, | ||
| + | |||
| + | # Enabled bit emulation for tenants | ||
| + | dn: cn=enabled_tenants, | ||
| + | objectClass: | ||
| + | cn: enabled_tenants | ||
| + | member: cn=dumb, | ||
| + | </ | ||
| + | |||
| + | Il ruolo con id '' | ||
| + | |||
| + | Il membro con DN '' | ||
| + | |||
| + | Sempre facendo riferimento ad OpenLDAP, applicare le modifiche alla directory con: | ||
| + | |||
| + | ldapmodify -W -D cn=admin, | ||
| + | |||
| + | ==== Creazione degli indici ==== | ||
| + | |||
| + | (Questa sezione è specifica per OpenLDAP) | ||
| + | |||
| + | Al fine di rendere più efficiente l' | ||
| + | |||
| + | Creare un file chiamato '' | ||
| + | |||
| + | < | ||
| + | dn: olcDatabase={1}hdb, | ||
| + | changetype: modify | ||
| + | add: olcDbIndex | ||
| + | olcDbIndex: cn pres,sub,eq | ||
| + | - | ||
| + | add: olcDbIndex | ||
| + | olcDbIndex: ou pres,sub,eq | ||
| + | - | ||
| + | add: olcDbIndex | ||
| + | olcDbIndex: sn pres,sub,eq | ||
| + | - | ||
| + | add: olcDbIndex | ||
| + | olcDbIndex: roleOccupant pres,eq | ||
| + | </ | ||
| + | |||
| + | Ed applicare le modifiche eseguendo **come root**: | ||
| + | |||
| + | ldapmodify -Y EXTERNAL -H ldapi:/// -f indexes.ldif | ||
| + | |||
| + | Il setup di OpenLDAP è ora completo e si può procedere con la configurazione di Keystone. | ||
| + | |||
| + | ===== Configurazione di Keystone ===== | ||
| + | |||
| + | Sfortunatamente, | ||
| + | |||
| + | Prima di tutto, è necessario configurare il driver di identity management per utilizzare LDAP al posto di MySQL: | ||
| + | |||
| + | < | ||
| + | [identity] | ||
| + | driver = keystone.identity.backends.ldap.Identity | ||
| + | </ | ||
| + | |||
| + | Dopodiché è necessario configurare come segue (sempre adattando al vostro ambiente) la sezione ldap di keystone.conf: | ||
| + | |||
| + | < | ||
| + | [ldap] | ||
| + | url = ldap:// | ||
| + | user = cn=admin, | ||
| + | password = ldap_pass | ||
| + | suffix = dc=ostack, | ||
| + | use_dumb_member = True | ||
| + | allow_subtree_delete = False | ||
| + | dumb_member = cn=dumb, | ||
| + | |||
| + | user_tree_dn = ou=Users, | ||
| + | user_objectclass = inetOrgPerson | ||
| + | user_domain_id_attribute = None | ||
| + | user_id_attribute = cn | ||
| + | user_name_attribute = sn | ||
| + | user_mail_attribute = mail | ||
| + | user_pass_attribute = userPassword | ||
| + | user_enabled_default = True | ||
| + | user_attribute_ignore = tenant_id, | ||
| + | user_allow_create = True | ||
| + | user_allow_update = True | ||
| + | user_allow_delete = True | ||
| + | user_enabled_emulation = True | ||
| + | user_enabled_emulation_dn = cn=enabled_users, | ||
| + | |||
| + | tenant_tree_dn = ou=Groups, | ||
| + | tenant_objectclass = groupOfNames | ||
| + | tenant_domain_id_attribute = businessCategory | ||
| + | tenant_id_attribute = cn | ||
| + | tenant_member_attribute = member | ||
| + | tenant_name_attribute = ou | ||
| + | tenant_desc_attribute = description | ||
| + | tenant_attribute_ignore = tenantId | ||
| + | tenant_enabled_emulation = True | ||
| + | tenant_enabled_emulation_dn = cn=enabled_tenants, | ||
| + | |||
| + | role_tree_dn = ou=Roles, | ||
| + | role_objectclass = organizationalRole | ||
| + | role_id_attribute = cn | ||
| + | role_name_attribute = ou | ||
| + | role_member_attribute = roleOccupant | ||
| + | role_attribute_ignore = | ||
| + | </ | ||
| + | |||
| + | Alcuni parametri meritano una spiegazione a sé: | ||
| + | * '' | ||
| + | * '' | ||
| + | * i parametri '' | ||
| + | |||
| + | ===== Prosecuzione del setup di OpenStack ===== | ||
| + | |||
| + | A questo punto, il setup di OpenStack può proseguire con la creazione di utenti e ruoli di base, service endpoint e l' | ||
| + | |||
| + | Una volta terminata, è caldamente consigliato impostare '' | ||
| + | |||
| + | ===== Kerberos ===== | ||
| + | |||
| + | L' | ||
| + | |||
| + | Prima di procedere, è necessario creare un principal '' | ||
| + | |||
| + | ==== Installazione di saslauthd ==== | ||
| + | |||
| + | Installare saslauthd ed il relativo plugin per GSSAPI. Su Ubuntu: | ||
| + | |||
| + | apt-get -y install sasl2-bin libsasl2-modules-gssapi-mit | ||
| + | |||
| + | A questo punto, saslauthd deve essere configurato per utilizzare GSSAPI come backend di autenticazione. Su Ubuntu è sufficiente modificare ''/ | ||
| + | |||
| + | < | ||
| + | START=yes | ||
| + | MECHANISM=" | ||
| + | </ | ||
| + | |||
| + | E successivamente avviarlo con | ||
| + | |||
| + | service saslauthd start | ||
| + | |||
| + | A questo punto, è possibile testare il funzionamento con | ||
| + | |||
| + | testsaslauthd -s slapd -u user@LNGS.INFN.IT -p ' | ||
| + | | ||
| + | Se il vostro realm non prevede l'uso di AES, è **necessario** abilitare '' | ||
| + | |||
| + | ==== Configurazione di OpenLDAP ==== | ||
| + | |||
| + | È ora necessario definire il meccanismo di autenticazione SASL per slapd, creando ''/ | ||
| + | |||
| + | < | ||
| + | mech_list: plain | ||
| + | pwcheck_method: | ||
| + | saslauthd_path: | ||
| + | </ | ||
| + | |||
| + | Quindi aggiungere l' | ||
| + | |||
| + | gpasswd -a openldap sasl | ||
| + | |||
| + | Ed infine riavviare slapd: | ||
| + | |||
| + | service slapd restart | ||
| + | |||
| + | Da questo momento in poi, tutte le password con meccanismo '' | ||
| + | |||
| + | ===== Gestione degli utenti ===== | ||
| + | |||
| + | Per permettere l' | ||
| + | |||
| + | Per aggiungere ed abilitare/ | ||
| + | sono in uso una serie di script denominati [[https:// | ||
| + | |||
| + | Gli script in questione possono essere utilizzati in ambienti OpenStack/ | ||
