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

How to move object from Amazon S3 to Glacier with Vault Locked enabled?

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

我找不到执行此操作的任何说明或选项。 S3 似乎只允许将对象移动到 Glacier 存储 class。但这既不能提供数据完整性,也不能防止数据丢失。

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

想象一下:

  • Glacier 是 AWS 的一项服务。

  • S3是AWS的一项服务。

  • 但 S3 也是 Glacier 服务的客户

当您将 S3 中的对象迁移到 Glacier 存储时 class,S3 将对象存储在 Glacier 中...使用 S3 拥有的 AWS 帐户。

S3 中使用 GLACIER 存储 class 的那些对象不在 "your" Glacier 保管库中,它们在 S3 拥有的保管库中。

这与 externally-observable 证据一致:

  • 您无法从 Glacier 控制台看到保管库中的这些 S3 对象。

  • 您不必授予 S3 任何 IAM 权限以访问 Glacier(相比之下,您 必须授予 S3 权限以将事件通知发布到SQS、SNS 或 Lambda)

  • Glacier 不会向您收取 Glacier 存储 class 个对象的费用 -- S3 会。

从这个角度来看,您要完成的工作完全不同。您想要根据 您的 策略将一些档案存储在 您的 Glacier 保管库中,并且该内容目前仅 "happens to be" 存储在 S3 中时刻.

从 S3 下载然后上传到 Glacier 是解决方案。

But that does not provide data integrity nor defends against data loss.

上传到 Glacier 时可以确保有效载荷的完整性,因为树哈希算法有效地防止了损坏的上传。

从S3下载,除非使用SSE-C存储对象,如果使用single-part上传,则ETag是存储对象的MD5散列,或者是hex-encoded MD5部分的串联 binary-encoded MD5 散列的散列,后跟 - 和部分的数量。理想情况下,当上传到 S3 时,您会在对象元数据中存储更好的哈希值(例如 sha256),例如x-amz-meta-content-sha256.

防止数据丢失——是的,Glacier 在这里提供了更多功能,但 S3 在这里并非完全没有能力:具有匹配 DENY 操作的存储桶策略将始终覆盖 any 冲突 ALLOW 操作,无论是在存储桶策略还是任何其他 IAM 策略(例如角色、用户)中。