如何在启用Vault Locked的情况下将对象从Amazon S3移动到Glacier?

时间:2017-01-24 07:44:23

标签: amazon-s3 data-integrity amazon-glacier

我正在寻找一种解决方案,可以在启用Vault Lock的情况下将Amazon S3对象移动到Glacier(如此处所述https://aws.amazon.com/blogs/aws/glacier-vault-lock/)。如果可能的话,我想使用亚马逊内置的工具(生命周期管理或其他)。

我找不到任何指示或选项来做到这一点。 S3似乎只允许将对象移动到Glacier存储类。但这并不能提供数据完整性,也不能抵御数据丢失。

我知道我可以用一个程序来做。它将下载S3对象并通过各自的REST API将其移动到Glacier。对于这个简单的任务,这种方法似乎过于复杂。

1 个答案:

答案 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策略(例如角色,用户)。