拥有许多用户和团队以及敏感信息的大型商业智能 (BI) 项目需要多方面的安全架构。 这种架构应该为 BI 管理员和架构师提供最大程度减少用户可访问的信息量的能力。 一个简单的管理解决方案 亚马逊QuickSight 用户和资产访问权限,您可以使用 AWS命令行界面 (AWS CLI) 或 AWS管理控制台 手动编辑 QuickSight 用户角色和仪表板访问权限。 然而,在特定情况下,企业很容易拥有数百或数千个用户和组,而这些访问管理方法效率不高。 我们收到了大量要求提供先进的可编程方法来部署和管理集中式 QuickSight 安全架构的请求。
本文介绍了 QuickSight 身份验证和授权粒度访问控制的最佳实践,并提供了一个集中式云应用程序 AWS云开发套件 (AWS CDK) 堆栈可供下载。 我们解决方案的优势之一是企业可以部署安全框架来管理其 BI 的访问控制,而无需离开 AWS。
所有配置都保存在 AWS Systems Manager参数存储。 Parameter Store 为配置数据管理和机密管理提供安全的分层存储。 您可以将用户名、用户权限、密码和数据库字符串等数据存储为参数值。 您可以参考 AWS系统经理 使用您在创建参数时指定的唯一名称来在脚本以及配置和自动化工作流中配置参数。
AWS CDK 应用程序模板适合持续集成和持续部署 (CI/CD) 基础设施,并根据 AWS 规定的已定义策略授予或撤销所有身份验证和授权。 这可以避免 BI 开发人员或管理员可能出现的人为错误。 BI 开发人员可以编辑配置参数以向最终用户发布新的仪表板。 同时,BI管理员可以编辑另一组参数来管理用户或组。 此 AWS CDK CI/CD 设计通过强制构建和部署 BI 应用程序的自动化来弥合开发和运营活动之间的差距。
安全要求
在企业 BI 应用程序设计中,多租户是一种常见的用例,它通过一个基础架构为多组用户提供服务。 租户可以是独立软件供应商(ISV)的不同客户,也可以是企业的不同部门。 在多租户设计中,每个租户共享仪表板、分析和其他 QuickSight 资产。 每个可以看到属于同一租户的所有其他用户(例如,共享内容时)的用户对其他租户仍然不可见。 在每个租户内,BI管理团队必须创建不同的用户组来控制数据授权,包括资产访问权限和细粒度数据访问。
让我们详细讨论资产访问权限的一些用例。 在 BI 应用程序中,通常根据业务领域(例如运营仪表板或执行摘要仪表板)和数据分类(关键、高度机密、仅供内部和公开)对不同资产进行分类。 例如,您可以有两个仪表板来分析销售结果数据。 两个仪表板的外观相似,但数据的安全分类不同。 一个名为“销售关键仪表板”的仪表板包含关键数据列和行。 另一个仪表板称为销售高度机密仪表板,包含高度机密的数据列和行。 某些用户被授予查看两个仪表板的权限,而其他用户则具有较低的安全级别权限,只能访问销售高度机密仪表板。
在以下用例中,我们按如下方式处理粒度级数据访问:
- 行级访问 (RLS) – 对于可以访问 Sales Critical Dashboard 的用户,部分用户只能查看美国数据。 然而,一些全球用户可以查看所有国家的数据,包括美国和英国。
- 列级访问 (CLS) – 某些用户只能查看数据集的非个人身份信息 (PII) 数据列,而人力资源团队可以查看同一数据集的所有列。
大型项目可能在一个 QuickSight 帐户中拥有多个租户、数百个组和数千个用户。 数据领导团队希望部署一种协议来进行用户创建和身份验证,以降低维护成本和安全风险。 本文中描述的架构和工作流程可帮助数据领导者实现这一目标。
此外,为了避免日常操作中的人为错误,我们希望自动授予和撤销这些安全权限,并适应 CI/CD 基础设施。 详细信息将在本文后面进行解释。
架构概述
下图显示了该解决方案的 QuickSight 帐户架构。
- 作者创建控制面板并更新 AWS Systems Manager Parameter Store 以向不同组发布控制面板
- 管理员批准作者的请求
- 管理员通过编辑 AWS Systems ManagerParameter Store 更新用户管理(角色、命名空间)
- DevOps 使用 AWS CDK 部署更新
*团体:对象访问权限组控制对象的所有者/查看者。 数据段组结合RLS/CLS控制数据访问。
*数据集:包含所有数据,受行级安全性(RLS)和列级安全性(CLS)限制
*首次登录QuickSight:如果 QuickSight 用户在首次登录前未注册,则会创建一个读者,该读者只能查看登陆页面仪表板,该仪表板共享给该帐户的所有用户。 登录页面提供该用户可以查看的报告列表。
下图说明了该架构的授权工作流程。
授权图详细信息:
- 用户信息(部门、团队、地理位置)存储在 Amazon Redshift、Amazon Athena 或任何其他数据库中。 结合组-用户映射,构建 RLS 数据库来控制数据访问。
- 每小时权限分配:
- 根据组-员工名称(用户)映射 (membership.csv) 和组-角色映射 (/qs/console/roles),AWS Lambda 函数创建组、注册、用户、分配组成员、删除组成员资格、提升读者为作者或管理员,如果用户从作者或管理员降级为读者,则删除用户。
- 根据 /qs/config/access 中的组-仪表板映射,AWS Lambda 函数将仪表板权限更新为 QuickSight 组。
- 根据membership.csv 中的组命名空间映射,AWS Lambda 函数在指定命名空间中创建QuickSight 组。
- 对象访问权限和数据段参数示例:
- QuickSight 用户角色的示例参数:
- membership.csv 样本数据:
在此解决方案中,部署自定义命名空间以支持多租户。 这 default
命名空间适用于公司的所有内部用户(我们称之为OkTank)。 OkTank 创建了 3rd-Party
外部用户的命名空间。 如果我们必须支持更多租户,我们可以创建更多自定义命名空间。 默认情况下,每个 AWS 账户最多可使用 100 个命名空间。 要增加此限制,请联系 QuickSight 产品团队。 有关多租户的更多信息,请参阅 使用 Amazon QuickSight 在应用程序中嵌入多租户分析.
在每个命名空间中,我们创建不同类型的组。 例如,在 default
命名空间,我们创建 BI-Admin
和 BI-Developer
团体为 admin
和 author
用户。 为了 reader
,我们部署两种类型的 QuickSight 组来控制资产访问权限和数据访问:对象访问权限组和数据段组。
下表总结了对象访问权限组如何控制权限。
集团名称 | 命名空间 | 允许 | |
critical |
默认 | 查看两个仪表板(包含关键数据和高度机密数据) | |
highlyconfidential |
默认 | 仅查看销售高度机密仪表板 | |
BI-Admin |
默认 | 账户管理和编辑所有资产 | 用户在 BI-Admin 组被分配了 Admin QuickSight 用户角色。 |
BI-Developer |
默认 | 编辑所有资产 | 用户在 BI-Developer 组被分配了作者 QuickSight 用户角色。 |
Power-reader |
默认 | 查看所有资产并创建临时分析以运行自助分析报告 |
用户在 但是,该组无法保存或共享其临时报告。 |
3rd-party |
非默认命名空间(3rd-party 例如命名空间) |
只能与读者分享(3rd-party-reader 组,例如)在同一命名空间中 |
在非默认命名空间中,我们还可以创建其他对象访问权限组,这与默认命名空间中的关键组类似。 |
有关 QuickSight 组、用户和用户角色的更多信息,请参阅 管理 Amazon QuickSight 内部的用户访问, 为 Amazon QuickSight 配置用户及 使用管理控制面板集中查看 Amazon QuickSight 对象.
第二类组(数据段组),结合 行级安全 数据集和 列级安全性,控制数据访问,如下表所述。
集团名称 | 命名空间 | 允许 | 范围 |
USA |
默认 | 仅在任何仪表板上查看美国数据 | 行级 |
GBR |
默认 | 仅在任何仪表板上查看英国数据 | 行级 |
All countries |
默认 | 在任何仪表板上查看所有国家的数据 | 行级 |
non-PII |
默认 | 无法查看社会安全号码、年收入和 PII 数据的所有其他列 | 列级 |
PII |
默认 | 可以查看包括 PII 数据在内的所有列 | 列级 |
我们可以在非默认命名空间中设置类似的组。
这些不同的组可以相互重叠。 例如,如果用户属于组 USA
, Critical
及 PII
,他们可以在两个仪表板上查看美国数据的所有列。 下面的维恩图说明了这些组之间的关系。
综上所述,我们可以结合QuickSight的功能来定义多方面的安全架构,包括命名空间、组、用户、RLS和CLS。 所有相关配置都保存在参数存储中。 QuickSight 用户列表和组用户映射信息位于 亚马逊简单存储服务 (Amazon S3) 存储桶作为 CSV 文件(名为 membership.csv
)。 该 CSV 文件可以是 LDAP 查询的输出结果。 一些 AWS Lambda 函数计划每小时运行一次(您也可以按需调用这些函数,例如每天、每周或任何适合您要求的时间粒度)来读取参数和 membership.csv
。 根据定义的配置,Lambda 函数创建、更新或删除组、用户和资产访问权限。
完成必要的安全配置后,Lambda 函数将调用 QuickSight API 来获取更新的信息并将结果以 CSV 文件形式记录在 S3 存储桶中。 BI 管理团队可以使用这些文件构建数据集,并使用仪表板可视化结果。 有关更多信息,请参阅 使用管理控制面板集中查看 Amazon QuickSight 对象 和 在 Amazon QuickSight 中构建管理控制台来分析使用指标.
此外,Lambda 函数的错误和用户删除事件都存储在该 S3 存储桶中,供管理团队查看。
自动化
下图说明了 Lambda 函数的整体工作流程。
我们使用可编程方法自动创建和配置组和用户。 对于任何临时用户注册请求(例如用户未记录在 membership.csv
但由于延迟),只要用户可以通过身份验证,他们就可以假设 AWS身份和访问管理 (IAM)角色 quicksight-fed-user
自行配置为 QuickSight 阅读器。 此自行配置的阅读器只能查看登陆页面仪表板,该仪表板提供仪表板和相应组的列表。 根据仪表板-组映射,该新读者可以申请给定组的成员资格以访问仪表板。 如果组所有者批准该应用程序,每小时运行的 Lambda 函数会在下次运行时将新用户添加到组中。
CI/CD 管道从 AWS CDK 开始。 BI 管理员和作者可以更新 Systems Manager 参数以发布新的仪表板或 AWS CDK 堆栈中的其他 QuickSight 资产 granular_access_stack.py
。 BI 管理员可以更新同一堆栈中的 Systems Manager 参数,以创建、更新或删除命名空间、组或用户。 然后,开发运营团队可以部署更新的 AWS CDK 堆栈,以将这些更改应用到 Systems Manager 参数或其他 AWS 资源。 Lambda 函数每小时触发一次,以调用 API 将更改应用到相关的 QuickSight 账户。
鳞片
Lambda 函数的最大运行时间限制为 15 分钟。 为了克服这个限制,我们可以将 Lambda 函数转换为 AWS胶水 Python shell 脚本具有以下高级步骤:
- 下载 博托3 轮文件来自 pypi.org.
- 将 Wheel 文件上传到 S3 存储桶中。
- 下载 Lambda函数 并将它们合并到一个 Python 脚本中并创建一个 AWS Glue Python shell 脚本。
- 将Boto3轮文件的S3路径添加到Python库路径中。 如果要添加多个文件,请用逗号分隔它们。
- 安排此 AWS Glue 作业每天运行。
欲了解更多信息,请参阅 使用 Python 编写 AWS Glue ETL 脚本 和 将 Python 库与 AWS Glue 结合使用.
先决条件
您必须具备以下先决条件才能实施此解决方案:
- QuickSight 企业帐户
- Python基础知识
- SQL基础知识
- BI基础知识
创建资源
通过从以下位置下载 AWS CDK 堆栈来创建您的资源: GitHub回购.
在 granular_access
文件夹,运行命令 cdk deploy granular-access
来部署资源。 有关更多信息,请参阅 AWS CDK 介绍研讨会:Python 研讨会.
部署解决方案
当您部署 AWS CDK 堆栈时,它会创建五个 Lambda 函数,如以下屏幕截图所示。
该堆栈还会在您的帐户中创建额外的支持资源。
granular_user_governance
函数由以下条件触发 亚马逊CloudWatch 事件规则 qs-gc-everyhour
。 文件中定义了组和用户的信息 membership.csv
。 S3存储桶名称存储在参数存储中 /qs/config/groups
。 下图显示了该函数的流程图。
- 设定目的地
granular_user_governance
到另一个 Lambda 函数,downgrade_user
,source=Asynchronous invocation
和condition=On Success
.
下图是该函数的流程图。
为了避免破坏对管理员或作者管理的 QuickSight 资产的关键访问权限,我们通过删除管理员或作者用户并使用 Lambda 函数创建新的读者用户来降级管理员或作者 downgrade_user
。 该 granular_user_governance
函数处理将管理员降级为作者,或将作者升级为管理员。
- 设定目的地
downgrade_user
到 Lambda 函数granular_access_assets_govenance
source=Asynchronous invocation
和condition=On Success
.
下图显示了该函数的流程图。
- 设定目的地
downgrade_user
到 Lambda 函数check_team_members
source=Asynchronous invocation
和condition=On Failure
.
check_team_members
该函数只需调用 QuickSight API 即可获取命名空间、组、用户和资产信息,并将结果保存在 S3 存储桶中。 S3 密钥是 monitoring/quicksight/group_membership/group_membership.csv
和 monitoring/quicksight/object_access/object_access.csv
.
除了上一步的两个输出文件外,还有错误日志和用户删除日志( downgrade_user
)也保存在 monitoring/quicksight
文件夹中。
- 设定目的地
granular_access_assets_govenance
到 Lambda 函数check_team_members
source=Asynchronous invocation
和condition=On Success
orcondition=On Failure
.
创建行级安全数据集
最后一步,我们创建 RLS 数据集。 这允许您根据查看仪表板的用户更改仪表板记录。
QuickSight 通过应用系统管理的数据集来支持 RLS,该数据集从仪表板数据集中子选择记录。 该机制允许管理员提供一个过滤数据集(RLS数据集) username
or groupname
列,这些列会自动过滤到登录的用户。例如,名为的用户 YingWang
属于 QuickSight 组 BI
,因此 RLS 数据集中与用户名对应的所有行 YingWang
或群组名称 BI
被过滤。 应用用户名和组名称过滤器后保留在 RLS 中的行将用于通过匹配具有相同名称的列来进一步过滤仪表板数据集。 有关行级安全性的更多信息,请参阅 使用行级安全性 (RLS) 限制对数据集的访问.
在此解决方案中,我们将示例用户信息导出到文件中 membership.csv
,它存储在 S3 存储桶中。 在此文件中,我们提供了一些用于 RLS 数据集定义的示例组。 这些组是数据段组,如总体架构设计中所述。 以下屏幕截图显示了一些组以及这些组中的用户。
granular_user_governance
函数创建这些组并将相关用户添加为这些组的成员。
我们如何创建 RLS 数据集? 假设我们有一张名为 employee_information
在我们组织的人力资源数据库中。 以下屏幕截图显示了一些示例数据。
基于该 employee_information
表,我们创建一个名为的视图 rls
对于 RLS 数据集。 请参阅以下 SQL 代码:
以下屏幕截图显示了我们的示例数据。
现在我们已经准备好了表,我们可以使用以下自定义 SQL 创建 RLS 数据集:
以下屏幕截图显示了我们的示例数据。
对于团体 quicksight-fed-all-countries
,我们设置 username
, country
及 city
为null,表示该组内的所有用户都可以查看所有国家的数据。
对于国家/地区级别,仅定义在 groupname
和国家 columns
用于过滤。 这 username
和 city
列设置为空。 用户在 quicksight-fed-usa
群组可以查看美国的数据,以及美国的用户 quicksight-fed-gbr
群组可以查看GBR的数据。
对于每个用户 groupname
设置为 null,他们只能查看分配给其用户名的特定国家和城市。 例如, TerryRigaud
只能查看美国奥斯汀的数据。
在 QuickSight 中,RLS 数据集中的多个规则通过 OR 组合在一起。
通过这些多方面的 RLS 规则,我们可以定义全面的数据访问模式。
清理
为避免将来产生费用,请通过运行以下命令删除您创建的资源:
结论
本文讨论了 BI 管理员如何设计和自动化 QuickSight 身份验证和授权精细访问控制。 我们结合了行级和列级安全性、组和命名空间等 QuickSight 安全功能,提供了全面的解决方案。 通过“BIOps”管理这些更改可确保用于管理 QuickSight 安全性的强大、可扩展的机制。 了解更多, 注册 QuickSight 演示.
作者简介
王颖 是一名高级数据可视化工程师,负责 AWS 专业服务中的数据与分析全球专业实践。
阿米尔·巴尔·奥尔 是 AWS Professional Services 的首席数据架构师。 在领导软件组织并开发数据分析平台和产品 20 年后,他现在与大型企业客户分享他的经验,并帮助他们在云中扩展数据分析。
- "
- &
- 100
- ACCESS
- 访问管理
- 账号管理
- 活动
- Ad
- 额外
- 管理员
- 所有类型
- Amazon
- 分析
- 分析
- APIs
- 应用领域
- 应用领域
- 架构
- 财富
- 办公室文员:
- 奥斯汀
- 认证
- 授权
- 自动化
- AWS
- AWS Lambda
- 最佳
- 最佳实践
- 边界
- 建立
- 建筑物
- 商业
- 商业智能
- 呼叫
- 例
- 更改
- 收费
- 城市
- 分类
- 云端技术
- 码
- 相当常见
- 公司
- 内容
- 国家
- 创造
- 合作伙伴
- XNUMX月XNUMX日
- data
- 数据访问
- 数据分析
- 数据管理
- 数据可视化
- 数据库
- 数据库
- 需求
- 设计
- 摧毁
- 细节
- 开发
- 研发支持
- DevOps的
- 域名
- 工程师
- 企业
- 企业客户
- 活动
- 事件
- 执行
- 出口
- 特征
- 过滤器
- 姓氏:
- 第一次
- 适合
- 骨架
- 功能
- 未来
- 全球
- 补助金
- 团队
- 创新中心
- hr
- HTTPS
- 数百
- IAM
- 身分
- 包含
- 收入
- 增加
- 信息
- 基础设施
- 积分
- 房源搜索
- IT
- 工作
- 加入
- 键
- 知识
- 着陆页
- 大
- LDAP
- 领导
- 学习用品
- Level
- 自学资料库
- 有限
- Line
- 清单
- 圖書分館的位置
- 长
- 颠覆性技术
- 成员
- 名称
- 数字
- 秩序
- 其他名称
- 其它
- 业主
- 密码
- 模式
- ii
- 平台
- 政策
- 校长
- 产品
- 热销产品
- 项目
- 项目
- 国家
- 蟒蛇
- 读者
- 读者
- 记录
- 减少
- 注册
- 关系
- 业务报告
- 岗位要求
- 资源
- 成果
- 检讨
- 风险
- 定位、竞价/采购和分析/优化数字媒体采购,但算法只不过是解决问题的操作和规则。
- 运行
- 运行
- 销售
- 鳞片
- 保安
- 自助服务
- 特色服务
- 集
- Share
- 分享
- 壳
- 简易
- So
- 社会
- 软件
- SQL
- 存储
- 商店
- SUPPORT
- 支持
- 产品
- 次
- Uk
- 工会
- 更新
- 最新动态
- us
- 美国
- 用户
- 查看
- 可视化
- 每周
- 轮
- WHO
- 中
- 工作流程
- 年