无法使用boto3列出bucket中的所有对象,但可以使用AWS CLI列出

2024-04-26 04:46:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在boto3上遇到了一个问题,我不能仅仅通过提供bucket名称来列出bucket中的所有对象。当我只提供bucket名称时,我会遇到访问被拒绝的问题。但是,我可以使用aws s3 ls s3://bucket_name,并且可以查看所有对象

import boto3
s3 = boto3.resource('s3')

my_bucket = s3.Bucket('bucket_name')

for file in my_bucket.objects.all():
    print(file.key)

上述gode拒绝访问

enter image description here

aws s3 ls s3://bucket_name --recursive 

这段代码有效,它列出了从顶级前缀开始的所有内容

在boto3中,如果我指定一个特定的前缀,向下两级我可以列出所有对象。像这样

for file in my_bucket.objects.filter(Prefix="dir_name/sub_dir"):
    print(file.key)

据我所知,我正在使用IAM角色凭据,因为没有凭据文件或env。变量在我的机器上设置。我试图列出的桶在我的AWS帐户之外

让我困惑的是,为什么AWS CLI和boto3的行为略有不同。我相信我有正确的列表桶策略,因为我可以使用AWS CLI进行列表。这是一个有缺陷的假设吗


Tags: 对象namein名称awsforobjectss3

热门问题