Edge for Private Cloud v. 4.17.05
এক্সটার্নাল রোল ম্যাপিং আপনাকে নিজের গ্রুপ বা রোলকে Apigee Edge-এ তৈরি করা রোল-বেসড অ্যাক্সেস কন্ট্রোল (RBAC) রোল ও গ্রুপের সাথে ম্যাপ করতে দেয়।
পূর্বশর্ত
- এই কনফিগারেশনটি সম্পাদন করতে আপনাকে অবশ্যই গ্লোবাল সিস্টেম অ্যাডমিন ক্রেডেনশিয়াল সহ Apigee Private Cloud সিস্টেম অ্যাডমিনিস্ট্রেটর হতে হবে।
- আপনার Apigee Edge Private Cloud ইনস্টলেশনের রুট ডিরেক্টরি আপনাকে জানতে হবে। ডিফল্ট রুট ডিরেক্টরি হল /opt। Apigee Edge Private Cloud ইনস্টল করার সময় আপনি অন্য কোনও রুট ডিরেক্টরি বেছে নিলে, এই নির্দেশাবলী অনুসরণ করার সময় /opt-এর পরিবর্তে সেটি ব্যবহার করুন।
- Apigee থেকে প্রয়োজনীয় JAR ফাইল সংগ্রহ করুন।
ব্যবহারকারীরা Edge এবং আপনার ডিরেক্টরি পরিষেবায় রেজিস্টার করেছেন কিনা তা নিশ্চিত করুন
রোল ম্যাপিং ব্যবহার করার সময়, Edge অ্যাক্সেস করা সব ব্যবহারকারীকে আপনার এক্সটার্নাল ডিরেক্টরি পরিষেবা এবং Edge ব্যবহারকারী রিপোজিটরি, দুটিতেই থাকতে হবে। এর অর্থ হল, আপনি যখন আপনার এক্সটার্নাল ডিরেক্টরি পরিষেবায় কোনও ব্যবহারকারীকে যোগ করেন, তখন আপনাকে অবশ্যই সেই একই ব্যবহারকারীকে Apigee ব্যবহারকারীর রিপোজিটরিতে যোগ করতে হবে।
যেমন, ব্যবহারকারী a01@company.com আপনার এক্সটার্নাল ডিরেক্টরি গ্রুপ 'apiadmin'-এ আছে। তারপর আপনি Edge-এ orgadmin ভূমিকায় a01@company.com ব্যবহারকারীকে ম্যাপ করতে চান। তাই, ব্যবহারকারী a01@company.com-কে প্রথমে Edge-এ orgadmin গ্রুপে যোগ করতে হবে।
Edge ব্যবহারকারী তৈরি করা এবং তাদের ভূমিকা অ্যাসাইন করার ব্যাপারে আরও জানতে গ্লোবাল ব্যবহারকারী তৈরি করা দেখুন।
ডিফল্ট কনফিগারেশন
এক্সটার্নাল ভূমিকা ম্যাপিং ডিফল্ট হিসেবে বন্ধ করা থাকে।
এক্সটার্নাল রোল ম্যাপিং চালু করা হচ্ছে
- নিম্নলিখিত কনফিগারেশন সম্পূর্ণ করার আগে, আপনাকে অবশ্যই একটি জাভা ক্লাস তৈরি করতে হবে যা ExternalRoleMapperService ইন্টারফেস প্রয়োগ করে। এই প্রয়োগ সম্পর্কে আরও জানতে, নিচে দেওয়া প্রয়োগের স্যাম্পেল দেখুন।
- আপনার Apigee Edge ম্যানেজমেন্ট সার্ভারে লগ-ইন করুন এবং তারপর ম্যানেজমেন্ট সার্ভার বন্ধ করুন:
> /opt/apigee/apigee-service/bin/apigee-service edge-management-server stop - সার্ভারের স্ট্যাটাস চেক করুন। ম্যানেজমেন্ট সার্ভার বন্ধ/চালু নেই তা নিশ্চিত করুন:
> /opt/apigee/apigee-service/bin/apigee-all status - একটি টেক্সট এডিটরে /opt/apigee/customer/application/management-server.properties খুলুন।
- নিম্নলিখিত সেটিংস সহ management-server.properties ফাইল এডিট করুন:
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
গুরুত্বপূর্ণ: উপরে উল্লেখ করা ইমপ্লিমেন্টেশন ক্লাস এবং প্যাকেজের নাম, ExternalRoleMapperImpl, শুধুমাত্র একটি উদাহরণ -- এটি এমন একটি ক্লাস যা আপনাকে অবশ্যই ইমপ্লিমেন্ট করতে হবে এবং আপনি ক্লাস এবং প্যাকেজের নাম যা খুশি রাখতে পারেন। এই ক্লাস প্রয়োগ করার ব্যাপারে বিস্তারিত জানতে, নিচে দেওয়া প্রয়োগের স্যাম্পেল দেখুন। - management-server.properties ফাইল সেভ করুন।
- ম্যানেজমেন্ট সার্ভার চালু করুন:
> /opt/apigee/apigee-service/bin/apigee-service edge-management-server start - সার্ভার চলছে কিনা তা যাচাই করুন:
> /opt/apigee/apigee-service/bin/apigee-all status
এক্সটার্নাল অনুমোদন বন্ধ করা হচ্ছে
এক্সটার্নাল অনুমোদন বন্ধ করতে:
- একটি টেক্সট এডিটরে /opt/apigee/customer/application/management-server.properties খুলুন।
- যাচাইকরণ ব্যবহারকারীর স্টোর পরিবর্তন করে ldap করুন:
conf_security_authentication.user.store=ldap - নিম্নলিখিত প্রপার্টি 'মিথ্যা' হিসেবে সেট করুন:
conf_security_externalized.authentication.role.mapper.enabled=false - ম্যানেজমেন্ট সার্ভার রিস্টার্ট করুন:
> /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
ExternalRoleMapperImpl স্যাম্পেল ইমপ্লিমেন্টেশন সম্পর্কে
উপরে বর্ণিত management-server.properties কনফিগ ফাইলে, এই লাইনটি লক্ষ্য করুন:
conf_security_externalized.authentication.role.mapper.implementation.class=com.customer.authorization.impl.ExternalRoleMapperImpl
এই ক্লাস ExternalRoleMapperService ইন্টারফেস প্রয়োগ করে এবং এটি প্রয়োজন। আপনার সংশ্লিষ্ট গ্রুপকে প্রতিফলিত করে এমন এই ক্লাসের নিজস্ব ইমপ্লিমেন্টেশন আপনাকে তৈরি করতে হবে। হয়ে গেলে, কম্পাইল করা ক্লাসটি একটি JAR-এ রাখুন এবং সেই JAR-টি /<install_dir>/apigee/edge-gateway/lib/infra/libraries-এ রাখুন।
আপনি ক্লাস এবং প্যাকেজের নাম যা খুশি দিতে পারেন, যতক্ষণ না এটি ExternalRoleMapperService প্রয়োগ করে, আপনার ক্লাসপাথে অ্যাক্সেসযোগ্য এবং management-server.properties কনফিগারেশন ফাইলে সঠিকভাবে রেফারেন্স করা হয়।
নিচে ExternalRoleMapperImpl ক্লাসের একটি ভালভাবে কমেন্ট করা স্যাম্পেল ইমপ্লিমেন্টেশন দেওয়া হল। এই ক্লাস কম্পাইল করতে, আপনাকে অবশ্যই Edge-এর সাথে অন্তর্ভুক্ত নিম্নলিখিত JAR ফাইলটি রেফারেন্স করতে হবে:
/<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); } } }