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

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

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

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

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

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

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

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

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

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

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

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

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

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

يجب إنشاء مصدر هوية قبل إنشاء موصل محتوى لأنك ستحتاج إلى معرّف مصدر الهوية لإنشاء قوائم التحكم بالوصول وفهرسة البيانات. كما ذكرنا سابقًا، يؤدي إنشاء مصدر هوية إلى إنشاء خاصيّة مستخدم مخصّصة أيضًا في دليل السحابة الإلكترونية. استخدِم هذه السمة لتسجيل رقم التعريف الخارجي لكل مستخدم في مستودعك. تتم تسمية السمة باستخدام الصيغة 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) للمستخدم

استخدِم الطريقة 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);
}

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

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 المخزّنة في دليل السحابة الإلكترونية.

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

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

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

يمكنك استخدام 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.Builder على النحو التالي:

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

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

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

  • تحديث كل ملف شخصي فردي لكل مستخدم يدويًا من خلال وحدة تحكم المشرف لا يُنصح بهذه العملية إلا للاختبار وإنشاء نماذج أولية باستخدام عدد قليل من الملفات الشخصية للمستخدمين.
  • ربط أرقام التعريف الخارجية بأرقام تعريف Google باستخدام Directory API يُنصَح بهذه العملية لأولئك الذين لا يمكنهم استخدام Identity Connector SDK.
  • أنشئ موصِّل هوية باستخدام حزمة SDK لموصّل الهوية. تعمل حزمة تطوير البرامج (SDK) هذه على تبسيط استخدام واجهة برمجة تطبيقات الدليل لربط أرقام التعريف.

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

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

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

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

إعادة ربط الهويات

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

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