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

يستند التحكّم في الوصول إلى Google Cloud Search إلى حساب المستخدم على Google. عند فهرسة المحتوى، يجب أن تشتمل جميع قوائم التحكم في الوصول (ACL) على عناصر على معرّف مستخدم أو مجموعة 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 وفهرسة البيانات. كما ذكرنا سابقًا، يؤدي إنشاء مصدر هوية إلى إنشاء خاصيّة مستخدم مخصّصة في "دليل السحابة الإلكترونية". يمكنك استخدام هذا الموقع لتسجيل المعرّف الخارجي لكل مستخدم في المستودع. تتم تسمية السمة باستخدام اصطلاح IDENTITY_SOURCE_ID_identity.

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

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

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

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

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

identitysources/id1_identity/users/example/ann

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

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

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

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

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

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

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

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

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