我正在寻找一种在启用保管库锁定的情况下将Amazon S3对象移动到Glacier的解决方案(如此处所述https://aws.amazon.com/blogs/aws/glacier-vault-lock/)。如果可能的话,我想使用Amazon内置的工具(生命周期管理或其他工具)。
我找不到任何说明或选项来做到这一点。S3似乎只允许将对象移动到Glacier存储类。但这既不能提供数据完整性,也不能防御数据丢失。
我知道我可以用一个程序来做。它将下载S3对象,并将其通过各自的REST API移至Glacier。对于这个简单的任务,这种方法似乎太复杂了。
这样看待它:
Glacier是AWS的服务。
S3是AWS的服务。
但是S3也是Glacier服务的客户。
当您将S3中的对象迁移到Glacier存储类时,S3使用S3拥有的AWS帐户将对象存储在Glacier ...中。
S3中使用 GLACIER
存储类的不在“您的” Glacier保管库中,而是在S3拥有的保管库中。
这与外部可观察的证据一致:
您无法从Glacier控制台在保管库中看到这些S3对象。
你不必给S3任何IAM访问权限的冰川(相比之下,你就必须给S3权限发布事件通知SQS,SNS,或λ)
Glacier不会为Glacier存储类对象向您收费-S3会向您收费。
因此,您要完成的工作完全不同。你想一些档案存放在你的冰川库,与您政策,而且内容目前只是“碰巧”在目前存储在S3。
解决方案是从S3下载然后上传到Glacier。
但这既不能提供数据完整性,也不能防御数据丢失。
当上传到Glacier时,可以确保有效载荷的完整性,因为树哈希算法可有效防止损坏的上传。
从S3下载,除非使用SSE-C存储对象,否则如果使用单部分上传,则ETag是存储对象的MD5哈希值,或者是ETag是串联的二进制编码MD5哈希值的十六进制编码MD5哈希值。零件数,然后是-
和零件数。理想情况下,当上传到S3时,应在对象元数据中存储更好的哈希值(例如sha256),例如x-amz-meta-content-sha256
。
防御数据丢失-是的,Glacier确实在此处提供了更多功能,但是S3并非在这里完全没有能力:具有匹配DENY
操作的存储桶策略将始终覆盖任何冲突的ALLOW
操作,无论是在存储桶策略中还是在任何其他IAM策略中(例如角色,用户)。