You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:24:02