Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Ceph radosgw-存储桶策略-默认情况下将所有对象公开读取_Python_Amazon S3_Boto_Ceph_Radosgw - Fatal编程技术网

Python Ceph radosgw-存储桶策略-默认情况下将所有对象公开读取

Python Ceph radosgw-存储桶策略-默认情况下将所有对象公开读取,python,amazon-s3,boto,ceph,radosgw,Python,Amazon S3,Boto,Ceph,Radosgw,我和一群非开发人员一起工作,他们正在通过radosgw将对象上传到s3风格的bucket中。所有上传的对象都需要公开,但不能通过编程实现。是否有一种方法可以使对象的默认权限公开读取,这样就不必每次都手动设置?必须有一种方法可以通过boto实现这一点,但我还没有找到任何示例。使用AWS的GUI时会有一些浮动,但这不是我的选择( 我正在创建这样一个桶: #!/usr/bin/env python import boto import boto.s3.connection access_key =

我和一群非开发人员一起工作,他们正在通过radosgw将对象上传到s3风格的bucket中。所有上传的对象都需要公开,但不能通过编程实现。是否有一种方法可以使对象的默认权限公开读取,这样就不必每次都手动设置?必须有一种方法可以通过
boto
实现这一点,但我还没有找到任何示例。使用AWS的GUI时会有一些浮动,但这不是我的选择(

我正在创建这样一个桶:

#!/usr/bin/env python

import boto
import boto.s3.connection

access_key = "SAMPLE3N84XBEHSAMPLE"
secret_key = "SAMPLEc4F3kfvVqHjMAnsALY8BCQFwTkI3SAMPLE"

conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = '10.1.1.10',
        is_secure=False,
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )

bucket = conn.create_bucket('public-bucket', policy='public-read')
key = bucket.new_key('thefile.tgz')
key.set_contents_from_filename('/home/s3newbie/thefile.tgz')
key.set_canned_acl('public-read')
我将策略设置为public read,这似乎允许人们将bucket作为目录浏览,但bucket中的对象不继承此权限

>>> print bucket.get_acl()
<Policy: http://acs.amazonaws.com/groups/global/AllUsers = READ, S3 Newbie (owner) = FULL_CONTROL>

但我的最终用户无法做到这一点,因此我需要一种方法使其成为上传文件的默认权限。

我找到了解决问题的方法

首先,非常感谢joshbean发布了以下内容:

我注意到他在使用boto3库,所以我开始用它来连接

import boto3
import json

access_key = "SAMPLE3N84XBEHSAMPLE"
secret_key = "SAMPLEc4F3kfvVqHjMAnsALY8BCQFwTkI3SAMPLE"

conn = boto3.client('s3', 'us-east-1',
                    endpoint_url="http://mycephinstance.net",
                    aws_access_key_id = access_key,
                    aws_secret_access_key = secret_key)

bucket = "public-bucket"

bucket_policy = {
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::{0}/*".format(bucket)]
    }
  ]
}

bucket_policy = json.dumps(bucket_policy)
conn.put_bucket_policy(Bucket=bucket_name, Policy=bucket_policy)
现在,当一个对象上传到公共bucket中时,它可以匿名下载,而无需显式地将密钥权限设置为public read或生成下载URL

如果您正在这样做,请确保任何人都可以下载这些内容。特别是如果您的radosgw服务可以在互联网上公开访问。