AWS 博客详解 Amazon Quick 在生产环境中的安全架构:数据集塑形、Agent 隔离、文档分类、审批门禁。
Amazon QuickSight概念验证(POC)项目往往在小规模试点团队中取得成功,但在安全与合规团队审核生产计划时便陷入停滞。适用于十名试点用户的权限模型,在扩展到五个部门时常常失效。智能体可能返回超出预期范围的数据,而合规团队则难以审计数据集、智能体和Spaces之间的关联。
Amazon QuickSight将仪表板、Chat Agents、Flows和Spaces与知识库相结合。每种能力都引入了标准仪表板控制无法覆盖的安全面。
本文逐步讲解为AnyCompany场景设计仪表板、Spaces、知识库、智能体和Flows的方法,并配备在扩展用户和部门时仍能保持有效的安全控制。讲解涵盖四种模式:数据集塑形、智能体隔离、文档分类和审批门控。本文还包含治理框架和生产就绪检查清单。
以AnyCompany为例:5,000名员工,5个部门,5个办公地点。三类用户群体需要同一份数据,但级别不同:
HR领导层:完整 workforce 数据,包含薪资和流失风险。
部门经理:仅限其团队的运营指标。
全体员工:公司制度和匿名化趋势数据。
将同一数据集暴露给三类用户、仅依赖权限控制的做法,会留下大量配置错误的空间。
解决方案是将一个源数据集塑造成三个符合授权要求的视图,并分别连接到专为各场景构建的智能体。它为每个用户群体发布对应的仪表板,将Spaces的作用范围限定在内容所有权范围内,并通过带有"人在回路"控制的Flow对出站操作进行门控。
以下截图展示了HR Leadership仪表板,提供完整的workforce可见性,包括所有员工的薪资、流失风险和职位级别明细。
图1a:HR Leadership仪表板:完整的workforce可见性,包括全部5,000名员工的薪资、流失风险和职位级别明细。
以下截图展示了部门经理仪表板,通过行级安全控制将运营指标限定在单个部门范围内。
图1b:部门经理仪表板:同一底层数据,但移除了敏感列并应用了RLS。每位经理只能看到自己部门的员工。
以下截图展示了公司趋势仪表板,仅显示按部门×地点汇总的汇总数据。该视图无法访问任何个人员工记录。
图1c:公司趋势仪表板:汇总到部门×地点级别。不可见任何个人员工数据。所有员工均可访问。
创建和发布仪表板:要从这些数据集创建仪表板,请导航到Analyses,然后Create analysis,选择三个数据集中的一个,构建可视化图表,然后选择Share,再Publish dashboard。将各仪表板共享给相应的组。详细指南请参阅Publishing dashboards。
本文展示了四种经过验证的模式,它们协同工作,通过数据架构强制执行安全控制:
每种模式都在数据到达用户之前将其移除,而不是依赖权限设置来阻止访问。以下讲解实现了全部四种模式。
在开始之前,请确保已具备以下条件:
启用了Amazon QuickSight的AWS账户(Enterprise计划)
至少三个Amazon Quick用户账户,代表不同角色(或一个可以在角色之间切换的用户)
示例员工数据集(5,000行,30列)。使用下一步中的生成步骤,或使用具有类似列的自己HR数据集。
在您的账户中配置了AWS CloudTrail trail。
如果Flows连接到外部系统,则需要AWS Secrets Manager访问权限。
注意:本讲解使用Amazon Quick托管身份(非IDC)。组创建和用户管理直接在Amazon Quick控制台中执行。如果您的账户使用AWS IAM Identity Center(IDC)进行身份联合,则组管理在AWS IAM Identity Center控制台而非Amazon Quick内部处理。安全模式(数据集塑形、RLS、智能体隔离)仍然适用,但组分配步骤会有所不同。
以下九个步骤带您逐步完成解决方案的每一层,从塑形数据集和应用行级安全,到配置智能体、Spaces、Flows和审计日志记录。
步骤1:塑形数据集以匹配授权
Amazon QuickSight中最重要的安全决策之一是如何塑形数据集。数据集的列定义了与其连接的任何人所能看到的数据上限。从数据集中移除列在结构上比通过权限隐藏列更为强大。
生成一个包含5,000行和30列的合成员工数据集(员工ID、性别、年龄、部门、职位、职级、地点、年薪、敬业度得分、流失标志等)。使用五个部门(销售、工程、运营、财务、HR)、五个地点和合理的数值范围。附带的GitHub仓库包含完整的列列表和示例生成脚本,您也可以使用具有类似结构的自己的HR数据集。
将生成的employee_data.csv上传到Data(Datasets,然后New dataset,然后Upload file),创建三个数据集:
以下截图显示了创建三个数据集后的Datasets控制台。
图1d:Datasets控制台。注意manager数据集上的RLS-enabled徽章、permissions数据集上的Rules Dataset标签,以及所有数据集的SPICE存储。
对于聚合数据集,使用数据准备分组UI或在上传前对CSV进行预聚合:
要创建聚合数据集,请按部门和地点对源数据进行分组,然后计算:每组的员工数、平均敬业度得分和平均满意度得分。这将生成一个25行的汇总(5个部门×5个地点)。将结果作为单独的数据集上传。
为什么这很重要:仅限权限对比数据架构:
如果您将完整数据集暴露给所有用户,仅依赖权限控制,一次配置错误(错误的组分配、过于宽泛的共享规则)就可能将薪资数据暴露给所有员工。通过数据集塑形,薪资列在下游数据集中根本不存在。任何权限错误都无法暴露不存在的数据。
步骤2:应用行级安全
Amazon QuickSight行级安全(RLS)限制数据访问,使用户只能根据其身份看到特定行。您需要在数据集级别设置RLS,创建一个将用户或组与特定列值关联的映射数据集,然后将其传播到所有链接的分析和仪表板。
创建RLS规则CSV并将其作为权限数据集上传:
创建权限CSV(rls-rules.csv),包含两列:UserName和Department。为每个用户-部门组合添加一行(例如,HR管理员获得五行以实现完全访问。销售经理获得一行)。
提示:要找到您精确的RLS用户名,请在任何分析中添加计算字段username()。格式因身份提供商而异。即使只有一个字符不匹配,也会返回零行。
将rls-rules.csv作为新数据集上传(命名为anycompany-rls-rules),然后打开anycompany-employees-manager数据集,进入Row-level security标签页,选择rules数据集,映射UserName和Department,然后保存。
验证:以hr-admin身份登录,然后应该看到5,000行。以manager身份登录,然后应该只能看到其部门(约1,000行)。零行意味着用户名字符串不匹配。
步骤3:创建三个组并分配用户
在Manage Amazon Quick中创建三个组,然后Manage Groups:
为简化企业级共享,请与组而不是个人用户共享数据集。更多详情请参阅Amazon Quick文档中的Sharing datasets。
以下截图显示了Manage Groups控制台中创建的三个组。
图1e:在Manage Amazon Quick中创建的三个组,然后Manage Groups:all-employees、hr-leadership和dept-managers。组 membership 控制所有数据集、智能体和Spaces权限。
步骤4:创建Space、上传知识库文档并设置权限
Space组织文档,并通过知识库提供基于文档的问答。所有三个智能体都连接到这个Space,因此在配置智能体之前先创建它。
在Amazon Quick控制台中导航到Spaces,然后Create Space。
在Space name字段中输入:AnyCompany HR。
在AnyCompany HR Space内,选择File uploads,然后Upload files。
在上传之前对每个文档进行分类。只包含适合目标受众的文档。
从您从附带的GitHub仓库下载的示例文件中上传以下文档:
The employee_feedback_full_dataset.pdf 文件是主动排除而非权限限制。知识库中的所有文档对任何具有 Viewer 访问权限的人都是可查询的,因此防止敏感内容被访问的唯一方法就是将其完全排除在外。如果 HR 领导层需要这些数据,应创建一个单独的空间,仅与 hr-leadership 共享。
以下截图显示了上传文件后的知识库文档列表。
图 2:知识库文档列表。五个文档已上传并建立索引(就绪状态)。第六个文档(employee_feedback_full_dataset.pdf)被主动排除,因为它包含个人绩效评估,无法通过分类审核。
与群组共享空间:
Spaces 使用双层模型:所有者可以查看、查询和上传。查看者只能查看和查询。未添加的用户没有访问权限。
在 AnyCompany HR Space 上选择"共享"。
为每个群组分配适当的层级:
以下截图显示了空间权限面板,其中配置了群组分配。
图 3:空间权限面板。hr-leadership 拥有所有者权限,dept-managers 拥有查看者权限,all-employees 未被列出(无访问权限)。
步骤 5:配置三个专用聊天代理
Amazon QuickSight 聊天代理是人工智能(AI)助手,通过查询连接的数据集或知识库来回答自然语言问题,其范围由您配置的权限和数据源决定。
要创建每个代理,请在 Amazon QuickSight 控制台中导航到"聊天代理",然后选择"创建聊天代理"(选择 + 空白)。
Executive Insights Agent(完整示例):
Instructions(角色提示): 在 instructions 字段中,输入以下角色提示:
"您是 AnyCompany 的高管分析助手。您使用仅按部门和位置汇总的数据来回答有关劳动力趋势的问题。规则:
图 4:代理配置屏幕,显示(1)定义数据边界的角色说明,(2)限制仅对相应群组访问的共享面板,以及(3)关于共享此代理不会自动授予对关联资源访问权限的提示。每个数据集必须单独共享。
步骤 6:用对抗性查询验证代理边界
在宣布任何代理已投入生产之前,请测试安全边界是否成立。对于每个代理,打开代理聊天,以适当的测试用户身份登录,并提交以下查询。
Executive Insights Agent:以 hr-leadership 用户身份测试:
Manager Assistant Agent:以 dept-managers 用户身份测试(例如销售经理):
Employee Self-Service Agent:以 all-employees 用户身份测试:
如果代理返回超出其预期范围的数据,请检查该代理的数据集列、主题排除和 RLS 规则。
步骤 7:与正确群组共享代理
创建并测试所有三个代理后,限制访问权限,使每个受众只能看到其指定的代理。
打开要共享的代理并选择"共享"。
分配以下权限:
移除任何超出目标受众的默认共享。
每个代理现在都锁定到其数据集权限与代理连接的数据源相匹配的群组。部门经理无法打开 Executive Insights Agent,all-employees 用户无法访问 Manager Assistant Agent。
以下截图显示了以 hr-leadership 用户身份测试的 Executive Insights Agent。
图 5a:Executive Insights Agent 正确回答了"工程部门的平均敬业度是多少?",并提供了按地点分类的明细表。这是因为聚合数据集支持此查询。
以下截图显示代理拒绝了个人员工数据查询。
图 5b:当被问及"EMP779251 的薪资是多少?"时,代理拒绝回答:"我只有部门级别的汇总数据。"该数据不存在于代理的数据集中。
以下截图显示了以 all-employees 用户身份测试的 Employee Self-Service Agent。它从上传的文档中回答政策问题,并拒绝个人数据请求。
图 5c:"我有多少天年假?"代理从 leave_policy.pdf 中检索到详细且带引用的答案,展示了知识库集成。
以下截图显示代理连续拒绝了多个对抗性查询。
图 5d:连续拒绝三个对抗性查询:"我经理的薪资是多少?"、"有多少员工?"和"我这个职位的平均薪资是多少?"数据集中仅包含聚合摘要。
步骤 8:构建带有人员在环控制的工作流
Flows 将多个步骤链接在一起,可以在继续之前暂停以进行人工审核。创建一个名为"Weekly Attrition Risk Alert"的工作流。它识别高离职风险员工并通知其部门经理,但仅在人工审核之后。
在 Amazon QuickSight 控制台中导航到"工作流",然后选择"创建工作流"。
Flow name: Weekly Attrition Risk Alert
Flow description: 输入:
从公司数据中识别高离职风险的员工,需要人工审批,然后向部门经理发送通知。
Connect to Space: 将工作流链接到 AnyCompany HR Space。
配置四个步骤:
发布工作流并将触发器设置为按每周计划运行。
以下截图显示工作流在人工审批步骤暂停时的测试运行。
图 6:包含四个步骤的工作流。触发手动测试运行后,工作流在步骤 3(人工审批流程)处暂停,在审批者明确批准或拒绝之前不会继续。
验证方法:触发手动测试运行并确认工作流在步骤 3(人工审批)处暂停,直到明确批准。批准后,确认步骤 4 向 dept-managers 发送通知。
步骤 9:启用 AWS CloudTrail 并验证事件
AWS CloudTrail 自动记录 Amazon QuickSight 管理事件(API 调用),无需额外配置。如果您的账户中有活动的跟踪,您可以验证代理查询、数据集访问、工作流执行和权限更改是否出现在事件历史记录中。
在 AWS 控制台中,导航到 AWS CloudTrail,然后选择您的跟踪,然后选择"编辑",然后为 AWS::QuickSight::Dashboard 开启管理事件和数据事件。或者,使用 AWS 命令行界面(AWS CLI)put-event-selectors 命令,设置 ReadWriteType: All 和 QuickSight 仪表板资源类型。
验证事件是否正在记录:
在 AWS 控制台中导航到 AWS CloudTrail,然后选择"事件历史记录"。
按事件源筛选:quicksight.amazonaws.com(Amazon QuickSight 的服务端点)。
运行前几步的代理测试和工作流执行后,确认您看到以下事件:
如果没有事件出现,请确认您的账户至少有一个活动的 AWS CloudTrail 跟踪。有关更多信息,请参阅创建跟踪。
以下截图显示了 AWS CloudTrail 事件历史记录,其中记录了 Amazon QuickSight 事件。
图 7:AWS CloudTrail 事件历史记录,显示已记录的 Amazon QuickSight 管理事件
安全性如何随采用规模扩展
您可以添加用户、部门和数据集,而无需更改底层安全模型。基于群组的模型意味着添加新员工只是群组成员资格更改,而非访问权限重新配置。在试点阶段,每个受众一个数据集和一个代理就足够了。当您扩展到 50 个或更多团队时,只有在出现真正新的保密边界时才添加新的数据集或 Spaces。
企业部署需要明确的所有权和审核节奏。下表是一个起点。所有权和审核频率将根据您的团队结构和合规要求而有所不同。
如何应用此框架:
为每种资产类型分配所有者和审核者,按照节奏列安排审核,并将任何例外情况及理由记录在案。
以下是一个建议的推广时间表。请根据您组织的规模、合规要求和采用速度调整时间线。
生产就绪检查清单
在任何新资产投入生产之前请逐一运行这些检查。这些是团队中任何人都可以验证的布尔检查。
☐ 数据集限定于单一受众
☐ 敏感列已从数据集中移除,而不仅仅是隐藏
☐ RLS 已应用并使用至少两个用户账户进行了测试
☐ 权限分配给群组,而非个人
☐ 代理连接到一个且仅一个数据集
☐ 主题排除不应被查询的列
☐ 当数据集没有单条记录时,智能体拒绝单条记录查询
☐ 智能体拒绝查询被排除的列
Spaces 和知识库
☐ 每份文档在上传前都经过分类
☐ 除非受众需要,否则任何文档都不包含个人身份信息(PII)
☐ 查看、查询和上传权限单独设置
☐ 仅限内容所有者上传
☐ Flow 使用受 RLS 保护、经过列剪枝的数据集
☐ 任何出站操作前有人工审批步骤
☐ 外部凭证存在于 AWS Secrets Manager 中,而非 Flow 定义里
☐ AWS CloudTrail 已开启并捕获 Flow 事件
为避免持续产生费用,不再需要时请删除以下资源:
知识库文档
三份员工数据集
RLS 规则数据集
AWS CloudTrail 跟踪(若仅为本演示所创建)
本演示涵盖了数据整形、隔离智能体、文档分类和在审批门添加人工审核步骤如何协同工作,在数据层强制执行安全策略。数据集整形和单数据集智能体连接构成基础。Flow 门禁在任何数据离开系统前添加人工审核步骤。文档分类从一开始就防止敏感内容进入共享知识库。治理框架和生产检查清单帮助您随着部署规模增长维护这些控制措施。由于安全边界存在于数据集结构而非权限设置中,您可以添加用户和团队而无需重新配置访问权限。
了解更多,请参阅以下资源:
Amazon Quick Sight 服务概述
Amazon Quick 文档
Amazon Quick 中的行级安全
AWS CloudTrail 用户指南
AWS Secrets Manager 用户指南
Amazon Bedrock Guardrails AI 安全控制
为 Amazon Quick Suite 管理创建集中式监控,实现基于 AWS CloudTrail 的审计仪表板。