boto s3 桶与 get_bucket

boto s3 Bucket versus get_bucket

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

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 我只看到验证检查。还有什么吗?

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

get_bucket() 需要 s3:listObject 许可

get_key()只需要s3:GetObject权限

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

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

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