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

S3桶可上传文件但无法列出,权限问题求助

为何S3能上传文件却无法列出对象?

问题场景

用Python脚本上传S3桶文件正常,但执行文件列表操作时返回Permission Denied错误。

初始IAM策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "arn:aws:s3:::notes-sync-test/*"
        }
    ]
}

对应Python代码

import boto3

s3 = boto3.resource(
    service_name='s3',
    region_name='us-east-1',
    aws_access_key_id='XXX',
    aws_secret_access_key='ZZZZ'
)

bucket_name = "notes-sync-test"
bucket = s3.Bucket(bucket_name)

# 可正常执行 - 上传新文件 
data = open('test.pdf', 'rb')
s3.Bucket(bucket_name).put_object(Key='test.pdf', Body=data)

# 执行失败 - 列出对象
for my_bucket_object in bucket.objects.all():
   print(my_bucket_object.key)

补充:若添加对桶本身的资源权限(如下策略),则上传和列表操作均正常:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "arn:aws:s3:::notes-sync-test/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "arn:aws:s3:::notes-sync-test"
        }
    ]
}

原因分析

S3权限控制区分桶级别操作和对象级别操作,对应资源ARN格式不同:

  • 对象级别操作(如PutObject上传文件):目标是桶内具体对象,资源ARN为arn:aws:s3:::<bucket-name>/*,初始策略已覆盖此范围,因此上传正常。
  • 桶级别操作(如ListBucket列出对象,对应boto3的bucket.objects.all()调用):目标是桶本身,需要对桶的ARN(arn:aws:s3:::<bucket-name>)赋予权限,初始策略未包含此资源,因此列表操作被拒绝。

补充策略新增了对桶本身的资源权限,桶级别列表操作获得授权,因此功能恢复正常。

优化建议(最小权限原则)

无需授予s3:*全权限,可根据实际需求配置最小权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::notes-sync-test/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::notes-sync-test"
        }
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:34:27