如何使用 Boto 在 S3 上设置 key ,以免以后意外覆盖它?有没有办法让它只读,或者如果您最终尝试再次写入同一个键,至少会出现某种错误。
我尝试过更改 ACL,包括 key 和存储桶的 ACL,但似乎没有任何区别。
当我删除write
时使用 DragonDisk 的权限(所以它变成 <Policy: roddds (owner) = READ, roddds (owner) = READ_ACP>
),但是如果我运行 keyfile.set_contents_from_string()
它将其更改回完全控制。
我正在以所有者身份访问该存储桶。
最佳答案
存储桶
或对象
的所有者将始终拥有FULL_CONTROL
,即使使用最严格的ACL private
:参见S3 ACL Overview 。如果不是这种情况,所有者如何删除他或她设置为只读的对象?
在将 key 写入 S3 之前检查 key 是否存在:
from boto.s3.connection import S3Connection
from boto.s3.key import Key
conn = S3Connection(ACCESS_KEY, SECRET_ACCESS_KEY)
bucket = conn.get_bucket(MY_BUCKET_NAME)
key = Key(bucket, MY_KEY_NAME)
if not bucket.get_key(key.name):
key.set_contents_from_string("foo")
或者,您可以尝试为您的 Boto 程序设置不同的 AWS 用户,并对您的存储桶具有READ
访问权限。然后,当您创建 key (使用您的所有者凭据)时,将 ACL 设置为 authenticated-read
。
关于python - 使用 Boto 将 S3 上的文件设置为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16723052/