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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

IDENTITY_SOURCE_ID_identity
.

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

مصدر الهوية خاصيّة المستخدم رقم تعريف خارجي
المعرّف 1 id1_identity sAMAccountName
رقم التعريف 2 id2_identity معرِّف مستخدم فريد (UID)

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

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

المستخدم email id1_identity id2_identity
منى ann@example.com مثال\ann 1001

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

كتابة قوائم 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 في Ann's (SAMAccountName)، سيحل رقم التعريف في الحالات التالية:

identitysources/id1_identity/users/example/ann

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

لمزيد من المعلومات حول وضع نماذج لبروتوكول ACL المستخدَمة في المستودع، راجِع قوائم 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 لإنشاء قوائم ACL وفهرسة العناصر، يتعذّر على المستخدمين الاطّلاع على العناصر في عملية البحث حتى يتم حلّ معرّفاتهم الخارجية إلى Google ID في دليل السحابة الإلكترونية. هناك ثلاث طرق لضمان تعرُّف "دليل السحابة الإلكترونية" على معرّف Google والمعرّفات الخارجية للمستخدم:

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

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

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

مزامنة الهويات باستخدام REST API

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

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

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

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