为匿名用户嵌入控制面板时,使用采用基于标签的规则的行级别安全性(RLS)来限制对数据集的访问 - 亚马逊 QuickSight
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

重要:我们已经重新设计了 Amazon QuickSight 分析工作空间。您可能会遇到无法反映 QuickSight 控制台新外观的屏幕截图或程序化文本。我们正在更新屏幕截图和过程文本。

要查找特征或项目,请使用快速搜索栏

有关新外观 QuickSight的更多信息,请参阅在 Amazon 上引入全新的分析体验 QuickSight

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为匿名用户嵌入控制面板时,使用采用基于标签的规则的行级别安全性(RLS)来限制对数据集的访问

 适用于:企业版 
   目标受众:亚马逊 QuickSight 管理员和亚马逊 QuickSight 开发者 

当您在应用程序中为未配置(注册)的用户嵌入亚马逊 QuickSight 控制面板时 QuickSight,您可以使用带有标签的行级安全 (RLS)。在这种情况下,您可以根据用户的身份使用标签来指定他们可以在控制面板中看到的数据。

例如,假设您的物流公司会为各种零售商提供面向客户的应用程序。来自这些零售商的成千上万名用户会访问您的应用程序,查看与他们的订单如何从您的仓库发货相关的指标。

您不想在中管理成千上万的用户 QuickSight,因此您可以使用匿名嵌入将选定的仪表板嵌入到您的应用程序中,经过身份验证和授权的用户可以看到这些仪表板。不过,您要确保零售商只能看到与其业务相关的数据,而不会看到其他业务数据。您可以使用带标签的 RLS 来确保客户只能看到与他们相关的数据。

为此,请完成以下步骤:

  1. 向数据集添加 RLS 标签。

  2. 在运行时系统中使用 GenerateEmbedUrlForAnonymousUser API 操作为这些标签分配值。

    有关使用 GenerateEmbedUrlForAnonymousUser API 操作为匿名用户嵌入控制面板的更多信息,请参阅为匿名(未注册)用户嵌入 QuickSight数据仪表板

使用带标签的 RLS 之前,请记住以下几点:

  • 目前仅匿名嵌入尤其是使用 GenerateEmbedUrlForAnonymousUser API 操作的嵌入式控制面板,才支持使用带标签的 RLS。

  • 使用 GenerateEmbedURLForRegisteredUser API 操作或旧 GetDashboardEmbedUrl API 操作的嵌入式控制面板不支持使用带标签的 RLS。

  • Amazon Identity and Access Management(IAM) 或 QuickSight 身份类型不支持 RLS 标签。

  • 将 SPICE 数据集应用于行级别安全性时,数据集中的每个字段最多可以包含 2047 个 Unicode 字符。如果字段包含的内容超过该限额,则会在摄取过程中被截断。要了解有关 SPICE 数据限额的更多信息,请参阅导入数据的 SPICE 限额

步骤 1:向数据集添加 RLS 标签

您可以在 Amazon QuickSight 中向数据集添加基于标签的规则。您也可以调用 CreateDataSetUpdateDataSet API 操作来添加基于标签的规则。有关更多信息,请参阅 使用 API 向数据集添加 RLS 标签

使用以下步骤向中的 QuickSight数据集添加 RLS 标签。

向数据集添加 RLS 标签
  1. 在起 QuickSight 始页面上,选择左边的数据集

  2. 数据集页面上选择要添加 RLS 的数据集。

  3. 在打开的数据集详细信息页面上,为行级别安全性选择设置

    
										在数据集页面选择数据集时的行级别安全性选项。
  4. 在打开的设置行级别安全性页面上,选择基于标签的规则

  5. 对于,选择要添加标签规则的列。

    例如,若为物流公司,则使用 retailer_id 列。

    仅列出数据类型为字符串的列。

  6. 对于标签,输入标签键。您可以输入所需的任何标签名称。

    例如,若为物流公司,则使用 tag_retailer_id 标签键。这样做可以根据访问应用程序的零售商来设置行级别安全性。

  7. (可选)对于分隔符,从列表中选择一个分隔符,或输入自己的分隔符。

    为标签分配多个值时,可以使用分隔符来分隔文本字符串。分隔符的值最长可达 10 个字符。

  8. (可选)对于全部匹配,选择 *,或输入自己的一个或多个字符。

    在要按数据集中该列的所有值进行筛选时,此选项可以是您希望使用的任何字符。您可以使用字符,而不是逐一列出值。如果指定了此值,其长度至少为一个字符,最多为 256 个字符

    
							管理标签表。
  9. 选择添加

    标签规则已添加到数据集并在底部列出,但尚未应用。要向数据集添加其他标签规则,请重复步骤 5 到 9。要编辑标签规则,请选择规则后面的铅笔图标。要删除标签规则,请选择规则后面的删除图标。您最多可以向数据集添加 50 个标签。

  10. 准备好将标签规则应用于数据集时,选择应用规则

    
							“基于标签的规则”对话框:“应用规则”按钮,用于实现基于标签的行级别安全性。
  11. 在打开的是否启用基于标签的安全性?页面中,选择应用并激活

    基于标签的规则现已激活。设置行级别安全性页面将显示一个切换开关,供您开启和关闭数据集的标签规则。

    要关闭数据集的所有基于标签的规则,请关闭基于标签的规则开关,然后在出现的文本框中输入“确认”。

    
							将“基于标签的规则”开关切换为“开启”,可设置行级别安全性。

    数据集页面上,数据集行中将出现一个锁定图标,表示标签规则已启用。

    您现在可以在运行时系统中使用标签规则来设置标签值,如 步骤 2:在运行时系统中为 RLS 标签分配值 中所述。这些规则仅在处于活动状态时影响 QuickSight 读者。

    重要

    在数据集上分配并启用标签后,请确保授予 QuickSight 作者在创作仪表板时查看数据集中任何数据的权限。

    要授予 QuickSight 作者查看数据集中数据的权限,请创建权限文件或查询以用作数据集规则。有关更多信息,请参阅 为行级别安全性创建数据集规则

创建基于标签的规则后,将出现一个新的管理规则表,其中会显示基于标签的规则之间的关系。要更改管理规则表中列出的规则,请选择规则后面的铅笔图标。然后添加或移除标签,并选择更新。要将更新后的规则应用于数据集,请选择应用


					带编辑和删除图标的管理规则表。

(可选)将 OR 条件添加到 RLS 标签

您还可以在基于标签的规则中添加 OR 条件,以进一步自定义向 QuickSight 账户用户显示数据的方式。在基于标签的规则中使用 OR 条件时,如果规则中定义的至少一个标签有效,则 QuickSight 会显示中的视觉效果。

将 OR 条件添加到基于标签的规则
  1. 管理规则表中,选择添加 OR 条件

    
								“管理标签”对话框:“添加 OR 条件”按钮。
  2. 在出现的选择标签下拉列表中,选择要创建 OR 条件的标签。您最多可以向管理规则表添加 50 个 OR 条件。您可以向数据集中的单列添加多个标签,但规则中至少需要包含一个列标签。

    
										选择要应用于 OR 条件的标签。
  3. 选择更新将条件添加到规则,然后选择应用将更新后的规则应用于数据集。

    
								带 RLS 规则和“应用”按钮的“管理规则”对话框。

使用 API 向数据集添加 RLS 标签

您也可以通过调用 CreateDataSetUpdateDataSet API 操作,在数据集中配置并启用基于标签的行级别安全性。通过以下示例了解如何操作。

CreateDataSet

以下示例展示了如何创建带 RLS 标签的数据集。该示例采用了前述的物流公司场景。标签在 row-level-permission-tag-configuration 元素中定义。标签在数据要受到保护的列上定义。有关此可选元素的更多信息,请参阅 Amazon QuickSight API 参考RowLevelPermissionTagConfiguration中的。

create-data-set --aws-account-id <value> --data-set-id <value> --name <value> --physical-table-map <value> [--logical-table-map <value>] --import-mode <value> [--column-groups <value>] [--field-folders <value>] [--permissions <value>] [--row-level-permission-data-set <value>] [--column-level-permission-rules <value>] [--tags <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] [--row-level-permission-tag-configuration '{ "Status": "ENABLED", "TagRules": [ { "TagKey": "tag_retailer_id", "ColumnName": "retailer_id", "TagMultiValueDelimiter": ",", "MatchAllValue": "*" }, { "TagKey": "tag_role", "ColumnName": "role" } ], "TagRuleConfigurations": [ tag_retailer_id ], [ tag_role ] }' ]

本示例中的标签是在元素的 TagRules 部分中定义的。在本示例中,根据两列定义了两个标签:

  • tag_retailer_id 标签键是为 retailer_id 列定义的。对本示例中的物流公司而言,这将根据访问应用程序的零售商来设置行级别安全性。

  • tag_role 标签键是为 role 列定义的。对本示例中的物流公司而言,这将根据从特定零售商访问应用程序的用户的角色来设置额外的行级别安全性层。例如 store_supervisormanager

对于每个标签,您都可以定义 TagMultiValueDelimiterMatchAllValue。这二者都是可选项。

  • TagMultiValueDelimiter – 此选项可以是任意字符串,用于在运行时系统中传递值时分隔值。此值最长可达 10 个字符。本示例使用逗号作为分隔符值。

  • MatchAllValue – 在要按数据集中该列的所有值进行筛选时,此选项可以是您希望使用的任何字符。您可以使用字符,而不是逐一列出值。如果指定了此值,其长度至少为一个字符,最多为 256 个字符。本示例使用星号作为通配值。

在为数据集列配置标签时,请使用强制属性 Status 开启或关闭标签。要启用标签规则,请为该属性使用值 ENABLED。启用标签规则后,就可以在运行时系统中使用这些规则来设置标签值,如 步骤 2:在运行时系统中为 RLS 标签分配值 中所述。

以下为响应定义的示例。

{ "Status": 201, "Arn": "arn:aws:quicksight:us-west-2:11112222333:dataset/RLS-Dataset", "DataSetId": "RLS-Dataset", "RequestId": "aa4f3c00-b937-4175-859a-543f250f8bb2" }
UpdateDataSet

UpdateDataSet

您可以使用 UpdateDataSet API 操作为现有数据集添加或更新 RLS 标签。

以下为使用 RLS 标签更新数据集的示例。该示例采用了前述的物流公司场景。

update-data-set --aws-account-id <value> --data-set-id <value> --name <value> --physical-table-map <value> [--logical-table-map <value>] --import-mode <value> [--column-groups <value> [--field-folders <value>] [--row-level-permission-data-set <value>] [--column-level-permission-rules <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] [--row-level-permission-tag-configuration '{ "Status": "ENABLED", "TagRules": [ { "TagKey": "tag_retailer_id", "ColumnName": "retailer_id", "TagMultiValueDelimiter": ",", "MatchAllValue": "*" }, { "TagKey": "tag_role", "ColumnName": "role" } ], "TagRuleConfigurations": [ tag_retailer_id ], [ tag_role ] }' ]

以下为响应定义的示例。

{ "Status": 201, "Arn": "arn:aws:quicksight:us-west-2:11112222333:dataset/RLS-Dataset", "DataSetId": "RLS-Dataset", "RequestId": "aa4f3c00-b937-4175-859a-543f250f8bb2" }
重要

在数据集上分配并启用标签后,请确保授予 QuickSight 作者在创作仪表板时查看数据集中任何数据的权限。

要授予 QuickSight 作者查看数据集中数据的权限,请创建权限文件或查询以用作数据集规则。有关更多信息,请参阅 为行级别安全性创建数据集规则

有关该RowLevelPermissionTagConfiguration元素的更多信息,请参阅 Amazon QuickSight API 参考RowLevelPermissionTagConfiguration中的。

步骤 2:在运行时系统中为 RLS 标签分配值

您只能将 RLS 标签用于匿名嵌入。您可以使用 GenerateEmbedUrlForAnonymousUser API 操作为标签设置值。

以下示例演示了如何为上一步数据集中定义的 RLS 标签分配值。

POST /accounts/AwsAccountId/embed-url/anonymous-user HTTP/1.1 Content-type: application/json { “AwsAccountId”: “string”, “SessionLifetimeInMinutes”: integer, “Namespace”: “string”, // The namespace to which the anonymous end user virtually belongs “SessionTags”: // Optional: Can be used for row-level security [ { “Key”: “tag_retailer_id”, “Value”: “West,Central,South” } { “Key”: “tag_role”, “Value”: “shift_manager” } ], “AuthorizedResourceArns”: [ “string” ], “ExperienceConfiguration”: { “Dashboard”: { “InitialDashboardId”: “string” // This is the initial dashboard ID the customer wants the user to land on. This ID goes in the output URL. } } }

以下为响应定义的示例。

HTTP/1.1 Status Content-type: application/json { "EmbedUrl": "string", "RequestId": "string" }

只有 GenerateEmbedUrlForAnonymousUser API 操作才支持无需在中注册用户 QuickSight 的 RLS。在此操作中,您可以在 SessionTags 下定义与数据集列关联的标签的值。

本示例定义了以下分配:

  • WestCentralSouth 在运行时系统中分配给 tag_retailer_id 标签。数据集中的 TagMultipleValueDelimiter 中定义的分隔符使用一个逗号。要在列中使用调用值,可以将值设置为 *,该值在创建标签时定义为 MatchAllValue

  • shift_manager 被分配给 tag_role 标签。

使用生成的 URL 的用户只能查看 role 列中包含 shift_manager 值的行。该用户只能查看 retailer_id 列中的值 WestCentralSouth

有关使用 GenerateEmbedUrlForAnonymousUser API 操作为匿名用户嵌入控制面板的更多信息为匿名(未注册)用户嵌入 QuickSight数据仪表板,请参阅 Amazon QuickSight API 参考GenerateEmbedUrlForAnonymousUser中的或