বিভিন্ন পরিচয় সিস্টেম সিঙ্ক

গুগল ক্লাউড সার্চে অ্যাক্সেস নিয়ন্ত্রণ ব্যবহারকারীর গুগল অ্যাকাউন্টের উপর ভিত্তি করে। কন্টেন্ট ইন্ডেক্স করার সময়, আইটেমের সমস্ত ACL গুলিকে বৈধ গুগল ব্যবহারকারী বা গ্রুপ আইডি (ইমেল ঠিকানা) দিয়ে সমাধান করতে হবে।

অনেক ক্ষেত্রেই একটি সংগ্রহস্থলের Google অ্যাকাউন্ট সম্পর্কে সরাসরি জ্ঞান থাকে না। পরিবর্তে, ব্যবহারকারীদের স্থানীয় অ্যাকাউন্ট দ্বারা প্রতিনিধিত্ব করা যেতে পারে অথবা প্রতিটি অ্যাকাউন্ট সনাক্ত করার জন্য ব্যবহারকারীর ইমেল ঠিকানা ব্যতীত অন্য কোনও পরিচয় প্রদানকারী এবং আইডি সহ ফেডারেটেড সাইন-ইন ব্যবহার করা যেতে পারে। এই আইডিটিকে বহিরাগত আইডি বলা হয়।

অ্যাডমিন কনসোল ব্যবহার করে তৈরি, আইডেন্টিটি সোর্সগুলি নিম্নলিখিত উপায়ে আইডেন্টিটি সিস্টেমের মধ্যে এই ব্যবধান পূরণ করতে সাহায্য করে:

পরিচয়ের উৎস ব্যবহার করুন যখন:

  • গুগল ওয়ার্কস্পেস বা গুগল ক্লাউড ডিরেক্টরিতে ব্যবহারকারীর প্রাথমিক ইমেল ঠিকানা সম্পর্কে রিপোজিটরিটির জ্ঞান নেই।
  • রিপোজিটরিটি অ্যাক্সেস নিয়ন্ত্রণের জন্য এমন গ্রুপগুলিকে সংজ্ঞায়িত করে যা Google Workspace-এর ইমেল-ভিত্তিক গ্রুপগুলির সাথে সঙ্গতিপূর্ণ নয়।

পরিচয় ম্যাপিং থেকে ইনডেক্সিংকে ডিকাপলিং করে পরিচয় উৎসগুলি ইনডেক্সিং দক্ষতা উন্নত করে। এই ডিকাপলিং আপনাকে ACL তৈরি এবং আইটেম ইনডেক্স করার সময় ব্যবহারকারীর সন্ধান পিছিয়ে দেওয়ার অনুমতি দেয়।

উদাহরণ স্থাপনা

চিত্র ১-এ একটি উদাহরণ স্থাপনার উদাহরণ দেখানো হয়েছে যেখানে একটি এন্টারপ্রাইজ অন-প্রিমিস এবং ক্লাউড রিপোজিটরি উভয়ই ব্যবহার করে। প্রতিটি রিপোজিটরি ব্যবহারকারীদের উল্লেখ করার জন্য একটি ভিন্ন ধরণের বহিরাগত আইডি ব্যবহার করে।

উদাহরণ স্থাপনা
চিত্র ১. বিভিন্ন ধরণের পরিচয় সহ এন্টারপ্রাইজ স্থাপনের উদাহরণ।

রিপোজিটরি ১ ব্যবহারকারীকে SAML ব্যবহার করে দাবি করা ইমেল ঠিকানা ব্যবহার করে শনাক্ত করে। যেহেতু রিপোজিটরি ১-এর কাছে Google Workspace বা Cloud Directory-তে ব্যবহারকারীর প্রাথমিক ইমেল ঠিকানা সম্পর্কে জ্ঞান রয়েছে, তাই পরিচয় উৎসের প্রয়োজন নেই।

রিপোজিটরি 2 সরাসরি একটি অন-প্রিমিস ডিরেক্টরির সাথে সংহত করে এবং ব্যবহারকারীকে তাদের sAMAccountName অ্যাট্রিবিউট দ্বারা সনাক্ত করে। যেহেতু রিপোজিটরি 2 একটি বহিরাগত আইডি হিসাবে একটি sAMAccountName অ্যাট্রিবিউট ব্যবহার করে, তাই একটি পরিচয় উৎস প্রয়োজন।

একটি পরিচয় উৎস তৈরি করুন

যদি আপনার পরিচয় উৎসের প্রয়োজন হয়, তাহলে ক্লাউড অনুসন্ধানে মানচিত্র ব্যবহারকারীর পরিচয় দেখুন।

কন্টেন্ট কানেক্টর তৈরি করার আগে আপনাকে অবশ্যই একটি আইডেন্টিটি সোর্স তৈরি করতে হবে কারণ ACL এবং ইনডেক্স ডেটা তৈরি করতে আপনার আইডেন্টিটি সোর্স আইডির প্রয়োজন হবে। যেমনটি আগে উল্লেখ করা হয়েছে, আইডেন্টিটি সোর্স তৈরি করলে ক্লাউড ডিরেক্টরিতে একটি কাস্টম ইউজার প্রোপার্টি তৈরি হয়। আপনার রিপোজিটরিতে প্রতিটি ব্যবহারকারীর জন্য এক্সটার্নাল আইডি রেকর্ড করতে এই প্রোপার্টিটি ব্যবহার করুন। প্রোপার্টিটির নামকরণ করা হয়েছে IDENTITY_SOURCE_ID _identity কনভেনশন ব্যবহার করে।

নিম্নলিখিত টেবিলে দুটি পরিচয় উৎস দেখানো হয়েছে, একটি SAM অ্যাকাউন্টের নাম (sAMAccountName) কে বহিরাগত আইডি হিসেবে রাখার জন্য এবং অন্যটি ব্যবহারকারীর আইডি (uid) কে বহিরাগত আইডি হিসেবে রাখার জন্য।

পরিচয় উৎস ব্যবহারকারীর সম্পত্তি বহিরাগত আইডি
আইডি১ আইডি১_আইডেন্টিটি sAMAccountName সম্পর্কে
আইডি২ আইডি২_আইডেন্টিটি ইউআইডি

আপনার এন্টারপ্রাইজের একজন ব্যবহারকারীকে উল্লেখ করার জন্য ব্যবহৃত প্রতিটি সম্ভাব্য বহিরাগত আইডির জন্য একটি পরিচয় উৎস তৈরি করুন।

নিম্নলিখিত টেবিলটি দেখায় যে কীভাবে একটি Google অ্যাকাউন্ট এবং দুটি বহিরাগত আইডি (id1_identity এবং id2_identity) সহ একজন ব্যবহারকারী এবং তাদের মানগুলি ক্লাউড ডিরেক্টরিতে প্রদর্শিত হয়:

ব্যবহারকারী ইমেইল আইডি১_আইডেন্টিটি আইডি২_আইডেন্টিটি
অ্যান ann@example.com সম্পর্কে উদাহরণ\অ্যান ১০০১

ইনডেক্সিংয়ের জন্য ACL তৈরি করার সময় আপনি তিনটি ভিন্ন আইডি (গুগল ইমেল, sAMAccountName, এবং uid) ব্যবহার করে একই ব্যবহারকারীকে রেফারেন্স করতে পারেন।

ব্যবহারকারীর ACL লিখুন

প্রদত্ত বহিরাগত আইডি ব্যবহার করে প্রিন্সিপাল তৈরি করতে getUserPrincpal() পদ্ধতি অথবা getGroupPrincipal() পদ্ধতি ব্যবহার করুন।

নিচের উদাহরণটি ফাইলের অনুমতিগুলি কীভাবে পুনরুদ্ধার করতে হয় তা দেখায়। এই অনুমতিগুলিতে ফাইলটিতে অ্যাক্সেস আছে এমন প্রতিটি ব্যবহারকারীর নাম অন্তর্ভুক্ত থাকে।

ফাইলপারমিশনস্যাম্পল.জাভা
/**
 * Sample for mapping permissions from a source repository to Cloud Search
 * ACLs. In this example, POSIX file permissions are used a the source
 * permissions.
 *
 * @return Acl
 * @throws IOException if unable to read file permissions
 */
static Acl mapPosixFilePermissionToCloudSearchAcl(Path pathToFile) throws IOException {
  // Id of the identity source for external user/group IDs. Shown here,
  // but may be omitted in the SDK as it is automatically applied
  // based on the `api.identitySourceId` configuration parameter.
  String identitySourceId = "abcdef12345";

  // Retrieve the file system permissions for the item being indexed.
  PosixFileAttributeView attributeView = Files.getFileAttributeView(
      pathToFile,
      PosixFileAttributeView.class,
      LinkOption.NOFOLLOW_LINKS);

  if (attributeView == null) {
    // Can't read, return empty ACl
    return new Acl.Builder().build();
  }

  PosixFileAttributes attrs = attributeView.readAttributes();
  // ...
}

নিম্নলিখিত কোড স্নিপেটটি দেখায় যে কীভাবে অ্যাট্রিবিউটগুলিতে সংরক্ষিত বহিরাগত আইডি ( externalUserName ) ব্যবহার করে মালিকানাধীন প্রিন্সিপাল তৈরি করতে হয়।

ফাইলপারমিশনস্যাম্পল.জাভা
// Owner, for search quality.
// Note that for principals the name is not the primary
// email address in Cloud Directory, but the local ID defined
// by the OS. Users and groups must be referred to by their
// external ID and mapped via an identity source.
List<Principal> owners = Collections.singletonList(
    Acl.getUserPrincipal(attrs.owner().getName(), identitySourceId)
);

অবশেষে, নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে প্রিন্সিপাল তৈরি করতে হয় যারা ফাইলের পাঠক।

ফাইলপারমিশনস্যাম্পল.জাভা
// List of users to grant access to
List<Principal> readers = new ArrayList<>();

// Add owner, group, others to readers list if permissions
// exist. For this example, other is mapped to everyone
// in the organization.
Set<PosixFilePermission> permissions = attrs.permissions();
if (permissions.contains(PosixFilePermission.OWNER_READ)) {
  readers.add(Acl.getUserPrincipal(attrs.owner().getName(), identitySourceId));
}
if (permissions.contains(PosixFilePermission.GROUP_READ)) {
  String externalGroupName = attrs.group().getName();
  Principal group = Acl.getGroupPrincipal(externalGroupName, identitySourceId);
  readers.add(group);
}
if (permissions.contains(PosixFilePermission.OTHERS_READ)) {
  Principal everyone = Acl.getCustomerPrincipal();
  readers.add(everyone);
}

একবার আপনার পাঠক এবং মালিকদের একটি তালিকা তৈরি হয়ে গেলে, আপনি ACL তৈরি করতে পারেন:

ফাইলপারমিশনস্যাম্পল.জাভা
// Build the Cloud Search ACL. Note that inheritance of permissions
// from parents is omitted. See `setInheritFrom()` and `setInheritanceType()`
// methods on the builder if required by your implementation.
Acl acl = new Acl.Builder()
    .setReaders(readers)
    .setOwners(owners)
    .build();

প্রিন্সিপাল তৈরি করার সময় অন্তর্নিহিত REST API আইডির জন্য প্যাটার্ন identitysources/ IDENTITY_SOURCE_ID /users/ EXTERNAL_ID ব্যবহার করে। পূর্ববর্তী টেবিলগুলি উল্লেখ করে, যদি আপনি Ann's id1_identity (SAMAccountName) দিয়ে একটি ACL তৈরি করেন, তাহলে আইডিটি নিম্নলিখিত সমাধান করবে:

identitysources/id1_identity/users/example/ann

এই সম্পূর্ণ আইডিটিকে ব্যবহারকারীর মধ্যবর্তী আইডি বলা হয় কারণ এটি ক্লাউড ডিরেক্টরিতে সংরক্ষিত বাহ্যিক আইডি এবং গুগল আইডিগুলির মধ্যে একটি সেতুবন্ধন প্রদান করে।

একটি সংগ্রহস্থলের জন্য ব্যবহৃত ACL গুলির মডেলিং সম্পর্কে আরও তথ্যের জন্য, ACL গুলি দেখুন।

ম্যাপ গ্রুপ

ACL-তে ব্যবহৃত গ্রুপগুলির জন্য পরিচয় উৎসগুলি একটি নেমস্পেস হিসেবেও কাজ করে। আপনি এই নেমস্পেস বৈশিষ্ট্যটি ব্যবহার করে এমন গ্রুপ তৈরি এবং ম্যাপ করতে পারেন যা শুধুমাত্র নিরাপত্তার উদ্দেশ্যে ব্যবহৃত হয় অথবা একটি সংগ্রহস্থলের স্থানীয়।

ক্লাউড আইডেন্টিটি গ্রুপ API ব্যবহার করে একটি গ্রুপ তৈরি করুন এবং সদস্যপদ পরিচালনা করুন। একটি আইডেন্টিটি সোর্সের সাথে গ্রুপটিকে সংযুক্ত করতে, গ্রুপ নেমস্পেস হিসেবে আইডেন্টিটি সোর্স রিসোর্সের নাম ব্যবহার করুন।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে ক্লাউড আইডেন্টিটি গ্রুপ API ব্যবহার করে একটি গ্রুপ তৈরি করতে হয়:

CreateGroupCommand.java সম্পর্কে
String namespace = "identitysources/" + idSource;
Group group = new Group()
    .setGroupKey(new EntityKey().setNamespace(namespace).setId(groupId))
    .setDescription("Demo group")
    .setDisplayName(groupName)
    .setLabels(Collections.singletonMap("system/groups/external", ""))
    .setParent(namespace);
try {
  CloudIdentity service = Utils.buildCloudIdentityService();
  Operation createOperation = service.groups().create(group).execute();

  if (createOperation.getDone()) {
    // Note: The response contains the data for a Group object, but as
    // individual fields. To convert to a Group instance, either populate
    // the fields individually or serialize & deserialize to/from JSON.
    //
    // Example:
    // String json = service.getJsonFactory().toString(response);
    // Group createdGroup =  service.getObjectParser()
    //     .parseAndClose(new StringReader(json), Group.class);
    System.out.printf("Group: %s\n",
        createOperation.getResponse().toString());
  } else {
    // Handle case where operation not yet complete, poll for
    // completion. API is currently synchronous and all operations return
    // as completed.
    // ...
  }
} catch (Exception e) {
  System.err.printf("Unable to create group: %s", e.getMessage());
  e.printStackTrace(System.err);
}

একটি ACL গ্রুপ তৈরি করুন

একটি গ্রুপ ACL তৈরি করতে, getGroupPrincipal() পদ্ধতি ব্যবহার করে একটি প্রদত্ত বহিরাগত ID ব্যবহার করে একটি গ্রুপ প্রিন্সিপাল তৈরি করুন। তারপর, Acl.Builder ক্লাস ব্যবহার করে ACL তৈরি করুন নিম্নরূপ:

ফাইলপারমিশনস্যাম্পল.জাভা
if (permissions.contains(PosixFilePermission.GROUP_READ)) {
  String externalGroupName = attrs.group().getName();
  Principal group = Acl.getGroupPrincipal(externalGroupName, identitySourceId);
  readers.add(group);
}

পরিচয় সংযোগকারী

ACL এবং ইনডেক্স আইটেম তৈরি করার জন্য আপনি এক্সটার্নাল, নন-গুগল আইডি ব্যবহার করতে পারেন, কিন্তু ব্যবহারকারীরা তাদের এক্সটার্নাল আইডি ক্লাউড ডিরেক্টরিতে একটি গুগল আইডিতে রূপান্তরিত না হওয়া পর্যন্ত অনুসন্ধানে আইটেম দেখতে পাবেন না। ক্লাউড ডিরেক্টরি ব্যবহারকারীর জন্য গুগল আইডি এবং এক্সটার্নাল আইডি উভয়ই জানে তা নিশ্চিত করার তিনটি উপায় রয়েছে:

  • অ্যাডমিন কনসোলের মাধ্যমে প্রতিটি ব্যবহারকারীর প্রোফাইল ম্যানুয়ালি আপডেট করুন। এই প্রক্রিয়াটি শুধুমাত্র কয়েকটি ব্যবহারকারীর প্রোফাইল ব্যবহার করে পরীক্ষা এবং প্রোটোটাইপিংয়ের জন্য সুপারিশ করা হয়।
  • ডিরেক্টরি API ব্যবহার করে বাহ্যিক আইডিগুলিকে গুগল আইডিতে ম্যাপ করুন। যারা আইডেন্টিটি কানেক্টর SDK ব্যবহার করতে পারেন না তাদের জন্য এই প্রক্রিয়াটি সুপারিশ করা হয়।
  • আইডেন্টিটি কানেক্টর SDK ব্যবহার করে একটি আইডেন্টিটি কানেক্টর তৈরি করুন । এই SDK আইডি ম্যাপ করার জন্য ডিরেক্টরি API- এর ব্যবহারকে সহজ করে তোলে।

আইডেন্টিটি কানেক্টর হল এমন প্রোগ্রাম যা এন্টারপ্রাইজ আইডেন্টিটি (ব্যবহারকারী এবং গোষ্ঠী) থেকে গুগল ক্লাউড সার্চ দ্বারা ব্যবহৃত অভ্যন্তরীণ গুগল আইডেন্টিটিতে বহিরাগত আইডি ম্যাপ করার জন্য ব্যবহৃত হয়। যদি আপনাকে একটি আইডেন্টিটি সোর্স তৈরি করতে হয়, তাহলে আপনাকে অবশ্যই একটি আইডেন্টিটি কানেক্টর তৈরি করতে হবে।

গুগল ক্লাউড ডিরেক্টরি সিঙ্ক (GCDS) হল একটি আইডেন্টিটি কানেক্টরের উদাহরণ। এই আইডেন্টিটি কানেক্টরটি মাইক্রোসফটের অ্যাক্টিভ ডিরেক্টরি থেকে ক্লাউড ডিরেক্টরিতে ব্যবহারকারী এবং গোষ্ঠীর তথ্য ম্যাপ করে, সাথে সাথে অন্যান্য সিস্টেমে তাদের পরিচয় উপস্থাপন করতে পারে এমন ব্যবহারকারীর বৈশিষ্ট্যও ম্যাপ করে।

REST API ব্যবহার করে পরিচয় সিঙ্ক করুন

REST API ব্যবহার করে পরিচয় সিঙ্ক করতে update পদ্ধতি ব্যবহার করুন।

পরিচয় পুনঃম্যাপ করা হচ্ছে

একটি আইটেমের পরিচয় অন্য একটি পরিচয়ের সাথে রিম্যাপ করার পরে, নতুন পরিচয়টি ধরে রাখার জন্য আপনাকে আইটেমগুলিকে পুনরায় সূচী করতে হবে। উদাহরণস্বরূপ,

  • যদি আপনি কোনও ব্যবহারকারীর কাছ থেকে কোনও ম্যাপিং সরিয়ে ফেলার চেষ্টা করেন অথবা অন্য কোনও ব্যবহারকারীর কাছে এটি পুনরায় ম্যাপ করার চেষ্টা করেন, তবে আপনি পুনরায় ইনডেক্স না করা পর্যন্ত মূল ম্যাপিংটি এখনও সংরক্ষিত থাকবে।
  • যদি আপনি একটি আইটেম ACL-তে উপস্থিত একটি ম্যাপ করা গ্রুপ মুছে ফেলেন এবং তারপর একই groupKey দিয়ে একটি নতুন গ্রুপ তৈরি করেন, তাহলে আইটেমটি পুনরায় ইনডেক্স না করা পর্যন্ত নতুন গ্রুপটি আইটেমটিতে অ্যাক্সেস প্রদান করবে না।