用B将S3上的文件设置为只读

2024-07-02 13:34:59 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用Boto在S3上设置一个密钥,以便以后不会意外地覆盖它?有没有办法使它成为只读的,或者如果你最终再次尝试写同一个键,至少会给你一些错误。在

我尝试过更改acl,包括密钥和bucket,但似乎没有任何区别。在

当我使用DragonDisk删除write权限时(因此它变成了<Policy: roddds (owner) = READ, roddds (owner) = READ_ACP>),但如果我运行keyfile.set_contents_from_string(),它会将其更改回完全控制。在

我以主人的身份进入水桶。在


Tags: 权限reads3bucket错误policy密钥boto
2条回答

所有者确实拥有不可剥夺的访问权限。但是,你可以做一些事情来保护自己。在

首先,在bucket上启用版本控制。那么,即使你删除了一个对象,它也不会真正被删除,除非你显式地删除对象versionId。您仍然可以找到旧版本并恢复它们。您可以找到有关bucket版本控制的更多信息here

其次,如果S3上的对象确实不想意外删除,请查看MFA删除功能。这是一个可以在版本控制的bucket上启用的功能。启用后,要删除任何对象,必须从MFA设备实际提供令牌。有关详细信息,请参见this。在

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

在将密钥写入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用户,并对bucket进行READ访问。然后,当您创建密钥(使用所有者凭据)时,将ACL设置为authenticated-read。在

相关问题 更多 >