AWS Quicksight通过Boto3创建仪表盘报ACCESS_DENIED错误如何解决
问题原因
- QuickSight的资源权限体系仅支持QuickSight内部主体(用户、群组)授权,不支持普通IAM角色、Lambda执行角色这类IAM层面的主体,这就是你给Lambda执行角色授予数据集权限时触发
only QuickSight principals are supported at this point报错的根本原因。 - CloudShell执行命令可以成功,是因为你登录CloudShell所用的AWS账号身份,已经提前被添加为QuickSight的授权用户,天然具备CUDOS模板、已创建数据集的访问权限。
- Lambda运行时默认使用自身的执行角色调用API,该执行角色未被注册为QuickSight的内部用户,因此访问数据集、模板源时就会触发
ACCESS_DENIED报错。
解决方案
- 首先将Lambda执行角色注册为QuickSight的合法用户:进入QuickSight控制台,点击右上角「管理QuickSight」→「管理用户」→「添加用户」,用户类型选择「IAM角色」,填入Lambda执行角色的ARN,权限等级至少选择「作者」。
- 完成注册后,再给这个已经被QuickSight识别的Lambda执行角色授予已创建数据集的访问权限,此时就不会再触发无效主体的报错。
- 给Lambda执行角色的IAM权限策略中添加QuickSight相关操作权限,参考策略片段如下:
{ "Effect": "Allow", "Action": [ "quicksight:CreateDashboard", "quicksight:DescribeTemplate", "quicksight:DescribeDataSet", "quicksight:PassDataSet" ], "Resource": [ "arn:aws:quicksight:*:<你的AWS账号ID>:template/*cudos*", "arn:aws:quicksight:*:<你的AWS账号ID>:dataset/*", "arn:aws:quicksight:*:<你的AWS账号ID>:dashboard/*" ] }
- 调用
create_dashboardAPI时,确认SourceEntity中填写的CUDOS模板ARN为当前区域可用的公开模板ARN,同时TemplateVersion参数填写模板当前有效的版本号,避免版本不兼容引发的隐藏权限报错。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

