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支持AEM作为Cloud Service作者实例和AEM On-Premise作者和发布实例。您可以使用Amazon Kendra AEM On-Premise或Cloud Service连接器索引AEM内容并过滤要索引的内容类型,并使用Amazon Kendra智能搜索从AEM搜索您的数据。
本文向您展示如何配置Amazon Kendra AEM连接器来索引您的内容并搜索AEM资产和页面。该连接器还摄取每个文档的访问控制列表(ACL)信息。ACL信息用于显示按用户访问权限过滤的搜索结果。
解决方案概述
在我们的解决方案中,我们使用Amazon Kendra AEM连接器将AEM配置为Amazon Kendra搜索索引的数据源。根据配置,当数据源同步时,连接器将爬行和索引在特定日期之前或之后在AEM中创建的所有内容。连接器还为每个消息和文档索引访问控制列表(ACL)信息。当启用访问控制或用户上下文过滤时,用户查询的搜索结果仅包含用户有权限阅读的文档。
Amazon Kendra AEM连接器可以与AWS IAM Identity Center(AWS Single Sign-On的继任者)集成。您首先必须启用IAM Identity Center并创建一个组织,以从活动目录中同步用户和组。连接器将使用用户名称和组查找来进行搜索查询的用户上下文。
先决条件
要使用本文作为参考,尝试使用Amazon Kendra连接器进行AEM配置,您需要以下内容:
- 具有创建AWS身份和访问管理(IAM)角色和策略的权限的AWS帐户。有关更多信息,请参阅访问管理概述:权限和策略。
- 对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
)为AEM提供OAuth 2.0服务器功能的支持。
启用OAuth服务器身份验证处理程序
默认情况下,AEM不会启用OAuth服务器身份验证处理程序。要启用它,请执行以下步骤:
- 启动AEM本地实例,转到
http://localhost:<port>/system/console/configMgr/com.adobe.granite.oauth.server.auth.impl.OAuth2ServerAuthenticationHandler
- 在Adobe Granite OAuth Server Authentication Handler部分中,将
jaas.ranking.name
值更改为1100,并保存配置。
现在已启用OAuth服务器身份验证处理程序。
注册OAuth客户端
每个外部应用程序都需要在AEM中注册为OAuth客户端进行OAuth身份验证。要注册OAuth客户端,请完成以下步骤:
- 在AEM启动页面上,选择安全和OAuth客户端。
- 输入名称和重定向URI。
- 选择保存。
应用程序成功授权后,OAuth服务器会将授权代码重定向回应用程序,重定向URL已经配置。
- 复制客户端ID和客户端密钥并妥善保存。
Granite OAuth服务器支持以下授权类型:
- 授权码
- 刷新令牌
- JWT承载令牌
在本文中,我们使用OAuth2.0和JWT授权类型。
JWT承载令牌主要用于服务器之间的集成。这将帮助我们在没有资源所有者交互的情况下实现服务器之间的集成,例如,无需用户交互即可检索或上传文件。
生成JWT令牌
按照以下步骤生成JWT令牌:
- 导航到localhost和OAuth客户端。
- 选择下载私钥。
- 选择下载。
生成公共证书
现在,从下载的私钥生成公共证书,运行以下命令,并输入私钥密码。
使用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
确保在配置Amazon Kendra数据源时安装openssl
并添加到环境路径中。
在使用私钥之前,配置Amazon Kendra AEM数据源时,请确保不使用或复制代码中的“-----BEGIN PRIVATE KEY-----”
和“-----END PRIVATE KEY-----“
。此外,删除私钥中的任何空格。
使用生成的ClientId
、ClientSecret
和私钥配置Amazon Kendra AEM数据源。
要进行OAuth客户端注册,请导航到http://localhost:<port>/libs/granite/oauth/content/clients.html
。
设置SSL
按照以下步骤设置SSL:
- 创建密钥:
openssl genrsa -aes256 -out <keyFileName>.key 4096
- 加密密钥:
openssl req -sha256 -new -key <keyFileName>.key -out <keyFileName>.csr -subj '/CN=<keyFileName>'
- 签署密钥:
openssl x509 -req -days 365 -in <keyFileName>.csr -signkey <keyFileName>.key -out <keyFileName>.crt
- 将私钥编码为der格式:
openssl pkcs8 -topk8 -inform PEM -outform DER -in <keyFileName>.key -out <keyFileName>.der -nocrypt
将生成四个文件,文件名以<keyFileName>开头。我们在后续步骤中使用<keyFileName>.crt和<keyFileName>.der。
- 接下来,登录到AEM,网址为
http://localhost:<port>/aem/start.html
。 - 选择工具,安全性和SSL配置。
- 在存储凭据部分,输入密钥库和信任库密码。
- 在密钥和证书部分,指定私钥的.der文件和证书的.crt文件。
- 在下一部分中,输入域名(
localhost
),并保留端口不变。 - 选择完成。
AEM将在指定的新端口打开,例如https://localhost:8443
。
- 使用HTTPS登录到AEM,使用锁/小锁按钮在浏览器中下载证书,将证书导出并命名为
privateKey.crt
。
现在,让我们使用keytool将证书导入到密钥库路径中。
- 打开终端并转到包含
privateKey.crt
的文件夹位置,然后运行以下命令:
keytool -import -trustcacerts -keystore <JAVA_HOME>/lib/security/cacerts -storepass changeit -noprompt -alias yourAliasName -file privateKey.crt
请确保在防火墙设置中打开了8443和80端口。
- 将证书
privateKey.crt
添加到Amazon Simple Storage Service (Amazon S3)存储桶中。
使用Amazon Kendra连接器配置数据源
您可以使用现有的索引或创建新的索引来索引来自AEM的文档。然后完成以下步骤。有关更多信息,请参阅Amazon Kendra开发人员指南。
- 在Amazon Kendra控制台中,打开您的索引,然后选择导航窗格中的数据源。
- 选择添加数据源。
- 在Adobe Experience Manager下,选择添加连接器。
- 在指定数据源详细信息部分,输入名称和可选的描述,然后选择下一步。
- 在定义访问和安全性部分,选择AEM本地或AEM作为云服务源类型,并输入AEM主机URL。您可以在AEM设置中找到URL。
如果使用AEM本地,请输入AEM本地服务器的主机URL。然后选择浏览S3并选择带有SSL证书的S3存储桶。
如果使用AEM作为云服务,您可以使用作者URL https://author-xxxxxx-xxxxxxx.adobeaemcloud.com
。
- 在身份验证下,您有两个选项,基本身份验证和OAuth 2.0身份验证。
如果选择基本身份验证,对于AWS Secrets Manager密钥,选择创建并添加一个新密钥。然后输入密钥的名称、AEM站点用户名和密码。用户必须具有管理员权限或是管理员用户。
如果选择OAuth 2.0身份验证,对于AWS Secrets Manager密钥,选择创建并添加一个新密钥。输入密钥的名称、客户端ID、客户端秘钥和私钥。如果使用AEM作为云服务,输入密钥的名称、客户端ID、客户端秘钥、私钥、组织ID、技术账户ID和Adobe Identity Management System (IMS)主机。
- 选择保存或添加密钥。
- 在配置VPC和安全组部分,您可以选择使用VPC。如果是这样,您必须添加子网和VPC安全组。
- 在身份抓取器部分,选择抓取用户和组对特定文档具有访问权限的身份信息,并将其存储在Amazon Kendra主体或身份存储中。
这对于基于用户或其组对文档的访问权限对搜索结果进行过滤非常有用。
- 在IAM部分,创建一个新的IAM角色或选择一个现有的IAM角色来访问存储库凭据和索引内容。
- 选择下一步。
- 在配置同步设置部分,提供关于同步范围的信息。
您可以使用包含模式来包含要爬取的文件,也可以使用排除模式来排除它们。当您在包含模式部分提供模式时,只有与该模式匹配的文档才会被爬取。当您在排除模式部分提供模式时,与该模式匹配的文档将不会被爬取。
- 如果您使用的是AEM本地部署,并且您的服务器的时区与Amazon Kendra AEM连接器或索引的时区不同,您可以在时区标识部分指定服务器的时区以与AEM连接器或索引对齐。
AEM本地部署的默认时区是Amazon Kendra AEM连接器或索引的时区。AEM作为云服务的默认时区是格林尼治标准时间。
- 选择同步模式(对于本文,选择完全同步)。
使用完全同步选项时,每次同步运行时,Amazon Kendra将爬取所有文档并摄取每个文档,即使之前已经摄入过。完全刷新使您能够在不删除和创建新数据源的情况下重置Amazon Kendra索引。如果您选择新建或修改的内容同步或新建、修改或删除的内容同步,每次同步作业运行时,它将仅处理自上次爬取以来添加、修改或删除的对象。增量爬取可在与定期向现有数据源追加新对象的数据集一起使用时,有助于减少运行时间和成本。
- 对于同步运行计划,选择按需运行。
- 选择下一步。
- 在设置字段映射部分,您可以选择从Amazon Kendra生成的默认数据源字段中映射到索引的字段。要添加自定义数据源字段,请选择添加字段以创建一个索引字段名称,并指定字段数据类型。指定AEM字段名称、索引字段名称和数据类型。
- 选择下一步。
- 查看您的设置,并选择添加数据源。
- 添加数据源后,选择导航窗格中的数据源,选择新添加的数据源,然后选择立即同步以开始与Amazon Kendra索引的数据源同步。
同步过程将取决于要爬取的数据量。
现在让我们为Amazon Kendra索引启用访问控制。
- 在导航窗格中选择您的索引。
- 在用户访问控制选项卡上,选择编辑设置。
- 将设置更改为以下屏幕截图的样子。
- 选择下一步。
- 选择更新。
等待几分钟,使索引通过更改进行更新。现在让我们看看如何使用Amazon Kendra进行智能搜索。
使用Amazon Kendra进行智能搜索
在尝试在Amazon Kendra控制台上搜索或使用API之前,请确保数据源同步已完成。要检查,请查看数据源并验证上次同步是否成功。
现在我们准备好搜索我们的索引。
- 在Amazon Kendra控制台上,导航到索引并在导航窗格中选择搜索索引内容。
- 让我们使用“西伯利亚热浪的影响是什么?”来查询索引,而不提供访问令牌。
根据索引中的访问控制设置,需要一个有效的访问令牌才能访问用户被允许查看的内容;因此,当我们使用此搜索查询而没有设置任何用户名或组时,不会返回任何结果。
- 接下来,选择应用令牌并设置具有访问AEM内容权限的用户名或用户电子邮件ID(例如,
user-dev@company.com
)。
在爬取AEM数据源时,连接器会将用户电子邮件ID设置为主体。如果用户的电子邮件ID不可用,则将用户名设置为主体。
下面的屏幕截图显示了使用用户电子邮件ID user-dev-2@amazon.com
作为主体的示例。
下面的示例使用用户名 user-dev-2
作为主体。
- 现在,让我们尝试使用用户
user-dev@amazon.com
的令牌搜索相同的内容,该用户未被授权查看前面查询结果中出现的特定文档。
这证实了由Amazon Kendra连接器为AEM摄取的文档遵守了AEM设置的ACL,并且这些相同的ACL将根据所应用的令牌对搜索结果进行强制执行。
清理
为了避免未来产生费用,请清理您在解决方案中创建的资源。如果在测试此解决方案时创建了新的Amazon Kendra索引,请删除它。如果只是使用Amazon Kendra连接器为AEM添加了新的数据源,请删除该数据源。
结论
通过Amazon Kendra Adobe Experience Manager连接器,您的组织可以使用由Amazon Kendra提供支持的智能搜索安全地搜索页面和资产。
要了解有关Amazon Kendra连接器的更多信息,请参阅Adobe Experience Manager。
有关Amazon Kendra内置连接器到流行数据源的更多信息,请参阅Amazon Kendra原生连接器。