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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

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

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

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

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

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

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

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

مثال على النشر
الشكل 1. مثال على النشر في المؤسسة باستخدام أنواع مختلفة من الهويات.

يحدد المستودع 1 المستخدم باستخدام عنوان البريد الإلكتروني الذي تم تأكيده باستخدام SAML. نظرًا لأن المستودع رقم 1 لديه معرفة بعنوان البريد الإلكتروني الأساسي للمستخدم في Google Workspace أو دليل السحابة الإلكترونية، لا يلزم وجود مصدر للهوية.

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

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

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

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

IDENTITY_SOURCE_ID_identity
.

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

مصدر الهوية خاصيّة المستخدم المعرّف الخارجي
المعرّف 1 الهوية_1 sAMAccountName
رقم التعريف 2 المعرّف2 المعرّف الفريد

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

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

user بريد إلكتروني الهوية_1 المعرّف2
منى ann@example.com مثال\ann 1001

يمكنك الإشارة إلى المستخدم نفسه باستخدام أرقام التعريف الثلاثة المختلفة، (البريد الإلكتروني من Google، وsAMAccountName، وuid) عند تشكيل قوائم ACL للفهرسة.

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

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

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

FilePermissionSample.جافا
/**
 * 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.جافا
// 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.جافا
// 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);
}

بعد إنشاء قائمة بالقراء والمالكين، يمكنك إنشاء قائمة التحكم بالوصول:

FilePermissionSample.جافا
// 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 المستخدمة في أحد المستودعات، راجع قوائم ACL.

مجموعات الخريطة

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

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

يعرض مقتطف الرمز التالي كيفية إنشاء مجموعة باستخدام واجهة برمجة تطبيقات مجموعات Cloud Identity:

إنشاء مجموعة أوامر
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.جافا
if (permissions.contains(PosixFilePermission.GROUP_READ)) {
  String externalGroupName = attrs.group().getName();
  Principal group = Acl.getGroupPrincipal(externalGroupName, identitySourceId);
  readers.add(group);
}

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

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

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

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

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

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

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

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

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