我在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拒绝访问。
aws s3 ls s3://bucket_name --recursive
for file in my_bucket.objects.filter(Prefix="dir_name/sub_dir"):
print(file.key)
据我所知,我使用的是IAM角色凭据,没有凭据文件或env。变量是在我的机器上设置的。我要列出的桶在我的AWS帐户之外。
让我困惑的是为什么我看到AWS CLI和boto3的行为略有不同。我相信我有正确的列表桶策略,因为我可以使用awscli进行列表。这是一个有缺陷的假设吗?