问题描述
我想与多个客户共享一个嵌入式的Quicksight仪表板。
我为公司设置了一个大型仪表板以访问整个数据。 现在的问题是,我只想为每个客户端共享他们自己的数据。
我知道我可以基于包含数据库名称的字段使用RLS之类的解决方案来过滤行。 但是我不知道执行它的最佳方法是什么? (RLS在这里只是一个选择)
问题的第二部分。 我将包含新的客户数据,但是如何与新客户共享呢? 我需要一个自动解决方案。
致谢。
解决方法
您可以使用行级安全性来仅允许用户或组访问数据的子集。为此,请创建一个权限数据集,说明谁(用户或组)可以访问哪些行,然后通过“行级安全性”按钮附加权限数据集。
对于我的用例,我为每个客户帐户创建一个Quicksight组(使用boto3 create_group),然后将单个用户添加到组中(使用boto3 create_group_membership)。组名是帐户ID,因为它不会更改;描述是帐户名。
权限数据集指定组的成员可以看到匹配的帐户。这些值将是相同的,因为组名是帐户ID。例如,此CSV表示abc123
组的成员只能看到account_id
字段为abc123
的行:
account_id,GroupName
abc123,abc123
要将帐户添加到Quicksight:
- 通过create_group为该帐户创建一个Quicksight组
- 从数据库中的帐户列表中(重新)创建权限数据集
- 将权限数据集上传到S3
- 使用create_ingestion 获取权限数据集
要允许用户访问Quicksight数据,请执行以下操作:
- 通过register_user和Quicksight创建Quicksight用户
- 通过create_group_membership将用户添加到帐户组中
另请参阅亚马逊的row level security docs。