语境
我想让一台机器在整点上传一个文件 dump.rdb 到 s3/blahblahblah/YEAR-MONTH-DAY-HOUR.rdb。
因此,我需要这台机器能够将新文件上传到 S3。
但是,我不希望这台机器能够 (1) 删除现有文件或 (2) 覆盖现有文件。
从某种意义上说,它只能“追加”——它只能添加新对象。
问题:
有没有办法像这样配置 S3 设置?
谢谢!
我想让一台机器在整点上传一个文件 dump.rdb 到 s3/blahblahblah/YEAR-MONTH-DAY-HOUR.rdb。
因此,我需要这台机器能够将新文件上传到 S3。
但是,我不希望这台机器能够 (1) 删除现有文件或 (2) 覆盖现有文件。
从某种意义上说,它只能“追加”——它只能添加新对象。
有没有办法像这样配置 S3 设置?
谢谢!
我还不能发表评论,所以这是对@Viccari 答案的改进......
答案具有误导性,因为它仅针对您的要求中的#1,而不是#2。事实上,尽管您可以启用版本控制,但使用任何一种方法似乎都无法防止覆盖现有文件。请参阅此处:用于只读和一次写入访问的 Amazon S3 ACL。
因为您在文件名中添加了时间戳,所以您或多或少地解决了这个问题。(在文件名中对每个文件的“版本”进行编码的其他方案也是如此:时间戳、UUID、哈希。)但是,请注意,您并没有真正受到保护。您的代码中的错误或同一小时内的两次上传会导致文件被覆盖。
是的,有可能。
有两种方法可以向存储桶及其内容添加权限:存储桶策略和存储桶 ACL。您可以通过使用存储桶策略来实现您想要的。另一方面,存储桶 ACL 不允许您在不授予“删除”权限的情况下授予“创建”权限。
1-Bucket Policies:
您可以创建存储桶策略(请参阅此处的一些常见示例),例如,允许特定 IP 地址具有特定权限。
例如,您可以允许:s3:PutObject
和不允许s3:DeleteObject
。
可以在此处找到有关存储桶策略中 S3 操作的更多信息。
2-Bucket ACL:
使用Bucket ACL,您只能授予完整的“写入”权限,即如果给定用户能够添加文件,他也能够删除文件。
这是不可能的!S3 是一个键/值存储,因此本质上不支持仅附加。S3 的 PUT/cp 命令总是可以覆盖文件。通过在您的存储桶上启用版本控制,您仍然可以安全地防止上传文件的帐户受到威胁。