我正在寻找一种解决方案,可以在启用Vault Lock的情况下将Amazon S3对象移动到Glacier(如此处所述https://aws.amazon.com/blogs/aws/glacier-vault-lock/)。如果可能的话,我想使用亚马逊内置的工具(生命周期管理或其他)。
我找不到任何指示或选项来做到这一点。 S3似乎只允许将对象移动到Glacier存储类。但这并不能提供数据完整性,也不能抵御数据丢失。
我知道我可以用一个程序来做。它将下载S3对象并通过各自的REST API将其移动到Glacier。对于这个简单的任务,这种方法似乎过于复杂。
答案 0 :(得分:4)
这样想:
Glacier是AWS的服务。
S3是AWS的服务。
但S3也是Glacier服务的客户。
当您将S3中的对象迁移到Glacier存储类时,S3会使用S3拥有的AWS账户将对象存储在Glacier中。
S3中使用GLACIER
存储类的对象不属于“您的”Glacier保险库,它们属于S3拥有的保险库。
这与外部可观察到的证据一致:
您无法在Glacier控制台的保险库中看到这些S3对象。
您无需向S3授予访问Glacier的任何IAM权限(相反,您执行必须授予S3权限才能向SQS,SNS或Lambda发布事件通知)
Glacier不会向您收取Glacier存储类对象的费用 - S3会这样做。
从这个角度来看,你想要完成的事情是完全不同的。您希望使用 策略在您的 Glacier保险库中存储一些档案,并且该内容目前只是“碰巧”存储在S3中。
从S3下载然后上传到Glacier是解决方案。
但这并不能提供数据完整性,也不能防止数据丢失。
上传到Glacier时可以确保有效负载的完整性,因为树形散列算法可以有效地防止损坏的上载。
从S3下载,除非对象与SSE-C一起存储,否则如果使用单部分上载,ETag是存储对象的MD5哈希,或者是连接二进制的十六进制编码的MD5哈希 - 编码MD5的部件哈希值,后跟-
和部件数量。理想情况下,在上传到S3时,您可以在对象元数据中存储更好的哈希值(例如sha256),例如: x-amz-meta-content-sha256
。
防御数据丢失 - 是的,Glacier确实提供了更多功能,但这里S3并不完全没有可兼容性:具有匹配DENY
操作的存储桶策略将覆盖任何冲突的ALLOW
操作,无论是在存储桶策略中还是任何其他IAM策略(例如角色,用户)。