Flutter应用使用AWS Amplify Storage时遭遇S3访问拒绝问题
排查AWS Amplify Storage列表S3文件时的访问拒绝问题
针对你遇到的Error listing files: S3 access denied when making the API call.错误,结合现有配置(IAM策略正常、存储桶开启阻止公共访问、无外部桶策略),可按以下步骤排查:
检查IAM权限限制
- 确认该IAM用户是否被权限边界或AWS组织的**服务控制策略(SCP)**限制了
s3:ListBucket操作,全局策略变更可能会覆盖用户级权限。 - 使用IAM控制台的策略模拟器,针对目标存储桶测试
s3:ListBucket操作,验证权限是否实际生效。
- 确认该IAM用户是否被权限边界或AWS组织的**服务控制策略(SCP)**限制了
核对Amplify Storage配置
- 检查本地Amplify配置文件(如
aws-exports.js)是否被意外修改,确认存储桶名称、区域与实际一致,可执行amplify status确认存储资源配置状态。 - 确认代码中使用的Amplify Storage访问模式(
private/protected/public)是否正确:由于存储桶开启了阻止公共访问,误用public模式会直接导致访问拒绝。
- 检查本地Amplify配置文件(如
检查存储桶及对象的权限细节
- 确认存储桶的对象所有权设置为「桶所有者优先」,避免对象ACL覆盖IAM策略权限。
- 若使用Cognito身份池:检查身份池关联的角色权限是否被修改,或Cognito用户所属分组的权限是否被移除,临时凭证权限失效也会引发此类错误。
查看CloudTrail日志定位具体原因
- 在CloudTrail中搜索目标存储桶的访问事件,找到标记为
AccessDenied的记录,查看errorCode和errorMessage字段,里面会给出拒绝访问的具体原因(如资源ARN不匹配、权限被SCP阻断等)。
- 在CloudTrail中搜索目标存储桶的访问事件,找到标记为
确认存储桶ARN的准确性
- 核对IAM策略中的存储桶ARN与实际存储桶ARN是否完全一致,注意S3存储桶名称大小写敏感,任何拼写错误都会导致权限不匹配。
内容的提问来源于stack exchange,提问作者Pratham Dave
相关产品推荐
相关产品推荐

