如何在 QuickSight 中排查行级安全问题?

上次更新日期:2022 年 7 月 12 日

我在 Amazon QuickSight 中对我的数据集应用了 RLS,但遇到了数据访问问题。

简短描述

以下是在 Amazon QuickSight 数据集上使用行级安全性(RLS)时可能会遇到的常见问题:

  • 您无法在 QuickSight 嵌入式控制面板中看到匿名 QuickSight 用户的任何数据。
  • 受限制的用户仍然可以查看所有数据。
  • 不受限制的用户无法查看任何数据。
  • 当您应用 RLS 时,您会收到错误代码 DatasetRulesInvalidColType
  • 创建分析时,您会收到错误代码 DatasetRulesUserDenied

注意:使用 RLS 时,请考虑以下几点:

  • RLS 仅适用于 QuickSight 的企业版。
  • RLS 仅支持文本数据,例如数据集规则中的字段的字符串、char 和 varchar。目前,RLS 不适用于日期或数值字段。
  • 每个用户应用的完整规则记录集不得超过 999。规则超过 999 的数据集可能无法将 RLS 规则应用于数据集。
  • 您无法将 RLS 应用于具有默认 null 值的空行,因为 QuickSight 将 null 视为空字段值。但是,字段中的空格被视为文字值,因此数据集规则适用于这些行。
  • 只有添加到数据集规则的用户才能根据定义的规则查看数据。其他用户不能查看数据。
  • 在数据集规则中使用多个字段时,规则作为 AND 运算符运行。目前不支持 OR 运算符。
  • 基于 RLS 标签的规则仅适用于使用 GenerateEmbedUrlForAnonymousUser API 的匿名用户的嵌入式控制面板。如果您使用 GenerateEmbedUrlForRegisteredUser API 为注册的用户嵌入了控制面板,则考虑使用用户级规则。

解决方法

我无法在 QuickSight 嵌入式控制面板中查看匿名用户的任何数据

如果您对匿名嵌入式控制面板使用基于标签的规则,则无法查看或修改数据。要查看数据,必须将基于用户的 RLS 规则添加到数据集。

在以下示例数据集规则中,John Stiles 只能查看物流部门的数据,而 Martha Rivera 可以查看数据集中的所有数据。

UserName,Department 
JohnStiles,Logistics 
MarthaRivera,

注意:您可以对数据集应用基于标签的规则和基于用户的 RLS 规则。

受限制的用户仍然可以查看所有数据

如果数据集包含太多规则,那么即使您成功应用了 RLS,受限制的用户仍然可以查看所有数据。要解决此问题,请确保您的数据集仅包含 999 条或更少的规则。如果您通过 UserName 限制用户,并且数据集规则中有超过 999 个用户,请创建 QuickSight 组。将用户添加到组,然后在数据集规则中使用 GroupName 而不是 UserName

不受限制的用户无法查看任何数据

以下是不受限制的用户无法查看数据的可能原因:

  • 用户不存在于数据集规则中。检查数据集规则以验证所有目标用户都在那里。
  • UserNameGroupName 与 QuickSight 中的用户或组不匹配。检查数据集规则中的 UserNameGroupName 以验证它们与 QuickSight 中的用户或组匹配。

当您应用 RLS 时,您收到错误代码 DatasetRulesInvalidColType

当您将 RLS 用于日期或数值字段时,会出现 DatasetRulesInvalidColType 错误。

检查数据集规则中用于评估 RLS 的字段,以验证数据类型是否为 String(字符串)。您还可以通过编辑数据集在 QuickSight 中将数值字段转换为 String(字符串)。

创建分析时,您会收到错误代码 DatasetRulesUserDenied

当用户不在数据集规则中时,会发生此 DataRulesUserDenied 错误。要解决此错误,请将用户添加到数据集规则,然后刷新数据集