在全球范围内,许多组织的关键业务数据分散在各种内容存储库中,因此很难以简化和统一的方式访问这些信息。 创建统一且安全的搜索体验对组织来说是一项重大挑战,因为每个存储库都包含各种文档格式和访问控制机制。
亚马逊肯德拉 是一种智能企业搜索服务,允许用户跨不同的内容存储库进行搜索。 客户负责验证和授权用户访问其搜索应用程序,而 Amazon Kendra 支持企业应用程序的安全搜索,确保用户搜索查询的结果仅包含用户有权阅读的文档。 Amazon Kendra 可以通过添加安全搜索令牌轻松验证执行搜索的个人用户和用户组的身份。 通过为安全搜索添加用户令牌,在 Amazon Kendra 中执行基于访问的过滤搜索得到简化和保护。 您可以在查询负载中安全地传递用户访问信息,而不是使用属性过滤器来完成此操作。 借助此功能,Amazon Kendra 可以验证令牌信息并将其自动应用于搜索结果,以实现准确且安全的基于访问的过滤。
Amazon Kendra 支持使用以下令牌类型的基于令牌的用户访问控制:
- 打开身份证
- 具有共享秘密的 JWT
- 带有公钥的 JWT
- JSON
之前,我们看到了一个演示 Amazon Kendra 中带有 Open ID 的基于令牌的用户访问控制. 在本文中,我们演示了 Amazon Kendra 中基于令牌的用户访问控制以及 JWT 和共享密钥。 JWT 或 JSON Web Token 是一种开放标准,用于在客户端和服务器之间共享安全信息。 它包含编码的 JSON 对象,包括一组声明。 JWT 使用加密算法进行签名,以确保在颁发令牌后不能更改声明。 JWT 在有关授权和信息交换的场景中很有用。
JWT 由以点 (.) 分隔的三部分组成:
- 标题 – 它包含令牌类型(即 JWT)、所使用的签名算法(例如 HMAC SHA256 或 RSA)以及可选的密钥标识符等部分。
- Payload – 这包含几个键值对,称为 索赔,由身份提供者发布。 除了与代币发行和到期相关的多项声明外,代币还可以包含有关个人委托人和租户的信息。
- 签名 – 要创建签名部分,您需要编码的标头、编码的有效负载、秘密、标头中指定的算法,然后对其进行签名。
因此,JWT 如下所示:
以下是示例标头:
以下是示例负载:
JWT 是使用密钥创建的,该密钥对您来说是私有的,这意味着您永远不会将其透露给公众或将其注入 JWT 中。 当您从客户端收到 JWT 时,您可以使用存储在服务器上的密钥来验证 JWT。 对 JWT 的任何修改都会导致验证(JWT validation)失败。
这篇文章演示了使用共享访问密钥的 JWT 的示例使用及其使用访问控制保护 Amazon Kendra 索引的用法。 在生产中,您使用您选择的安全身份验证服务提供商,并根据您的要求生成 JWT。
要了解有关 JWT 的更多信息,请参阅 JSON Web Token 简介.
解决方案概述
类似于 发表 借助 Open ID,此解决方案专为一组用户和组设计,用于对文档存储库进行搜索查询,并且仅从该组内有权访问的那些文档返回结果。 下表概述了每个用户有权为我们的用例访问哪些文档。 此示例中使用的文档是 AWS 公共文档的子集。
用户 | 团队 | 授权访问的文档类型 |
客人 | . | 博客 |
帕特里夏 | 对客户的 | 博客、用户指南 |
JAMES | 销售 | 博客、用户指南、案例研究 |
John | 营销 | 博客、用户指南、案例研究、分析师报告 |
玛丽 | 解决方案架构师 | 博客、用户指南、案例研究、分析师报告、白皮书 |
下图说明了如何使用共享访问密钥创建 JWT,以控制用户对 Amazon Kendra 索引中特定文档的访问。
当 Amazon Kendra 索引收到带有用户访问令牌的查询 API 调用时,它会使用共享密钥(安全地存储在 AWS机密管理器) 并获取负载中的用户名和组等参数。 Amazon Kendra 索引根据存储的访问控制列表 (ACL) 和用户 JWT 中收到的信息过滤搜索结果。 返回这些筛选结果以响应应用程序进行的查询 API 调用。
先决条件
为了按照本文中的步骤进行操作,请确保您具备以下条件:
使用共享密钥生成 JWT
以下示例 Java 代码显示了如何使用开源创建具有共享密钥的 JWT jsonwebtoken 包裹。 在生产中,您将使用您选择的安全身份验证服务提供商,并根据您的要求生成 JWT。
我们将用户名和组信息作为有效负载中的声明传递,使用共享密钥对 JWT 进行签名,并生成特定于该用户的 JWT。 提供一个 256 位字符串作为您的秘密,并保留 base64 URL 编码的共享秘密的值以在后续步骤中使用。
使用 JWT 共享密钥创建 Amazon Kendra 索引
有关创建 Amazon Kendra 索引的说明,请参阅 创建索引. 记下 AWS身份和访问管理 您在此过程中创建的 (IAM) 角色。 按照以下步骤为角色提供对 S3 存储桶和 Secrets Manager 的访问权限 最小特权原则. 例如政策,请参阅 IAM 基于身份的策略示例. 创建索引后,您的 Amazon Kendra 控制台应类似于以下屏幕截图。
完成以下步骤以添加您的密钥:
- 在 Amazon Kendra 控制台上,导航到 用户访问控制 索引详细信息页面上的选项卡。
- 编辑设置.
- 因为我们正在实施基于令牌的访问控制,所以选择 有 下 访问控制设置.
- 下 令牌配置,选择 具有共享密钥的 JWT 代币类型.
- 针对 密文类型,选择 全新.
- 针对 秘密名称,输入
AmazonKendra-jwt-shared-secret
或您选择的任何名称。 - 针对 密钥 ID,输入密钥 ID 以匹配您在示例 Java 代码中创建的 JWT。
- 针对 算法, 选择 HS256 算法。
- 针对 共享秘密,输入之前从 Java 代码生成的保留的 base64 URL 编码密码。
- 保存秘密.
该机密现在将作为 JSON Web 密钥集 (JWKS) 存储在 Secrets Manager 中。 您可以在 Secrets Manager 控制台上找到它。 有关详细信息,请参阅 使用具有共享密钥的 JSON Web 令牌 (JWT).
- 展开 高级配置 部分。
在此步骤中,我们设置将从 JWT 声明中提取的用户名和组,并在签名有效时与 ACL 匹配。
- 针对 用户名输入用户名。
- 针对 组别, 输入组。
- 将可选字段保留为默认值。
- 下一页,然后选择 更新.
准备您的 S3 存储桶作为数据源
要准备 S3 存储桶作为数据源,请创建一个 S3 存储桶。 在终端中 AWS命令行界面 (AWS CLI) 或 AWS 云外壳,运行以下命令将文档和元数据上传到数据源存储桶:
被查询的文档存储在 S3 存储桶中。 每种文档类型都有一个单独的文件夹:博客、案例研究、分析师报告、用户指南和白皮书。 此文件夹结构包含在名为 Data 的文件夹中。 包括 ACL 在内的元数据文件位于名为 Meta 的文件夹中。
我们使用 Amazon Kendra S3 连接器将此 S3 存储桶配置为数据源。 当数据源与 Amazon Kendra 索引同步时,它会对所有文档进行爬网和索引,并从元数据文件中收集 ACL 和文档属性。 要了解有关使用元数据文件的 ACL 的更多信息,请参阅 Amazon S3 文档元数据. 对于这个例子,我们使用自定义属性 DocumentType
来表示文档的类型。 上传后,您的 S3 存储桶结构应类似于以下屏幕截图。
设置自定义属性 DocumentType
,请完成以下步骤:
- 选择您的 Kendra 索引并选择 构面定义 在导航窗格中。
- 新增栏位.
- 针对 字段名称,输入
DocumentType
. - 针对 数据类型,选择 串.
- 地址.
现在,您可以使用 S3 连接器将文档从您创建的存储桶提取到 Amazon Kendra 索引。 有关完整说明,请参阅 通过 Amazon Kendra S3 连接器提取文档.
- 在 配置同步设置 部分,用于 输入数据源位置, 输入您的 S3 存储桶 (
s3://kendra-demo-bucket/
). - 针对 元数据文件前缀文件夹位置,输入
Meta/
. - 扩大 附加配置.
- 点击 包括模式 标签,用于 字首,输入
Data/
.
有关支持的连接器的详细信息,请参阅 同轴连接器.
- 下一页, 然后 下一页 那么 更新.
- 等待创建数据源,然后选择数据源,选择 立即同步.
数据源同步可能需要 10-15 分钟才能完成。 同步完成后, 上次同步状态 应该显示为 成功.
查询 Amazon Kendra 索引
要对索引运行测试查询,请完成以下步骤:
- 在Amazon Kendra控制台上,选择 搜索索引内容 在导航窗格中。
- 扩大 使用访问令牌测试查询.
- 申请令牌.
- 我们可以为用户和组生成一个 JWT。 在这个例子中,我们为
AWS-SA
团体。 我们将用户名替换为 Mary,将组替换为AWS-SA
在 JWT 生成步骤中。 - 输入生成的令牌并选择 使用.
基于 ACL,我们应该是所有文件夹的结果:博客、用户指南、案例研究、分析报告和白皮书。
同样,当从 AWS-Sales
组并传递相应的 JWT,我们只能访问博客、用户指南和案例研究。
我们还可以在不传递令牌的情况下以访客身份搜索索引。 来宾只能访问博客文件夹中的内容。
尝试使用您可以想到的其他查询,同时以不同的用户和组身份登录并观察结果。
清理
为避免产生未来成本,请清理您在此解决方案中创建的资源。 要删除测试解决方案时创建的 Amazon Kendra 索引和 S3 存储桶,请参阅 净化. 要删除 Secrets Manager 密钥,请参阅 删除 AWS Secrets Manager 密钥.
结论
在这篇博文中,我们了解了 Amazon Kendra 如何执行仅根据用户访问返回搜索结果的安全搜索。 通过添加带有共享密钥的 JWT,我们可以轻松验证个人用户以及执行搜索的用户组的身份。 这种类似的方法可以扩展到 带有公钥的 JWT. 要了解更多信息,请参阅 使用具有共享密钥的 JSON Web 令牌 (JWT).
作者简介
尼廷优西比乌斯 是 AWS 的高级企业解决方案架构师,在软件工程和企业架构方面拥有超过 18 年的经验。 他与客户合作,帮助他们在 AWS 平台上构建架构完善的应用程序。 他热衷于解决技术挑战并帮助客户完成云之旅。
克鲁提·贾亚辛哈·拉奥 是一名合作伙伴解决方案架构师,专注于 AI 和 ML。 她为 AWS 合作伙伴提供技术指导,指导他们遵循最佳实践在 AWS 云中构建安全、有弹性且高度可用的解决方案。
伊桑·贝里 是 Amazon Web Services 的一名软件工程师,从事企业搜索引擎 Amazon Kendra 的工作。 他对安全性充满热情,并且在过去 2 年中致力于 Kendra 访问控制功能的关键组件。
阿卡什·巴蒂亚 是 AWS 的首席解决方案架构师。 他目前的工作重点是通过大规模设计和实施创新且有弹性的解决方案,帮助企业客户实现业务成果。 他在技术领域工作了 15 年以上,任职公司从财富 100 强到制造业、航空航天和零售垂直领域的初创企业。
- SEO 支持的内容和 PR 分发。 今天得到放大。
- 柏拉图区块链。 Web3 元宇宙智能。 知识放大。 访问这里。
- 与 Adryenn Ashley 一起铸造未来。 访问这里。
- Sumber: https://aws.amazon.com/blogs/machine-learning/secure-your-amazon-kendra-indexes-with-the-acl-using-a-jwt-shared-secret-key/
- :是
- $UP
- 10
- 100
- 11
- 15 年
- 420
- 7
- 8
- 9
- a
- Able
- 关于
- ACCESS
- 完成
- 精准的
- 横过
- 增加
- 航空航天
- 后
- AI
- 算法
- 所有类型
- 允许
- Amazon
- 亚马逊肯德拉
- 亚马逊网络服务
- 其中
- 分析人士
- 和
- API
- 应用领域
- 应用领域
- 使用
- 的途径
- 架构
- 保健
- AS
- At
- 属性
- 认证
- 授权
- 自动
- 可使用
- AWS
- 基于
- BE
- 因为
- 作为
- 最佳
- 最佳实践
- 之间
- 位
- 博客
- 建立
- 商业
- by
- 呼叫
- 被称为
- CAN
- 案件
- 客户案例
- 挑战
- 挑战
- 选择
- 索赔
- 程
- 客户
- 云端技术
- 码
- 公司
- 完成
- 组件
- 配置
- 安慰
- 包含
- 包含
- 内容
- Contents
- 控制
- 控制
- 相应
- 成本
- 创建信息图
- 创建
- 创造
- 创建
- 危急
- 加密
- 加密
- 电流
- 习俗
- 合作伙伴
- data
- 日期
- 默认
- 演示
- 演示
- 设计
- 细节
- 详情
- 不同
- 难
- 分散
- 文件
- 文件
- 向下
- ,我们将参加
- 每
- 容易
- 使
- 发动机
- 工程师
- 工程师
- 确保
- 输入
- 企业
- 例子
- 交换
- 体验
- 失败
- 专栏
- 特征
- 字段
- 档
- 过滤
- 过滤器
- 专注焦点
- 遵循
- 以下
- 针对
- 运气
- 止
- ,
- 未来
- Gain增益
- 生成
- 产生
- 代
- 团队
- 组的
- 客人
- 指导
- 指南
- 有
- 头
- 帮助
- 高度
- 创新中心
- How To
- HTML
- HTTP
- HTTPS
- ID
- 识别码
- 身分
- 实施
- 进口
- in
- 包括
- 包含
- 指数
- 指标
- 个人
- 信息
- 创新
- 即食类
- 代替
- 说明
- 智能化
- 国际空间站
- 发行
- 发行
- IT
- 它的
- 爪哇岛
- John
- 旅程
- JSON
- 智重
- 键
- 键
- 小子
- 学习用品
- 喜欢
- Line
- 清单
- 看
- 看起来像
- LOOKS
- 制成
- 使
- 制作
- 经理
- 方式
- 制造业
- 许多
- 匹配
- 匹配
- 手段
- 元
- 元数据
- 分钟
- ML
- 更多
- 姓名
- 命名
- 导航
- 旅游导航
- 全新
- 对象
- 观察
- of
- on
- 打开
- 开放源码
- 秩序
- 组织
- 其他名称
- 大纲
- 包
- 页
- 对
- 面包
- 参数
- 部分
- 合伙人
- 伙伴
- 部分
- 通过
- 通过
- 多情
- 过去
- 演出
- 执行
- 平台
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 政策
- 帖子
- 做法
- Prepare
- 先前
- 校长
- 私立
- 过程
- 生产
- 提供
- 提供者
- 提供
- 国家
- 查询
- 范围
- 范围
- 阅读
- 接收
- 收到
- 接收
- 关于
- 更换
- 业务报告
- 知识库
- 岗位要求
- 弹性
- 资源
- 响应
- 提供品牌战略规划
- 导致
- 成果
- 零售
- 保留
- 回报
- 揭示
- 角色
- RSA
- 运行
- 鳞片
- 情景
- 搜索
- 搜索引擎
- 秘密
- 部分
- 安全
- 担保
- 安全
- 保安
- 分开
- 服务
- 服务供应商
- 特色服务
- 集
- 几个
- SHA256
- Share
- 共用的,
- 应该
- 显示
- 作品
- 签署
- 签
- 显著
- 签约
- 类似
- 简
- 软件
- 软件工程师
- 软件工程
- 方案,
- 解决方案
- 解决
- 来源
- 具体的
- 指定
- 标准
- 初创公司
- 步
- 步骤
- 存储
- 精简
- 串
- 结构体
- 研究
- 这样
- 支持
- 支持
- 系统
- 表
- 采取
- 文案
- 专业技术
- 承租人
- 终端
- test
- 测试
- 这
- 信息
- 其
- 他们
- 博曼
- 三
- 通过
- 次
- 至
- 象征
- 令牌
- 类型
- 统一
- 网址
- 用法
- 使用
- 用例
- 用户
- 用户
- 验证
- 验证
- 折扣值
- 各个
- 企业验证
- 确认
- 垂直
- 卷筒纸
- Web服务
- 井
- 这
- 而
- 白皮书
- WHO
- 宽
- 大范围
- 将
- 中
- 也完全不需要
- 工作
- 加工
- 合作
- 工作坊
- 年
- 完全
- 您一站式解决方案
- 和风网
- 压缩