Умный поиск контента Adobe Experience Manager с использованием Amazon Kendra

Умный поиск контента Adobe Experience Manager с Amazon Kendra

Amazon Kendra – это интеллектуальный сервис поиска, работающий на основе машинного обучения (ML). С Amazon Kendra вы можете легко агрегировать контент из различных хранилищ контента в индекс, который позволяет быстро искать все данные вашей организации и находить самый точный ответ. Adobe Experience Manager (AEM) – это система управления контентом, используемая для создания контента веб-сайтов или мобильных приложений. Многие организации используют Adobe Experience Manager (On-Premise) или Adobe Experience Manager (Cloud Service) в качестве платформы управления контентом. Пользователям предприятий необходимо иметь возможность легко и безопасно искать точные ответы в контенте из нескольких источников данных в предприятии, включая AEM, включая контент, такой как ресурсы и страницы.

Клиенты Amazon Kendra теперь могут использовать коннектор Amazon Kendra AEM для индексации страниц и ресурсов из AEM. Amazon Kendra поддерживает экземпляры Cloud Service авторов AEM и экземпляры публикации и авторов AEM On-Premise. Вы можете индексировать контент AEM и фильтровать типы контента, которые вы хотите проиндексировать с помощью коннектора Amazon Kendra AEM On-Premise или Cloud Service, и искать ваши данные из AEM с помощью интеллектуального поиска Amazon Kendra.

В этом посте показано, как настроить коннектор Amazon Kendra AEM для индексации вашего контента и поиска ресурсов и страниц AEM. Коннектор также обрабатывает информацию о списке контроля доступа (ACL) для каждого документа. Информация о списке контроля доступа используется для отображения результатов поиска, отфильтрованных по тому, к каким документам у пользователя есть доступ.

Обзор решения

В нашем решении мы настраиваем AEM в качестве источника данных для индекса поиска Amazon Kendra с использованием коннектора Amazon Kendra AEM. Исходя из конфигурации, когда источник данных синхронизируется, коннектор обходит и индексирует весь контент из AEM, созданный на определенную дату или ранее. Коннектор также индексирует информацию о списке контроля доступа (ACL) для каждого сообщения и документа. При включенном контроле доступа или фильтрации контекста пользователя результаты поиска запроса, сделанного пользователем, включают только результаты из тех документов, которые пользователь имеет право читать.

Коннектор Amazon Kendra AEM может интегрироваться с AWS IAM Identity Center (преемник AWS Single Sign-On). Сначала вам необходимо включить IAM Identity Center и создать организацию, чтобы синхронизировать пользователей и группы из вашего активного каталога. Коннектор будет использовать имя пользователя и поиск группы для контекста пользователя запросов поиска.

Предварительные требования

Для того чтобы попробовать коннектор Amazon Kendra для AEM, используя этот пост в качестве справочного руководства, вам понадобятся следующие материалы:

  • Учетная запись AWS с привилегиями для создания ролей и политик управления доступом AWS Identity and Access Management (IAM). Дополнительные сведения см. в Обзор управления доступом: Разрешения и политики.
  • Базовые знания AWS и рабочие знания AEM. Дополнительные сведения см. в Руководстве пользователя и безопасности.
  • Настройка AEM On-Premise (версия 6.5 и выше). Мы храним имя пользователя и пароль администратора в AWS Secrets Manager.

Настройка OAuth2.0

Если вы используете AEM On-Premise, настройте OAuth2.0 для создания SSL-сертификата, чтобы завершить настройку коннектора Amazon Kendra AEM.

Реализация сервера Adobe Granite OAuth 2.0 (com.adobe.granite.oauth.server) обеспечивает поддержку функциональности сервера OAuth 2.0 в AEM.

Включение обработчика аутентификации сервера OAuth

По умолчанию AEM не включает обработчик аутентификации сервера OAuth. Чтобы его включить, выполните следующие шаги:

  1. Для запуска локального экземпляра AEM перейдите по адресу http://localhost:<порт>/system/console/configMgr/com.adobe.granite.oauth.server.auth.impl.OAuth2ServerAuthenticationHandler
  2. Измените значение jaas.ranking.name на 1100 в разделе Обработчик аутентификации сервера Adobe Granite OAuth и сохраните конфигурацию.

Обработчик аутентификации сервера OAuth теперь включен.

Зарегистрируйте клиента OAuth

Каждому внешнему приложению требуется регистрация в качестве клиента OAuth в AEM. Чтобы зарегистрировать клиента OAuth, выполните следующие шаги:

  1. На стартовой странице AEM выберите Безопасность и Клиент OAuth.
  2. Введите имя и перенаправьте URI.
  3. Выберите Сохранить.

После успешной авторизации приложения сервер OAuth перенаправит вас обратно в приложение с авторизационным кодом на настроенный URL-адрес перенаправления.

  1. Скопируйте и сохраните идентификатор клиента и секрет клиента.

Сервер OAuth Granite поддерживает следующие типы предоставления:

  • Код авторизации
  • Токен обновления
  • Токен-носитель JWT

В этом сообщении мы используем OAuth2.0 с типом предоставления JWT.

Токен-носитель JWT в основном используется для интеграции сервер-сервер. Это поможет нам включить интеграцию сервер-сервер без взаимодействия с владельцем ресурса, например, для получения или загрузки файлов без взаимодействия с пользователем.

Создать токен JWT

Выполните следующие шаги для создания токена JWT:

  1. Перейдите на localhost и клиента OAuth.
  2. Выберите Загрузить закрытый ключ.
  3. Выберите Загрузить.

Создать открытый сертификат

Теперь создайте открытый сертификат из загруженного закрытого ключа, выполните следующую команду и введите пароль от закрытого ключа.

Используйте команду openssl для генерации закрытого ключа:

>openssl pkcs12 -in store.p12 -out store.crt.pem -clcerts -nokeys

Извлеките закрытый ключ:

openssl pkcs12 -in store.p12 -passin pass:notasecret -nocerts -nodes -out store.private.key.txt

Убедитесь, что у вас установлен openssl и добавлен в переменную среды заранее.

Перед использованием закрытого ключа при настройке источника данных Amazon Kendra убедитесь, что вы не используете или не копируете “-----BEGIN PRIVATE KEY-----” и “-----END PRIVATE KEY-----“ в коде. Кроме того, удалите любые пустые пространства из закрытого ключа.

Используйте сгенерированный ClientId, ClientSecret и закрытый ключ для настройки источника данных Amazon Kendra AEM.

Для регистрации клиента OAuth перейдите по адресу http://localhost:<port>/libs/granite/oauth/content/clients.html.

Настройка SSL

Выполните следующие шаги для настройки SSL:

  1. Создайте ключ:
openssl genrsa -aes256 -out <keyFileName>.key 4096
  1. Зашифруйте ключ:
openssl req -sha256 -new -key <keyFileName>.key -out <keyFileName>.csr -subj '/CN=<keyFileName>'
  1. Подпишите ключ:
openssl x509 -req -days 365 -in <keyFileName>.csr -signkey <keyFileName>.key -out <keyFileName>.crt
  1. Кодируйте закрытый ключ в формат der:
openssl pkcs8 -topk8 -inform PEM -outform DER -in <keyFileName>.key -out <keyFileName>.der -nocrypt

Будет сгенерировано четыре файла с именами, начинающимися с <keyFileName>. В последующих шагах мы будем использовать <keyFileName>.crt и <keyFileName>.der.

  1. Далее войдите в AEM по адресу http://localhost:<port>/aem/start.html.
  2. Выберите Инструменты, Безопасность и Настройка SSL.
  3. В разделе Хранилище учетных данных введите пароль для хранилища ключей и доверительного хранилища.

  1. В разделе Ключи и сертификаты укажите файл .der для Закрытого ключа и файл .crt для Сертификата.

  1. В следующем разделе введите домен (localhost) и оставьте порт без изменений.
  2. Выберите Готово.

AEM откроется на указанном порту. Например, https://localhost:8443.

  1. Войдите в AEM с использованием протокола HTTPS и загрузите сертификат в браузере, используя кнопку блокировки/защиты, экспортируйте сертификат и назовите его privateKey.crt.

Теперь импортируем сертификат в путь хранилища ключей с помощью инструмента keytool.

  1. Откройте терминал и перейдите в папку, где находится файл privateKey.crt, и выполните следующую команду:
keytool -import -trustcacerts -keystore <JAVA_HOME>/lib/security/cacerts -storepass changeit -noprompt -alias yourAliasName -file privateKey.crt

Не забудьте открыть порты 8443 и 80 в настройках вашего брандмауэра.

  1. Добавьте сертификат privateKey.crt в бакет Amazon Simple Storage Service (Amazon S3).

Настройка источника данных с использованием коннектора Amazon Kendra для AEM

Вы можете использовать существующий индекс или создать новый индекс для индексации документов из AEM с помощью коннектора AEM. Затем выполните следующие шаги. Дополнительную информацию см. в Руководстве разработчика Amazon Kendra.

  1. На консоли Amazon Kendra откройте свой индекс и выберите в панели навигации пункт Источники данных.
  2. Выберите Добавить источник данных.
  3. В разделе Adobe Experience Manager выберите Добавить коннектор.

  1. В разделе Укажите детали источника данных, введите имя и, по желанию, описание, затем выберите Next.

  1. В разделе Определите доступ и безопасность, выберите тип источника AEM On-Premise или AEM как облачный сервис и введите URL-адрес хоста AEM. Вы можете найти URL-адрес в настройках AEM.

Если вы используете AEM On-Premise, введите URL-адрес хоста сервера AEM On-Premise. Затем выберите Обзор S3 и выберите бакет S3 с SSL-сертификатом.

Если вы используете AEM как облачный сервис, вы можете использовать URL автора https://author-xxxxxx-xxxxxxx.adobeaemcloud.com.

  1. В разделе Аутентификация у вас есть два варианта: Базовая аутентификация и Аутентификация OAuth 2.0.

Если вы выбираете Базовую аутентификацию, для Секрета AWS Secrets Manager выберите Создать и добавить новый секрет. Затем введите имя для секрета, имя пользователя сайта AEM и пароль. Пользователь должен иметь права администратора или быть администратором.

Если вы выбираете Аутентификацию OAuth 2.0, для Секрета AWS Secrets Manager выберите Создать и добавить новый секрет. Введите имя для секрета, идентификатор клиента, секрет клиента и закрытый ключ. Если вы используете AEM как облачный сервис, введите имя для секрета, идентификатор клиента, секрет клиента, закрытый ключ, идентификатор организации, технический идентификатор учетной записи и хост Adobe Identity Management System (IMS).

  1. Выберите Сохранить или Добавить секрет.
  2. В разделе Настройка VPC и группы безопасности вы можете по желанию выбрать использование VPC. Если да, вы должны добавить подсети и группы безопасности VPC.
  3. В разделе Краулер идентификатора выберите опцию краулинга информации об идентификации пользователей и групп с доступом к определенным документам и сохранения этой информации в главном хранилище Amazon Kendra или хранилище идентификации.

Это полезно для фильтрации результатов поиска на основе пользователя или их группы, имеющих доступ к документам.

  1. В разделе Роль IAM создайте новую роль IAM или выберите существующую роль IAM для доступа к учетным данным репозитория и индексации контента.
  2. Выберите Next.

  1. В разделе Настройка параметров синхронизации укажите информацию о своей области синхронизации.

Вы можете включить файлы, которые должны быть просканированы, используя шаблоны включения, или исключить их, используя шаблоны исключения. Когда вы указываете шаблон в разделе Шаблоны включения, будут просканированы только документы, соответствующие этому шаблону. Когда вы указываете шаблон в разделе Шаблоны исключения, документы, соответствующие этому шаблону, не будут просканированы.

  1. Если вы используете AEM On-Premise, и часовой пояс вашего сервера отличается от часового пояса коннектора AEM Amazon Kendra или индекса, вы можете указать часовой пояс сервера для согласования с коннектором AEM или индексом в разделе ID часового пояса.

Часовой пояс по умолчанию для AEM On-Premise – часовой пояс коннектора AEM Amazon Kendra или индекса. Часовой пояс по умолчанию для AEM в качестве облачного сервиса – время по Гринвичу.

  1. Выберите режим Синхронизации (для этого поста выберите Полная синхронизация).

С опцией Полная синхронизация при каждом запуске синхронизации Amazon Kendra будет просматривать все документы и включать каждый документ даже в случае, если он уже был включен ранее. Полное обновление позволяет сбросить индекс Amazon Kendra без необходимости удаления и создания нового источника данных. Если вы выберете Синхронизацию нового или измененного контента или Синхронизацию нового, измененного или удаленного контента, при каждом запуске синхронизации будут обрабатываться только объекты, добавленные, измененные или удаленные с момента последнего просмотра. Приращивающие просмотры могут помочь сократить время выполнения и стоимость при использовании наборов данных, в которых новые объекты добавляются в существующие источники данных регулярно.

  1. Для Расписания запуска выберите Запустить по требованию.
  2. Выберите Далее.

  1. В разделе Настройка сопоставления полей вы можете по желанию выбрать из сгенерированных Amazon Kendra полей источника данных поля, которые вы хотите сопоставить с индексом. Чтобы добавить пользовательские поля источника данных, выберите Добавить поле для создания имени поля индекса, с которым будет сопоставлено и указывается тип данных поля. Укажите имя поля AEM, имя поля индекса и тип данных.

  1. Выберите Далее.

  1. Проверьте ваши настройки и выберите Добавить источник данных.

  1. После добавления источника данных выберите Источники данных в панели навигации, выберите вновь добавленный источник данных и выберите Синхронизировать сейчас, чтобы начать синхронизацию источника данных с индексом Amazon Kendra.

Процесс синхронизации будет зависеть от объема данных, которые требуется обработать.

Теперь давайте включим контроль доступа для индекса Amazon Kendra.

  1. В боковой панели навигации выберите свой индекс.
  2. На вкладке Контроль доступа пользователей выберите Изменить настройки.

  1. Измените настройки, чтобы они выглядели как на следующем снимке экрана.
  2. Выберите Далее.

  1. Выберите Обновить.

Подождите несколько минут, пока индекс будет обновлен в соответствии с внесенными изменениями. Теперь давайте посмотрим, как выполнить интеллектуальный поиск с помощью Amazon Kendra.

Выполнение интеллектуального поиска с помощью Amazon Kendra

Перед тем, как вы попробуете выполнить поиск в консоли Amazon Kendra или с использованием API, убедитесь, что синхронизация источника данных завершена. Чтобы проверить это, просмотрите источники данных и убедитесь, что последняя синхронизация была успешной.

Теперь мы готовы выполнить поиск в нашем индексе.

  1. На консоли Amazon Kendra перейдите к индексу и выберите Поиск проиндексированного контента в боковой панели навигации.
  2. Давайте выполним запрос к индексу, используя фразу “Каковы последствия сибирской жары?”, не указывая токен доступа.

На основе настроек контроля доступа в индексе требуется действующий токен доступа для доступа к контенту, который пользователь имеет право видеть; поэтому, когда мы используем этот поисковый запрос без указания имени пользователя или группы, результаты не возвращаются.

  1. Затем выберите Применить токен и установите имя пользователя или идентификатор электронной почты пользователя (например, user-dev@company.com), имеющего доступ к контенту AEM.

При обработке источника данных AEM подключаемый модуль задает идентификатор электронной почты пользователя в качестве принципала. Если идентификатор электронной почты пользователя недоступен, тогда в качестве принципала будет использовано имя пользователя.

На следующем снимке экрана показан пример с идентификатором электронной почты пользователя user-dev-2@amazon.com в качестве принципала.

В следующем примере в качестве принципала используется имя пользователя user-dev-2.

  1. Теперь попробуем выполнить поиск в том же контенте с помощью токена пользователя user-dev@amazon.com, у которого нет разрешения на просмотр этого конкретного документа, который появился в предыдущих результатах запроса.

Это подтверждает, что документы, полученные через коннектор Amazon Kendra для AEM, соблюдают установленные внутри AEM ACL и эти же ACL применяются к результатам поиска на основе примененного токена.

Очистка

Для того чтобы избежать будущих затрат, удалите ресурсы, созданные в рамках данного решения. Если вы создали новый индекс Amazon Kendra в процессе тестирования данного решения, удалите его. Если вы только добавили новый источник данных с помощью коннектора Amazon Kendra для AEM, удалите этот источник данных.

Заключение

С помощью коннектора Amazon Kendra для Adobe Experience Manager ваша организация может выполнять поиск по страницам и ресурсам безопасно с использованием интеллектуального поиска, основанного на Amazon Kendra.

Для получения дополнительной информации о коннекторе Amazon Kendra для AEM обратитесь к Adobe Experience Manager.

Для получения дополнительной информации о других встроенных коннекторах Amazon Kendra для популярных источников данных обратитесь к Amazon Kendra native connectors.