首页 > 解决方案 > AWS S3 存储的对象锁定设置不起作用

问题描述

我为合规模式创建了一个带有对象锁定设置的 AWS S3 存储桶。当我在存储桶中上传文件时(在文件设置中,我可以看到对象锁定在合规模式下启用),我能够删除该文件。我不确定,根据 AWS 文档,即使是根用户也无法使用合规模式对象锁定删除文件。

如果我被误解了,请帮忙。

标签: amazon-web-servicesamazon-s3

解决方案


重要的

对象锁定仅适用于单个对象版本。

https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lock-overview.html

查看如何查看 S3 对象的版本?并将您的控制台视图切换为“显示”对象版本。您应该会发现您实际上并没有删除锁定的对象版本。

当您“删除”对象时,您所做的是创建一个删除标记。

DELETE删除标记是在简单请求中命名的版本化对象的占位符(标记) 。由于该对象位于启用版本控制的存储桶中,因此该对象未被删除。但是,删除标记使 Amazon S3 的行为就像它已被删除一样。

https://docs.aws.amazon.com/AmazonS3/latest/dev/DeleteMarker.html

控制台处于“隐藏”版本模式时,删除请求是DELETE上面提到的“简单请求”。

当控制台处于“显示”版本模式时,您尝试的删除操作是针对对象的特定版本,您应该会发现无法删除任何带有对象锁的版本。

您还会发现您显然可以用新的上传来覆盖对象,但实际上您不能这样做,因为在版本化存储桶中上传具有相同密钥的对象(并且启用版本控制对于对象锁定工作是必需的) 不会覆盖对象——它只是创建对象的更新版本,而使旧版本保持不变。

当对象的最高(最新、当前)版本是删除标记时,该对象将从控制台中消失,并且不包含在通过 API 发送到存储桶的 ListObjects 请求中,但会出现在 ListObjectVersions API 请求中。“显示/隐藏”设置仅适用于您的个人控制台视图,它不会改变实际的存储桶行为。

对象版本的时间戳无法更改,因此锁定对象版本不仅可以防止删除对象内容,还可以保留该对象最初创建时间的记录。“覆盖”一个对象会创建一个带有新时间戳的新版本,版本上的时间戳证明在任何给定时间点存储桶中存在哪些内容。


推荐阅读