مزامنة أنظمة هوية مختلفة

يستند التحكُّم في الوصول في Google Cloud Search إلى حساب المستخدم على Google. عند فهرسة المحتوى، يجب أن يتم حل جميع قوائم التحكم في الوصول (ACLs) للعناصر إلى مستخدم Google صالح أو أرقام تعريف المجموعات (عناوين البريد الإلكتروني).

في كثير من الحالات، لا تكون للمستودع معرفة مباشرة بشركة Google الحسابات. بدلاً من ذلك، قد يتم تمثيل المستخدمين من خلال الحسابات المحلية أو استخدام تسجيل الدخول الموحّد مع موفر هوية ورقم تعريف، من عنوان البريد الإلكتروني للمستخدم، لتحديد كل حساب. ويسمى هذا المعرف المعرّف الخارجي.

تساعد مصادر الهوية التي تم إنشاؤها باستخدام "وحدة تحكُّم المشرف" في سد هذه الفجوة بين أنظمة الهوية من خلال:

يمكنك استخدام مصادر الهوية في الحالتَين التاليتَين:

  • ليس لدى المستودع معرفة بعنوان البريد الإلكتروني الرئيسي المستخدم في Google Workspace أو دليل Google Cloud.
  • يحدد المستودع مجموعات التحكم في الوصول التي لا تتوافق إلى المجموعات المستندة إلى البريد الإلكتروني في Google Workspace

مصادر الهوية تحسِّن كفاءة الفهرسة من خلال فصل الفهرسة من عملية تحديد الهوية. يتيح لك فصل الاقتران هذا تأجيل البحث عن المستخدم عند إنشاء قوائم التحكم في الوصول وفهرسة العناصر.

مثال على عملية النشر

يوضح الشكل 1 مثالاً لعملية نشر يتم من خلالها على الأجهزة داخل الشركة المستودعات التي تستخدمها المؤسسات يستخدم كل مستودع نوعًا مختلفًا المعرّف الخارجي للإشارة إلى المستخدمين.

مثال على عملية النشر
الشكل 1. مثال على نشر مؤسسة مع أنواع الهوية.

يحدد المستودع 1 المستخدم باستخدام عنوان البريد الإلكتروني الذي تم تأكيده باستخدام SAML: لأنّ يعرف المستودع 1 بعنوان البريد الإلكتروني الرئيسي للمستخدم في Google Workspace أو دليل Cloud، ولا حاجة إلى مصدر هوية.

يتكامل المستودع 2 مباشرةً مع دليل داخل المؤسسة يحدّد هوية المستخدم من خلال سمة sAMAccountName. لأنّ المستودع 2 تستخدم سمة sAMAccountName كمعرّف خارجي، فسيتم تحديد مصدر الهوية احتاجت.

إنشاء مصدر هويات

إذا كنت بحاجة إلى مصدر هوية، يُرجى الاطّلاع على مقالة ربط هويات المستخدمين في Cloud Search.

يجب إنشاء مصدر هوية قبل إنشاء موصِّل محتوى للأسباب التالية: ستحتاج إلى معرّف مصدر الهويات لإنشاء قوائم التحكم بالوصول (ACLs) وبيانات الفهرس. كما أسلفنا سابقًا، يؤدي إنشاء مصدر هوية إلى إنشاء خاصيّة مستخدِم مخصّصة في دليل السحابة الإلكترونية. استخدِم هذا الموقع لتسجيل رقم التعريف الخارجي لكل المستخدم في مستودعك. وتتم تسمية الخاصية باستخدام الاصطلاح IDENTITY_SOURCE_ID_identity.

يعرض الجدول التالي مصدرَي هوية، أحدهما يتضمّن أسماء حسابات SAM (sAMAccountName) كمعرّفات خارجية، ورقم واحد للاحتفاظ بأرقام تعريف المستخدمين (uid) كمعرّفات خارجية.

مصدر الهوية خاصيّة المستخدم المعرّف الخارجي
id1 id1_identity sAMAccountName
id2 id2_identity رقم uid

إنشاء مصدر هوية لكل رقم تعريف خارجي محتمل يتم استخدامه الرجوع إلى مستخدم في مؤسستك.

يوضِّح الجدول التالي كيف يمكن لمستخدم لديه حساب على Google ورقما تعريف خارجيان. (id1_identity وid2_identity) وقيمهما في دليل السحابة الإلكترونية:

المستخدم بريد إلكتروني id1_identity id2_identity
منى ann@example.com مثال\ann 1001

يمكنك الإحالة إلى نفس المستخدم باستخدام ثلاثة معرّفات مختلفة، (البريد الإلكتروني لـ Google وsAMAccountName وuid) عند إنشاء قوائم التحكم بالوصول (ACLs) للفهرسة.

كتابة قوائم ACL للمستخدم

يمكنك استخدام getUserPrincpal() الطريقة أو getGroupPrincipal() لإنشاء عناصر رئيسية باستخدام معرّف خارجي مُقدّم.

يوضح المثال التالي كيفية استرداد أذونات الملفات. هذه تتضمن الأذونات اسم كل مستخدم لديه حق الوصول إلى الملف.

FilePermissionSample.java
/**
 * 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) المخزّن في السمات.

FilePermissionSample.java
// 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)
);

أخيرًا، يوضح مقتطف الرمز التالي كيفية إنشاء مبادئ توجيهية هم قراء الملف.

FilePermissionSample.java
// 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:

FilePermissionSample.java
// 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 الأساسية النمط identitysources/IDENTITY_SOURCE_ID/users/EXTERNAL_ID للمعرف عند إنشاء المبادئ الرئيسية. بالعودة إلى الجداول السابقة، إذا أنشأت قائمة التحكم بالوصول (ACL) باستخدام id1_identity لـ آن (SAMAccountName)، فسيصبح رقم التعريف التحويل إلى:

identitysources/id1_identity/users/example/ann

ويُعرف رقم التعريف هذا بالكامل باسم رقم التعريف المتوسط للمستخدم. لأنه يوفر جسرًا بين المعرّف الخارجي وأرقام تعريف Google المخزنة مع دليل السحابة الإلكترونية.

للحصول على مزيد من المعلومات حول نمذجة قوائم التحكم بالوصول المستخدمة للمستودع، راجع قوائم ACL:

مجموعات الخرائط

تعمل مصادر الهوية أيضًا كمساحة اسم للمجموعات المستخدمة في قوائم التحكم بالوصول. يمكنك استخدام ميزة مساحة الاسم هذه لإنشاء وربط المجموعات التي تُستخدم لأغراض الأمان فقط أو تكون محلية في المستودع.

استخدام Cloud Identity Groups API لإنشاء مجموعة وإدارة العضويات. لربط المجموعة بـ مصدر الهويات، يمكنك استخدام اسم مورد مصدر الهويات على أنه مساحة اسم المجموعة.

يوضح مقتطف الرمز التالي كيفية إنشاء مجموعة باستخدام واجهة Cloud Identity Groups 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() لإنشاء مدير مجموعة باستخدام معرّف خارجي مُقدّم. بعد ذلك، قم ببناء باستخدام قائمة التحكم بالوصول (ACL) Acl.Builder على النحو التالي:

FilePermissionSample.java
if (permissions.contains(PosixFilePermission.GROUP_READ)) {
  String externalGroupName = attrs.group().getName();
  Principal group = Acl.getGroupPrincipal(externalGroupName, identitySourceId);
  readers.add(group);
}

موصلات الهوية

وعلى الرغم من أنه يمكنك استخدام معرّفات خارجية غير تابعة لـ Google لإنشاء قوائم التحكم بالوصول (ACLs) وعناصر الفهرسة، لا يمكن للمستخدمين الاطّلاع على العناصر في عملية بحث حتى تُصدِر معرّفاتهم الخارجية رسالة رقم التعريف في دليل السحابة الإلكترونية. هناك ثلاث طرق لضمان يعرف دليل السحابة الإلكترونية كلاً من معرِّف Google والمعرِّفات الخارجية للمستخدم:

موصِّلات الهوية هي برامج تُستخدَم لربط المعرّفات الخارجية من المؤسسة الهويات (المستخدمين والمجموعات) إلى هويات Google الداخلية التي تستخدمها Google Cloud Search. إذا كان عليك إنشاء مصدر هويات، عليك لإنشاء موصِّل هويات.

تم تفعيل أداة مزامنة دليل Google Cloud (GCP) مثال لموصل الهوية. يربط موصل الهوية هذا المستخدم معلومات المجموعة من دليل Microsoft النشط إلى دليل السحابة مع سمات المستخدم التي قد تمثل هويته في الأنظمة الأخرى.

مزامنة الهويات باستخدام واجهة برمجة تطبيقات REST

يمكنك استخدام الطريقة update لمزامنة الهويات باستخدام واجهة برمجة تطبيقات REST.

إعادة تحديد الهويات

بعد إعادة ربط هوية أحد العناصر بهوية أخرى، يجب إعادة فهرسة العناصر. لكي يتم الاحتفاظ بالهوية الجديدة. على سبيل المثال،

  • إذا حاولت إزالة تعيين من مستخدم ما أو إعادة تعيينه إلى مستخدم آخر، فإن إلى أن تتم إعادة الفهرسة.
  • في حال حذف مجموعة مرتبطة موجودة في قائمة عناصر التحكم بالوصول، ثم إنشاء مجموعة جديدة تستخدم groupKey نفسها، لا تتيح المجموعة الجديدة الوصول إلى إلى أن تتم إعادة فهرسة العنصر.