为什么即使为 Amazon S3 存储桶启用了对象锁定,我还能删除对象?

1 分钟阅读
0

我为我的 Amazon Simple Storage Service (Amazon S3) 存储桶启用了对象锁定。为什么我还能在这个存储桶中删除一些对象?

解决方法

对象级对象锁定配置设置决定您是否可以使用对象锁定从 Amazon S3 存储桶中删除对象。

要确定您仍然可以使用 Object Lock 删除存储分区中的特定对象的原因,请检查应用于该对象的对象锁定设置。请检查删除模式。

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您使用的是最新版本的 AWS CLI

检查对象上的对象锁定合法保留和对象锁定保留设置

要检查这些设置,请打开 Amazon S3 控制台,然后导航到对象的属性页面。您也可以运行 head-object AWS CLI 命令:

aws s3api head-object --bucket sample-bucket --key test.png

输出看起来与下列内容类似:

{  
 "AcceptRanges": "bytes",  
 "LastModified": "2023-03-09T04:39:46+00:00",  
 "ContentLength": 285074,  
 "ETag": "\"1e8cd7fb4e4ddeafdc6513200f47958f\"",  
 "VersionId": "Cm_wsGgkj8L3fySNPUu.J7xV1HEKMhGr",  
 "ContentType": "image/png",  
 "ServerSideEncryption": "aws:kms",  
 "Metadata": {},  
 "SSEKMSKeyId": "arn:aws:kms:us-east-1:111111111111:key/eod57e78-8c46-454a-8c22-897d8be9a5f4",  
 "ReplicationStatus": "PENDING",  
 "ObjectLockMode": "COMPLIANCE",  
 "ObjectLockRetainUntilDate": "2023-03-10T04:39:45.913000+00:00",  
 "ObjectLockLegalHoldStatus": "ON"  
}

如果您对该对象进行了合法保留,则会在输出中看到 ObjectLockLegalHoldStatus 字段。如果为对象应用了对象锁定保留,则还会看到 ObjectLockMode 和 ObjectLockRetainUntilDate 字段。

**您没有为对象启用对象锁定合法保留或对象锁定保留 **

您可以永久删除该对象。

**您为对象启用了对象锁定合法保留 **

只有拥有 s3: putobjectLegalHold 权限的用户明确关闭对象的合法保留后,您才能永久删除该对象。

您为对象启用了对象锁定保留功能

如果对象受治理模式保护,即使在保留期结束之前,您也可以在下列条件下永久删除该对象:

  • 您拥有 s3:BypassGovernanceRetention 权限。
  • 您的删除请求中明确包括 x-amz-bypass-governance-retention:true 请求标头。

默认情况下,Amazon S3 控制台在 DELETE 请求中包含 x-amz-bypass-governance-retention: true 标头。因此,如果您拥有 s3: bypassGovernanceRetination 权限,可以使用 S3 控制台删除受治理模式保护的对象版本。

如果拥有 s3: bypassGovernanceRetination 权限,您还可以使用 AWS CLI 删除对象版本。在 delete-object 命令中传递 --bypass-governance-retention :

aws s3api delete-object --bucket sample-bucket --key test.txt --version-id "9_gKg5vG56F.TTEUdwkxGpJ3tNDlWlGq" --bypass-governance-retention

如果对象受合规模式保护,在保留期结束之前,包括根帐户在内的任何用户都无法永久删除该对象。

检查删除模式

简单删除

在简单的删除 操作中,无需在删除请求中指定对象版本 ID 就可以删除对象。

无论对象锁定配置如何,您都可以使用对象锁定对存储分区中的任何对象执行简单删除操作。简单删除不会从存储桶中删除任何数据。仅向存储桶添加删除标记,并将当前版本保留为非当前版本。

**永久删除 **

在永久删除操作中,您可以通过在删除请求中指定对象版本 ID 来删除对象。

即使在保留期结束之前,您也可以对受治理保留模式保护的对象执行永久删除操作。但是,您必须具有绕过治理模式的权限。

在以下情况下,您无法为对象执行永久删除:

  • 该对象受合规性保留模式保护,保留期尚未结束。
  • 为对象进行合法保留。

通过 S3 生命周期规则删除

无论对象级对象锁定配置如何,S3 生命周期规则都会通过简单删除操作继续执行当前版本过期。但是,如果非当前版本受到对象锁定的保护,这些规则不会永久删除它们。

相关信息

合法保留

保留模式

AWS 官方
AWS 官方已更新 1 年前