跨账户S3数据源QuickSight使用URIPrefixes报错MANIFEST_NO_FILES_FOUND
解决QuickSight使用URIPrefixes访问跨账户S3桶的MANIFEST_NO_FILES_FOUND错误
以下是可能的遗漏配置和排查方向:
1. 补充S3桶策略的前缀列表权限
使用URIPrefixes时,QuickSight需要枚举前缀下的所有文件,因此跨账户S3桶的策略必须包含针对桶的s3:ListBucket权限,且限定前缀范围。单个文件能访问仅说明s3:GetObject权限生效,缺少列表权限会导致前缀无法识别有效URI。示例桶策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::QUICKSIGHT_ACCOUNT_ID:role/service-role/AmazonQuickSightAccessForS3" }, "Action": ["s3:GetObject", "s3:GetObjectVersion"], "Resource": "arn:aws:s3:::my-costanalysis-bucket/data/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::QUICKSIGHT_ACCOUNT_ID:role/service-role/AmazonQuickSightAccessForS3" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::my-costanalysis-bucket", "Condition": { "StringLike": { "s3:prefix": "data/*" } } } ] }
2. 验证QuickSight关联IAM角色的权限
如果您使用自定义IAM角色而非默认的AmazonQuickSightAccessForS3,需确保:
- 角色拥有目标桶的
s3:ListBucket权限(带前缀条件) - 角色拥有前缀下所有对象的
s3:GetObject权限 - 角色的信任策略允许
quicksight.amazonaws.com服务扮演该角色
3. 检查manifest.json的格式细节
确保URIPrefixes的配置完全合规:
- 前缀必须以
/结尾(您当前的s3://my-costanalysis-bucket/data/格式正确,需避免末尾无斜杠或多余字符) - 整体结构无语法错误,示例正确结构:
{ "fileLocations": [ { "URIPrefixes": [ "s3://my-costanalysis-bucket/data/" ] } ], "globalUploadSettings": { "format": "CSV", "delimiter": ",", "textqualifier": "\"", "containsHeader": "true" } }
4. 确认前缀路径下存在有效文件
虽然单个文件可访问,但需验证s3://my-costanalysis-bucket/data/下确实存在符合格式的文件(如CSV/GZ),无隐藏文件或权限异常文件。可通过AWS CLI执行命令确认:
aws s3 ls s3://my-costanalysis-bucket/data/ --recursive
若返回空结果,说明前缀下无有效文件,会触发该错误。
5. 核对区域一致性
确保QuickSight账户的区域与S3桶的区域完全匹配(例如都是us-east-1,而非us-east-1和us-east-1a),区域不匹配会导致文件列表操作失败。
内容的提问来源于stack exchange,提问作者ravm
相关产品推荐
相关产品推荐

