1

How do you set a key on S3 using Boto so you won't accidentally overwrite it later? Is there a way to make it read-only or at least give you some sort of error if you eventually try to write to the same key again.

I've tried changing ACLs, both the key's and the bucket's, and nothing seemed to make any difference.

When I remove the write permission using DragonDisk (so it becomes <Policy: roddds (owner) = READ, roddds (owner) = READ_ACP>), but if I run keyfile.set_contents_from_string() it changes it back to full control.

I am accessing the bucket as the owner.

4

2 回答 2

1

bucketobject将始终拥有,FULL_CONTROL即使使用最严格的 ACL private:请参阅S3 ACL 概述。如果不是这样,所有者将如何删除他或她设置为只读的对象?

在将密钥写入 S3 之前检查密钥是否存在:

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访问您的存储桶。然后,当您创建密钥(使用您的所有者凭据)时,将 ACL 设置为authenticated-read.

于 2013-05-23T20:55:49.897 回答
0

所有者确实具有无法剥夺的访问权限。但是,您可以采取一些措施来保护自己免受伤害。

首先,在存储桶上启用版本控制。然后,即使您确实删除了一个对象,除非您明确删除对象 versionId,否则它也不会真正被删除。您仍然可以找到旧版本并恢复它们。您可以在此处找到有关存储桶版本控制的更多信息

其次,如果您真的非常不想意外删除 S3 上的对象,请查看 MFA 删除功能。这是您可以在版本化存储桶上启用的功能。启用后,要删除任何对象,您必须从 MFA 设备实际提供令牌。有关更多详细信息,请参阅内容。

于 2013-05-23T22:56:37.880 回答