如何在python中使s3桶公开

时间:2016-07-05 06:40:32

标签: python amazon-s3

我在亚马逊s3中已经创建了一个桶。我想在没有任何身份验证的情况下公开其内容。我试过boto的文件

  

要为存储桶设置固定ACL,请使用Bucket对象的set_acl方法。传递给此方法的参数必须是acl.py中包含的CannedACLStrings列表中指定的四个允许的预设策略之一。例如,要使任何人都可读取桶:

     
    
      

b.set_acl( '公共读')

    
  

它不起作用。我仍然无法公开访问我的文件。但是,为单个文件设置acl public-read是有效的。

我想从python公开它,因为我无法访问s3控制台。

我希望整个桶可以公开阅读。

我的代码是

    conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = 's3.amazonaws.com',
        #is_secure=False,               # uncomment if you are not using ssl
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )
bucket = conn.get_bucket('media_library')
bucket.set_acl('public-read')

1 个答案:

答案 0 :(得分:1)

您需要创建一个 Bucket Policy ,它定义了整个存储桶的权限。

请参阅:Managing Access to S3 Resources (Access Policy Options)

中的“广告投放管理政策”

您可以使用put_bucket_policy()中的boto通过Bucket Policy Examples

执行此操作
  

<强> put_bucket_policy(** kwargs)

     

替换存储桶上的策略。如果存储桶已有策略,则此请求中的策略将完全替换它。

     

请求语法

     

response = client.put_bucket_policy(Bucket='string', Policy='string')

请参阅{{3}}以找到合适的政策。

这是一项政策,使整个存储桶可以公开阅读(只需插入您自己的存储桶名称):

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}