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

AWS S3调用listObjects遇权限拒绝问题排查求助

解决S3 listObjects Access Denied问题的关键配置修正

你遇到的核心问题是Cognito未认证角色的IAM权限范围不匹配:listObjects是针对存储桶本身的操作,而你当前的策略只授权了桶内对象(arn:aws:s3:::thisusesmybucketname/*)的权限,没有授权桶级别的列表操作权限。

步骤1:修正IAM策略

修改你的未认证角色策略,添加桶级别的s3:ListBucket权限,同时遵循最小权限原则(避免使用s3:*,只授予必要操作),示例策略如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::thisusesmybucketname"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": "arn:aws:s3:::thisusesmybucketname/*"
    }
  ]
}
  • 第一个Statement授权桶本身的列表操作(对应你代码里的listObjects调用)
  • 第二个Statement授权桶内对象的上传、下载、删除操作,正好覆盖你后续管理音频文件的需求

步骤2:验证关键配置细节

  1. 桶名称一致性:确保IAM策略中的桶名和代码里的albumBucketName完全一致(S3桶名大小写敏感,且全局唯一,拼写错误会直接导致权限失效)
  2. 角色关联确认:在Cognito身份池控制台,检查未认证用户对应的角色确实是你修改了策略的那个角色,避免配置串错
  3. CORS优化(可选):当前CORS配置允许所有来源*,生产环境建议限制为你的网站域名,比如<AllowedOrigin>https://your-domain.com</AllowedOrigin>,进一步提升安全性

为什么公开桶能正常工作?

当你把桶设置为公开读写时,S3会自动添加桶策略允许所有用户执行listObjects和对象操作,所以不需要IAM角色授权就能访问。但这种方式确实不安全,你的私有桶+IAM角色的思路是正确的,只需要补全桶级权限即可。

内容的提问来源于stack exchange,提问作者Reactive

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:27:41