Edge for Private Cloud v. 4.17.05
Pemetaan Peran Eksternal memungkinkan Anda memetakan grup atau peran Anda sendiri ke peran role-based access control (RBAC) dan grup yang dibuat di Apigee Edge.
Prasyarat
- Anda harus menjadi administrator sistem Apigee Private Cloud dengan kredensial admin sistem global untuk melakukan konfigurasi ini.
- Anda perlu mengetahui direktori utama penginstalan Apigee Edge Private Cloud. Direktori {i>root <i}default adalah /opt. Jika Anda memilih direktori utama yang berbeda selama penginstalan Apigee Edge Private Cloud, gunakan direktori tersebut sebagai ganti /opt saat Anda mengikuti petunjuk ini.
- Dapatkan file JAR yang diperlukan dari Apigee.
Pastikan pengguna terdaftar di Edge dan di layanan direktori Anda
Saat menggunakan pemetaan peran, semua pengguna yang mengakses Edge harus ada di layanan direktori eksternal Anda dan di repositori pengguna Edge. Artinya, saat menambahkan pengguna ke layanan direktori eksternal, Anda juga harus menambahkan pengguna yang sama tersebut ke repositori pengguna Apigee.
Misalnya, pengguna a01@company.com ada di grup direktori eksternal a01@company.com. Selanjutnya, Anda ingin memetakan pengguna a01@company.com ke peran orgadmin di Edge. Oleh karena itu, pengguna a01@company.com harus ditambahkan terlebih dahulu ke grup orgadmin di Edge.
Lihat Membuat pengguna global untuk informasi selengkapnya tentang cara membuat pengguna Edge dan menetapkan mereka ke peran.
Konfigurasi default
Pemetaan peran eksternal dinonaktifkan secara default.
Mengaktifkan Pemetaan Peran Eksternal
- Sebelum dapat menyelesaikan konfigurasi berikut, Anda harus membuat class Java yang mengimplementasikan antarmuka ExternalRoleMapperService. Untuk detail tentang implementasi ini, lihat contoh implementasi di bawah.
- Login ke Server Pengelolaan Edge Apigee Anda, lalu hentikan Server Pengelolaan:
> /opt/apigee/apigee-service/bin/apigee-service edge-management-server stop - Periksa status server. Pastikan Server Pengelolaan dihentikan/tidak berjalan:
> /opt/apigee/apigee-service/bin/apigee-all - Buka /opt/apigee/customer/application/management-server.properties di editor teks.
- Edit file management-server.properties dengan setelan berikut:
conf_security_authentication.user.store=externalized.authentication
conf_security_externalized.authentication.role.mapper.enabled=true
conf_security_externalized.authentication.role.mapper.implementation.class=com.customer.authorization.impl.ExternalRoleMapperImpl
Penting: Class implementasi dan nama paket yang dirujuk di atas, ExternalRoleMapperImpl, hanyalah sebuah contoh -- ini adalah class yang harus Anda implementasikan dan Anda dapat menamai class dan memaketkannya sesuai keinginan Anda. Untuk detail tentang cara mengimplementasikan class ini, lihat contoh implementasi di bawah. - Simpan file management-server.properties.
- Mulai Server Pengelolaan:
> /opt/apigee/apigee-service/bin/apigee-service edge-management-server start - Pastikan server sedang berjalan:
> /opt/apigee/apigee-service/bin/apigee-all
Menonaktifkan Otorisasi Eksternal
Untuk menonaktifkan otorisasi eksternal:
- Buka /opt/apigee/customer/application/management-server.properties di editor teks.
- Ubah penyimpanan pengguna autentikasi menjadi ldap:
conf_security_authentication.user.store=ldap - Tetapkan properti berikut ke salah:
conf_security_externalized.authentication.role.mapper.enabled=false - Mulai ulang Server Pengelolaan:
> /opt/apigee/apigee-service/bin/apigee-service edge-management-server mulai ulang
Tentang penerapan contoh ExternalRoleMapperImpl
Dalam file konfigurasi management-server.properties yang dijelaskan di atas, perhatikan baris ini:
conf_security_externalized.authentication.role.mapper.implementation.class=com.customer.authorization.impl.ExternalRoleMapperImpl
Class ini menerapkan antarmuka ExternalRoleMapperService, dan diperlukan. Anda perlu membuat penerapan Anda sendiri untuk kelas ini yang mencerminkan grup masing-masing. Setelah selesai, tempatkan class yang dikompilasi di JAR dan tempatkan JAR tersebut di /<install_dir>/apigee/edge-gateway/lib/infra/libraries.
Anda dapat memberi nama class dan memaketkan class apa pun yang diinginkan selama class tersebut mengimplementasikan ExternalRoleMapperService, dapat diakses di classpath Anda, dan direferensikan dengan benar di file konfigurasi management-server.properties.
Berikut adalah contoh penerapan class ExternalRoleMapperImpl yang dikomentari dengan baik. Untuk mengompilasi kelas ini, Anda harus merujuk pada file JAR berikut yang disertakan dengan Edge:
/<install_dir>/apigee/edge-gateway/lib/infra/libraries/authentication-1.0.0.jar
package com.apigee.authenticate; import com.apigee.authentication.ConfigBean; import com.apigee.authentication.ConnectionException; import com.apigee.authentication.ExternalRoleMapperService; import com.apigee.authentication.NameSpace; import com.apigee.authentication.NameSpacedRole; import com.apigee.authorization.namespace.OrganizationNamespace; import com.apigee.authorization.namespace.SystemNamespace; import java.util.Collection; import java.util.HashSet; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; /** * * Sample Implementation constructed with dummy roles with required namespaces. * * Created by GopiAlagar on 6/12/15. */ public class ExternalRoleMapperImpl implements ExternalRoleMapperService { InitialDirContext dirContext = null; @Override public void stop() throws Exception { } /** * * This method would be implemented by the customer, Below is the basic * example. * * If User has sysadmin role then it's expected to set SystemNameSpace * along with the * res\quested NameSpace. Otherwise role's requestedNameSpace to be set * for the NameSpacedRole. * * Collection<NameSpacedRole> results = new HashSet<NameSpacedRole>(); * * NameSpacedRole sysNameSpace = new NameSpacedRole("sysadmin", * SystemNamespace.get()); * * String orgName = * ((OrganizationNamespace)requestedNameSpace).getOrganization(); * * NameSpacedRole orgNameSpace = new NameSpacedRole ("orgadmin", * requestedNameSpace); * * results.add(sysNameSpace); * * results.add(orgNameSpace); */ public Collection<NameSpacedRole> getUserRoles(String userName, String password, NameSpace requestedNameSpace) { /* * There are 3 actions performed in the below implementation * 1. Authenticate Given User against ADS * 2. Fetch the internal groups from the ADS * 3. Map the internal group into the apigee-edge roles */ /*************************************************************/ /******************* Authenticate Given User *******************/ /*************************************************************/ // Customer Specific Implementation will override this method // implementation. // Obtain dnName for given username or email address. String dnName = ImplementDnameLookupLogic(); if (dnName == null) { System.out.println("Error "); } DirContext dirContext = null; Collection<NameSpacedRole> results = new HashSet<NameSpacedRole>(); try { // Verify the credentials for a given username or dnName // and password in order to create a directory context. dirContext = ImplementDirectoryContextCreationLogic(); /****************************************************/ /********** Fetch internal groups *******************/ /****************************************************/ String groupDN = "OU=Groups,DC=corp,DC=wacapps,DC=net"; SearchControls controls = new SearchControls(); controls.setSearchScope(SearchControls.ONELEVEL_SCOPE); NamingEnumeration<SearchResult> groups = dirContext.search(groupDN,"(objectClass=*)", new Object[] { "", "" }, controls); if (groups.hasMoreElements()) { while (groups.hasMoreElements()) { SearchResult searchResult = groups.nextElement(); Attributes attributes = searchResult.getAttributes(); String groupName = attributes.get("name").get().toString(); /**************************************/ /** Map the internal group into the ***/ /** apigee-edge roles ***/ /**************************************/ if (groupName.equals("BusDev")) { results.add(new NameSpacedRole("businessAdmin",SystemNamespace.get())); } else if (groupName.equals("DevSupport")) { results.add(new NameSpacedRole("devOpsAdmin",SystemNamespace.get())); } else if (groupName.equals("Engineering")) { if (requestedNameSpace instanceof OrganizationNamespace) { String orgName = ((OrganizationNamespace) requestedNameSpace).getOrganization(); results.add(new NameSpacedRole("orgadmin", new OrganizationNamespace(orgName))); } } else if (groupName.equals("Operations") || groupName.equals("IT")) { results.add(new NameSpacedRole("sysadmin",SystemNamespace.get())); } else if (groupName.equals("Marketing")) { results.add(new NameSpacedRole("marketAdmin",SystemNamespace.get())); } else { results.add(new NameSpacedRole("readOnly",SystemNamespace.get())); } } } else { /** * In case of no group found or exception found we throw empty * roles. */ System.out.println(" !!!!! NO GROUPS FOUND !!!!!"); } } catch (Exception ex) { ex.printStackTrace(); System.out.println("Error in authenticating User: {}" + new Object[] { userName }); } finally { // Customer implementation to close // ActiveDirectory/LDAP context. } return results; } @Override public void start(ConfigBean arg0) throws ConnectionException { try { // Create InitialDirContext. // Create a directory context based on the // system admin user credentials. dirContext = ImplementDirContextCreationLogicForSysAdmin(); } catch (NamingException e) { // TODO Auto-generated catch block throw new ConnectionException(e); } } }