支持使用 Amazon QuickSight 的 SaaS 环境中的多租户应用程序 商业智能博客

Amazon QuickSight 支持多租户 SaaS 应用

关键要点

Amazon QuickSight 是 AWS 的无服务器商业智能服务,支持多租户 SaaS 应用的嵌入式分析。多租户架构的设计考虑包括数据隔离、资源部署和访问管理。选择分组或命名空间来实现资源隔离。提供了多种数据集和数据源配置选项,以符合不同的合规要求。

应用程序和服务利用可视化和报告推动客户采用,增加收入,并提供竞争优势。缺乏集成的分析和报告,软件即服务SaaS解决方案将在市场中失去竞争力。然而,自建和商业的商业智能BI解决方案往往造价高昂,不易维护。Amazon QuickSight,AWS 的无服务器 BI 服务,已被成千上万的客户用于嵌入式应用,以成本效益高的方式将可视化和分析体验无缝集成到其服务中。本文重点讨论 QuickSight 中的多租户特性,若要了解更多超出多租户的架构模式,请参考 使用 Amazon QuickSight 构建嵌入式分析架构。

尽管许多组织可以利用多租户架构,但最常见的使用者是允许用户在没有运营开销或费用的情况下使用软件的 SaaS 解决方案。SaaS 解决方案面临的一大挑战是以低成本和高规模提供高质量的 BI 解决方案。QuickSight 能够在降低自我管理解决方案的运营开销的同时,以经济合理的方式提供这一能力。此外,QuickSight 中的多租户特性对于提供仪表板和报告解决方案的咨询公司也很有帮助。

本文提供了在多租户环境中部署 QuickSight 的指导,包括数据隔离和在 QuickSight 应用中向租户部署资源的考虑。应用程序中的多租户为将用户组彼此隔离提供了一种机制。这些用户组可以来自不同的公司、不同的地理区域或企业内不同的业务线。不同租户内的用户无法看到其他用户、数据和资产,同时减少了为每个用户组管理不同基础设施的复杂性。

本文涉及以下主题:

为您的用例选择理想的 QuickSight 数据隔离方法选择最佳方式在 QuickSight 中部署和授予对象访问配置租户用户允许资源部署到所有租户的开发和部署方法

组与命名空间

Amazon QuickSight 提供两种通过隔离资源实现多租户的方法:使用 组 或使用 命名空间。这两种方法都提供了资源的隔离数据源、数据集、分析、仪表板,但它们有一个根本的区别。如果最终用户需要交互 QuickSight 来构建、部署或分享自己的仪表板,则必须使用命名空间。

当最终用户需要构建报告并需要 Author 许可证时,命名空间是必要的。组成员资格不限制拥有 Author 许可证的作者在组外分享新创建的资源,从而增加了意外数据泄露的风险。

从可观测性的角度来看,命名空间简化了对租户级别 QuickSight 使用情况的监控,使组织能够更容易地 跟踪和向客户收费。

在选择 组 或 命名空间 之前,请投资于各自方法的文档,评估其局限性。

支持使用 Amazon QuickSight 的 SaaS 环境中的多租户应用程序 商业智能博客

每个租户的数据集与数据源 vs 单个数据集与行级安全性

在 QuickSight 的多租户架构中,您必须就数据集作出决策。本节将探讨两个选项。哪一个最有效取决于组织的风险承受能力和行业特定的合规要求。

每个租户的数据集与数据源

在这种情况下,您每个租户都有一个数据集。每个数据集配置为仅带回特定租户的数据,通常以数据过滤器或带参数的自定义查询的形式提供。

每个租户的数据源不是必须的。例如,如果您使用 Amazon Athena 从 Amazon Simple Storage Service 查询数据,您可以在所有租户之间共享连接信息的单一数据源。每个租户的数据集可以通过不同的租户 ID 向 Athena 推送查询。

如果数据库层的多租户架构包括分离的硬件或架构,例如每个租户的数据库架构或集群,则您还需要为每个租户提供一个数据源。

您可以使用 AWS Lambda 函数以自动化的方式为每个租户部署资产。该过程会创建新资产并应用必要的权限,以便这些资产仅对特定命名空间租户中的组或用户可见。如果认为必要,您还可以使用 Lambda 删除租户并删除用户和资产。

以下图示显示了这一架构。

单个数据集与行级安全性

在这种情况下,您只有一个数据集,持有所有租户的原始数据,并启用了行级安全性RLS。单个仪表板指向该数据集,可以在所有租户之间共享。

RLS 需要创建一个单独的数据集,用于记录每个租户可访问的数据;更多信息请参见 在 Amazon QuickSight 中使用行级安全性 (RLS)。

以下图示显示了这一架构。

比较选项

下面的表格总结了每个选项的优缺点。

选项优点缺点每个租户独特的资产 (数据源、数据集、仪表板)符合行业特定要求,数据隔离需要自动化来管理资产;更大开发开销可轻松追踪每个租户的 SPICE 成本使用 RLS 的共享资产实现简单,开发开销更低无法追踪每个租户的 SPICE 成本RLS 规则数据集成为安全的关键更易达到 SPICE 数据存储限制

配置、身份验证与授权

在本文中,我们为租户命名空间、组和用户提供配置。在其他实现中,组可以使用 身份联合 在 QuickSight 外部管理。

在应用程序中嵌入仪表板消除了 QuickSight 中的用户管理,并提供了无缝的用户体验。嵌入应用程序代表用户调用 QuickSight API 生成可在 iFrame 中使用的单次 URL,并向用户展示仪表板。用户无需登录 QuickSight,因为用户上下文在嵌入 URL 创建时传递。更多信息请参阅 嵌入工作流程 工作坊。

有关特定于 QuickSight 的安全最佳实践,请参考 Amazon QuickSight 的安全最佳实践。

在以下部分,您将创建支持 QuickSight 中多租户环境所需的资源,包括 AWS 身份与访问管理 (IAM) 用户、组、命名空间和资产。我们将使用 AWS 命令行接口 (AWS CLI) 的示例来简化说明。您也可以使用其他 SDK,例如 AWS Python SDKBoto3 而不是 AWS CLI。

租户命名空间

在本节中,您将以自定义命名空间的形式创建第一个租户,然后创建一个组。命名空间中的组对在多个用户之间应用权限非常有用。

输入以下命令提供您的 AWS 账户 ID 和命名空间的名称:

bashaws quicksight createnamespace awsaccountid YOURAWSACCOUNTID name YOURNAMESPACE identitystore QUICKSIGHT

此过程是异步的。要检查命名空间是否已创建,请输入以下命令:

bashaws quicksight describenamespace awsaccountid YOURAWSACCOUNTID namespace YOURNAMESPACE

用户

在本节中,您将创建一个 IAM 用户,并在命名空间下将该用户注册到 QuickSight。

首先,您需要创建一个具有适当权限的 IAM 用户。更多信息,请参见 在 AWS 账户中创建 IAM 用户。

输入以下命令以将您创建的用户注册为命名空间下的 QuickSight 作者:

bashaws quicksight registeruser identitytype IAM email YOURUSEREMAIL userrole AUTHOR iamarn YOURIAMUSERARN awsaccountid YOURAWSACCOUNTID namespace YOURNAMESPACE

在租户之间部署资产

在本节中,我们回顾在租户之间部署数据集的过程。您将使用 AWS CLI 导出数据集为 JSON,并创建模板以便将其部署到不同租户。

您可以使用 AWS CLI 命令或 Python SDK 与 Lambda 结合,创建导出和部署管道,并为生产工作负载自动化这些管道。

在 QuickSight 中,有两种方式将资产作为代码导出:

使用标准 API例如,describedashboard使用捆绑 API

使用捆绑 API 可以通过将所有依赖项打包到单个导出文件中,简化导出过程。

在多租户环境中开发资产时,为开发用途分配一个命名空间。可以是默认命名空间,或客户的命名空间。

以下图示说明了跨命名空间的资产导出、模板化和导入过程。

完成以下步骤以捆绑导出资产:

飞鸟加速器最新版要获取要导出的仪表板的 ARN,请输入以下命令:

bashaws quicksight listdashboards awsaccountid YOURAWSACCOUNTID

使用您检索到的资源 ARN 启动导出任务。在 AWS CLI 中,请确保包含依赖项,因为这将导出仪表板使用的数据集和数据源。对于本文,请使用 JSON 作为导出格式,但 AWS CloudFormation 也支持。代码如下:

bashaws quicksight startassetbundleexportjob awsaccountid YOURAWSACCOUNTID assetbundleexportjobid YOUREXPORTJOBID resourcearns YOURRESOURCEARN includealldependencies exportformat QUICKSIGHTJSON

assetbundleexportjobid 的值在导出作业持续期间必须唯一。QuickSight 支持最多五个并发运行的资产捆绑导出作业。导出作业生成一个扩展名为 qs 的 zip 文件,其中包含仪表板、数据集和数据源的 JSON 输出或 CloudFormation 格式。该 zip 文件存储在 Amazon S3 中。

导出作业完成后,会生成一个 S3 签名 URL,显示 qs 文件的位置。该 URL 在 5 分钟内有效。如果过期,请运行 describeassetbundleexportjob 调用以重新启用。

由于 API 是异步的,请输入以下命令检查捆绑导出进度:

bashaws quicksight describeassetbundleexportjob awsaccountid YOURAWSACCOUNTID assetbundleexportjobid YOUREXPORTJOBID

以下代码显示您输出的样子:

json{ Status 200 JobStatus SUCCESSFUL DownloadUrl https//QuickSightassetbundleexportjobuseast1s3amazonawscom/YOURAWSACCOUNTID/YOUREXPORTJOBID//assetbundleqsXAmzSecurityToken= Arn arnawsQuickSightuseast1AWSACCOUNTIDassetbundleexportjob/job1 CreatedTime 20231219T0406370000 AssetBundleExportJobId job1 AwsAccountId AWSACCOUNTID ResourceArns [ arnawsQuickSightuseast1AWSACCOUNTIDdashboard/4c9f55d79fdb41cabe97a2d2f0c38c29 ] IncludeAllDependencies true ExportFormat QuickSightJSON RequestId 8491111e9cba4f23a63d5b1572540419 }

复制 DownloadUrl 的值,并使用 curl 从 Amazon S3 下载文件。确保在 DownloadURL 值周围使用双引号:

bashcurl DownloadUrl output assetbundleqs

使用以下命令解压缩内容:

bashunzip assetbundleqs

以下截图展示了文件夹结构的样子。

QuickSight 提供了几种开箱即用的选项,可覆盖导入时的参数例如,主机名、密码或数据源名称。要这样做,请使用 AssetBundleImportJobOverrideParameters API。

如果您尝试参数化的属性未在 API 中受支持,则必须手动在模板中添加这些参数。您可以使用脚本查找并替换参数为所需值。本文未涉及查找和替换过程。

查看捆绑导出的文件,您会发现每个 JSON 文件都有一个 IDdatasourceId、dataSetId 或 dashboardId和一个名称键,您需要更新这些字段,如下方截图所示。

使 dashboardId、datasetId 和名称在每个租户中唯一是强制性的。

在以下示例中,国家的 数据集过滤器应为每个租户设置不同的值。您的仪表板可能没有相同的字段或过滤器。选择您可以查看和希望设置的列或过滤器。

以下截图显示了原始过滤器。

以下截图展示了带新参数的过滤器。

[![带参数的 QuickSight 过滤器](https//d2908q01vomqb2cloudfrontnet/d02560dd9d7db4467627745bd

发表评论

订阅我们的邮箱