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

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

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

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

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

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

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

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

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

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

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

يتم دمج المستودع 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) وقيمهما في Cloud Directory:

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

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

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

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

identitysources/id1_identity/users/example/ann

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

لمزيد من المعلومات عن وضع نماذج لجداول التحكم في الوصول المستخدَمة في مستودع، اطّلِع على جداول التحكم في الوصول.

مجموعات الربط

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

استخدِم 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);
}

إنشاء قائمة تحكم بالوصول إلى مجموعة

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

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

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

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

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

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

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

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

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