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