【问题标题】:boto s3 Bucket versus get_bucketboto s3 Bucket 与 get_bucket
【发布时间】:2017-03-13 16:49:02
【问题描述】:

我尝试访问存储桶中的密钥,但我没有权限访问该密钥。 为了能够做到get_key('this/is/my_key'),我需要bucket对象:

conn = boto.connect_s3(key, secret_key)
my_bucket = conn.get_bucket('a_bucket')

产生S3ResponseError: S3ResponseError: 403 Forbidden

另一方面,以下工作

my_bucket = boto.s3.bucket.Bucket(conn, 'a_bucket')
my_bucket.get_key('this/is/my_key')

问题:创建对象Bucket和使用get_bucket方法有什么区别? 检查docu 我只看到验证检查。还有什么?

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案1】:

    get_bucket 中的验证(validate=True 默认)在调用时检查存储桶是否存在。由于您无权访问存储桶,因此您的请求被拒绝 (403)。在另一种情况下,类实例化似乎没有进行验证,因此 get_key 方法按预期工作。

    【讨论】:

    • 是的.. 看起来这是唯一的区别。与validate=False 一起工作
    【解决方案2】:

    get_bucket() 需要 s3:listObject 权限

    get_key() 只需要 s3:GetObject 权限

    因此,以下行不会创建任何存储桶。

    my_bucket = boto.s3.bucket.Bucket(conn, 'a_bucket')
    

    它只是创建了一个指向存储桶的 python 对象类。只要您没有执行任何与存储桶相关的任务,就不会出现错误。如果您可以正确执行 get_key(),则表示您已获得存储桶的 s3:GetObject 权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2011-01-22
      • 2023-03-28
      相关资源
      最近更新 更多