AWS发布指南:使用Cognito身份验证在React应用中嵌入QuickSight可视化

AWS Machine Learning博客发布新教程,介绍如何通过Cognito用户池认证和Lambda生成限定范围的嵌入URL,在React应用中按用户权限嵌入单个QuickSight图表。

AI解读:这条新闻对需要在自家产品中嵌入商业智能图表的开发者很有价值。通常,做这件事要自己处理用户认证和权限隔离,教程很少讲清楚,导致开发复杂且容易出安全漏洞。AWS官方给出的方案是用Cognito做登录,后端Lambda自动把新用户注册到QuickSight并授予最低权限,然后为每个用户生成只指向特定图表的嵌入链接,前端用官方SDK渲染。关键限制在于,用户首次登录时不会直接看到图表,管理员必须先在QuickSight控制台把仪表盘共享给该用户(授予Viewer权限),下次登录才能显示;另一个限制是QuickSight账户必须把应用的CloudFront域名加入嵌入白名单,否则浏览器会因跨域问题拦截iframe。这个方案的好处是,如果你已经在用AWS,全部组件可用单个CloudFormation模板部署,能省去很多手动配置时间,并实现细粒度的按视觉对象访问控制。如果你只是试试看,现在无需行动,但若计划在生产环境使用,需要提前规划用户注册流程和仪表盘共享流程。

AWS Machine Learning博客发布技术教程,介绍如何在React应用中嵌入Amazon QuickSight单个可视化,并通过Amazon Cognito用户池实现每个用户仅能看到其角色允许的数据。该方案使用AWS Lambda生成限定范围的嵌入URL,并可由单个AWS CloudFormation堆栈快速部署。

架构与组件

该解决方案采用四层无服务器架构:前端层是React应用,通过Amazon CloudFront提供服务,静态文件存储在S3存储桶中,AWS WAF在边缘过滤恶意请求;认证层使用Amazon Cognito用户池处理登录并签发JWT,在API层验证;后端层是受Cognito授权器保护的Amazon API Gateway端点,路由认证请求到Lambda函数,该函数承担专用IAM角色并调用Amazon QuickSight GenerateEmbedUrlForRegisteredUser API生成限定时间的嵌入URL;分析层是Amazon QuickSight本身,通过浏览器中的Embedding SDK在React应用中渲染单个可视化。

QuickSight账户必须将应用程序的CloudFront域名添加到嵌入白名单,否则浏览器将因跨域限制阻止嵌入的iframe,可视化无法渲染。

用户同步与RBAC

每个需要查看嵌入可视化的Cognito用户必须在QuickSight中注册为注册用户。Lambda函数在每个嵌入URL请求时处理同步:从JWT中获取用户电子邮件,调用describe_user检查用户是否存在于QuickSight,若不存在则调用register_user创建为READER(支持可视化嵌入的最低权限角色)。注册本身不授予任何仪表盘访问权限。

可通过两种方式授予权限:一是管理员在QuickSight控制台手动共享仪表盘并赋予Viewer权限;二是扩展Lambda函数,在register_user后调用update_dashboard_permissions自动授予Viewer权限,用户首次登录即可查看。嵌入URL通过指定DashboardId、SheetId和VisualId进一步限制访问范围,用户只能查看父仪表盘上明确共享的视觉对象,如需数据级限制,可叠加QuickSight行级安全。

实现步骤

教程提供了从克隆GitHub仓库(aws-samples/sample-quicksight-visual-embedding)开始的完整步骤:第 1 步部署CloudFormation堆栈并记录输出值;第 2 步配置前端环境,包括从QuickSight的嵌入视觉面板获取视觉ID和创建 .env文件;第 3 步通过Cognito控制台手动创建用户或在UI中启用自我注册;第 4 步构建React应用并上传到S3,创建CloudFront缓存失效;第 5 步将CloudFront域添加到QuickSight白名单;第 6 步访问应用并完成用户注册。

首次登录时,嵌入的可视化不会渲染,因为新用户尚未获得目标仪表盘的Viewer权限,这是预期行为。首次调用会触发Lambda的register_user逻辑,确认用户在QuickSight中注册成功。之后管理员需要共享仪表盘并授予Viewer权限(共享邮箱必须与Cognito登录邮箱完全一致),刷新应用后可视化才会渲染。清理时删除CloudFormation堆栈以避免持续费用。

查看原图 · 1152 × 576
查看原图 · 2364 × 1444
查看原图 · 2992 × 1278
查看原图 · 2986 × 914
查看原图 · 2998 × 906
查看原图 · 3014 × 1624
查看原图 · 3822 × 1190
查看原图 · 2981 × 1643
查看原图 · 2470 × 1350
查看原图 · 2966 × 1460
查看原图 · 1764 × 2440
查看原图 · 1790 × 1933

信息来源