我为我的 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 生命周期规则都会通过简单删除操作继续执行当前版本过期。但是,如果非当前版本受到对象锁定的保护,这些规则不会永久删除它们。
相关信息
合法保留
保留模式