如何指定namespace查询AWS Quicksight中的可用仪表盘列表
Quicksight指定Namespace下可用仪表盘查询方案
Quicksight的ListDashboardsAPI确实原生不支持传入namespace参数做过滤,可通过以下两种常用方案实现需求:
方案1:标签预标记+客户端过滤
适合单账号仪表盘数量少于1000的中小型场景,实现成本最低:
- 前期创建租户关联仪表盘时,统一给所有仪表盘添加固定key的标签,例如标签key为
quicksight_tenant_namespace,value为对应租户的namespace名称 - 调用
ListDashboardsAPI拉取账号下全量仪表盘基础信息 - 遍历所有仪表盘,调用
ListTagsForResourceAPI查询每个仪表盘的标签,筛选出标签值匹配目标namespace的仪表盘即可
你也可以在调用
ListDashboards时传入MaxResults=100参数做分页查询,避免单次拉取数据量过大
方案2:权限隔离实现自动过滤
适合多租户严格隔离的生产场景,查询效率更高:
- 为每个namespace单独创建对应的IAM角色/Quicksight自定义权限策略,策略中仅允许访问该namespace租户关联的仪表盘资源
- Lambda调用
ListDashboardsAPI时,先切换为目标namespace绑定的权限角色,再发起API请求,返回结果自动为该角色有权限访问的、对应namespace下的仪表盘,不需要额外做客户端过滤
该方案同时满足多租户权限隔离要求,避免跨租户数据泄露风险
可选补充方案
如果你的多租户隔离是通过将仪表盘共享给对应namespace下的用户/组实现的,不需要提前打标签,也可以按以下逻辑实现:
- 调用
ListGroups/ListUsersAPI,指定Namespace参数拉取目标namespace下的用户/组ARN - 遍历全量仪表盘,调用
ListDashboardPermissionsAPI查询仪表盘的共享权限,匹配到对应namespace的用户/组ARN则加入结果集
该方案不需要修改现有打标逻辑,但API调用次数多,查询耗时更长,仅适合临时查询或仪表盘量级极小的场景
Python Boto3 代码示例(方案1实现)
import boto3 quicksight_client = boto3.client("quicksight") AWS_ACCOUNT_ID = "替换为你的AWS账号ID" TARGET_NAMESPACE = "替换为待查询的目标namespace" # 拉取全量仪表盘,支持分页 dashboards_response = quicksight_client.list_dashboards( AwsAccountId=AWS_ACCOUNT_ID, MaxResults=100 ) matched_dashboards = [] for dashboard in dashboards_response["DashboardSummaryList"]: # 查询仪表盘关联标签 tags_response = quicksight_client.list_tags_for_resource( ResourceArn=dashboard["Arn"] ) # 匹配namespace标签 for tag in tags_response["Tags"]: if tag["Key"] == "quicksight_tenant_namespace" and tag["Value"] == TARGET_NAMESPACE: matched_dashboards.append(dashboard) break # matched_dashboards即为目标namespace下的可用仪表盘 print(matched_dashboards)
内容的提问来源于stack exchange,提问作者Jonathan Smith
相关产品推荐
相关产品推荐

