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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

أنشئ مصدر هوية لكل نوع من المعرّفات الخارجية المستخدَمة في مؤسستك.

يوضّح هذا الجدول كيف يظهر مستخدم لديه حساب Google ومعرّفان خارجيان في "دليل السحابة":

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

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

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

استخدِم getUserPrincipal() أو 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 API النمط identitysources/IDENTITY_SOURCE_ID/users/EXTERNAL_ID. يتطابق id1_identity الخاص بالمستخدمة "أنغام" مع identitysources/id1_identity/users/example/ann. هذا هو المعرّف الوسيط للمستخدم.

لمزيد من المعلومات حول تصميم قوائم التحكم بالوصول في المستودع، يُرجى الاطّلاع على قوائم التحكم بالوصول.

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

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

استخدِم 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 للمجموعة

استخدِم getGroupPrincipal() لإنشاء كيان أساسي للمجموعة باستخدام معرّف خارجي، ثم أنشئ قائمة التحكّم بالوصول:

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

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

لا يمكن للمستخدمين رؤية العناصر في نتائج البحث إلى أن يتم ربط معرّفاتهم الخارجية بمعرّف Google في "دليل Cloud". يمكنك التأكّد من ذلك بثلاث طرق:

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

أداة مزامنة دليل Google Cloud (GCDS) هي مثال على أداة ربط الهوية. وهي تربط معلومات المستخدمين والمجموعات من Active Directory بـ &quot;دليل Cloud&quot;.

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

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

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

بعد إعادة ربط هوية، يجب إعادة فهرسة العناصر حتى يصبح التغيير ساريًا.

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