如何在python中公开s3存储桶

har*_*der 2 python amazon-s3

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

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

b.set_acl('公开阅读')

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

我想从 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')
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 5

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

请参阅:管理对 S3 资源的访问(访问策略选项)中的“存储桶策略”

您可以通过boto在 Python 中执行此操作put_bucket_policy()

put_bucket_policy(**kwargs)

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

请求语法

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

请参阅存储桶策略示例以查找合适的策略。

这是使整个存储桶公开可读的策略(只需插入您自己的存储桶名称):

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)