代码之家  ›  专栏  ›  技术社区  ›  franchyze923

不能用boto3列出bucket中的所有对象,但可以用AWS CLI列出

  •  0
  • franchyze923  · 技术社区  · 4 年前

    我在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 
    

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

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

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

    0 回复  |  直到 4 年前