删除 Amazon S3 对象
您可以使用 Amazon S3 控制台、AWS SDK、AWS Command Line Interface (AWS CLI) 或 REST API 直接从 Amazon S3 删除一个或多个对象。例如,如果您正在收集日志文件,最好在不再需要这些文件时将其删除。可以设置 S3 生命周期规则来自动删除对象(如日志文件)。
要删除对象,可以使用以下 API 操作之一:
-
删除单个对象 – Amazon S3 提供了
DELETE
(DeleteObject
)API 操作,使您能够删除单个 HTTP 请求中的一个对象。 -
删除多个对象 – Amazon S3 提供了多对象删除(
DeleteObjects
)API 操作,使您能够在单个 HTTP 请求中删除多达 1000 个对象。
从未启用版本控制的存储桶中删除对象时,只需提供对象键名称。但是,当从启用版本控制的存储桶中删除对象时,可以提供对象的版本 ID,来删除该对象的特定版本。
删除对象之前应考虑的最佳实践
在删除对象之前,请考虑以下最佳实践:
-
启用存储桶版本控制。S3 版本控制增加了对简单
DeleteObject
请求的保护,以防止意外删除。对于受版本控制的存储桶,如果您删除对象的当前版本,或删除请求未指定特定版本 ID,则 Amazon S3 不会永久删除该对象。而是 S3 添加一个删除标记,发出对象软删除。然后,删除标记将成为对象的当前(或最新)版本,具有新版本 ID。有关更多信息,请参阅从启用了版本控制的存储桶中删除对象版本。 -
如果您要删除大量对象,或者要以编程方式根据对象创建日期删除对象,请在存储桶上设置 S3 生命周期配置。要监控这些删除,建议您使用 S3 生命周期事件通知。配置 S3 生命周期通知后,如果删除了存储桶中的对象,
s3:LifecycleExpiration:Delete
事件类型会通知您。当 S3 生命周期配置永久删除对象版本时,它也会通知您。当 S3 生命周期创建删除标记时,s3:LifecycleExpiration:DeleteMarkerCreated
事件类型会通知您。在删除受版本控制的存储桶中对象的当前版本后,将创建删除标记。 -
在对 S3 生命周期配置进行任何更新之前,请确认生命周期已针对所有目标对象完成了操作。有关更多信息,请参阅在存储桶上设置 S3 生命周期配置中的更新、禁用或删除生命周期规则。
注意
S3 生命周期规则必须应用于对象的正确子集,以防止意外删除。在创建生命周期规则时,可以按前缀、对象标签或对象大小筛选对象。
-
考虑限制用户从存储桶中移除或删除对象。要限制用户,您需要在 Amazon S3 存储桶策略中显式拒绝用户执行以下操作的权限:
-
s3:DeleteObject
、s3:DeleteObjectVersion
(控制谁可以使用 API 请求删除对象) -
s3:PutLifecycleConfiguration
(控制谁可以添加 S3 生命周期到期规则)
-
-
考虑使用 S3 复制来创建数据的多个副本,并将它们同时复制到多个位置。可以根据需要选择任意数量的目标存储桶。此外,如果无意中删除了某个对象,您仍将拥有该数据的副本。
从启用版本控制的存储桶中删除对象
如果存储桶已启用版本控制,则存储桶中可能存在同一对象的多个版本。使用启用了版本控制的存储桶时,Delete
API 操作将启用以下选项:
-
指定不受版本控制的删除请求 – 仅指定对象的键,而不指定版本 ID。在此情况下,Amazon S3 将在对象的当前版本上创建一个删除标记,并在响应中返回其版本 ID。这将使您的对象从存储桶中消失。有关对象版本控制和删除标记概念的信息,请参阅 使用 S3 版本控制保留对象的多个版本。
-
指定受版本控制的删除请求 – 同时指定键和版本 ID。在此情况下,可能会出现以下结果:
-
如果版本 ID 映射到特定的对象版本,则 Amazon S3 将删除该特定版本的对象。
-
如果版本 ID 映射到对象的删除标记,则 Amazon S3 将删除该删除标记。删除了删除标记后,该对象随后会重新出现在存储桶中。
-
从已暂停版本控制的存储桶中删除对象
如果存储桶已暂停版本控制,则 Delete
API 操作的行为方式与启用版本控制的存储桶相同(但当前版本的版本 ID 为空时除外)。有关更多信息,请参阅 从已暂停版本控制的存储桶中删除对象。
从不受版本控制的存储桶中删除对象
如果存储桶不受版本控制,则可以在 Delete
API 操作中指定对象的键,而 Amazon S3 将永久删除该对象。为防止永久删除对象,请启用存储桶版本控制。
从启用了 MFA 的存储桶中删除对象
从启用了多重身份验证(MFA)的存储桶中删除对象时,请注意以下内容:
-
如果您提供了无效的 MFA 令牌,请求将始终失败。
-
如果您拥有一个启用了 MFA 的存储桶,并且发送了一个受版本控制的删除请求(您提供了对象键和版本 ID),若您不能提供有效的 MFA 令牌,请求将失败。此外,对启用了 MFA 的存储桶使用多对象
Delete
API 操作时,如果任何删除是受版本控制的删除请求(也即,您指定了对象键和版本 ID),若不能提供有效的 MFA 令牌,则整个请求将失败。
但是,在下面的情况下,请求将成功:
-
如果您拥有一个启用了 MFA 的存储桶,并发出一个不受版本控制的删除请求(不删除受版本控制的对象),且您未提供 MFA 令牌,删除会成功。
-
如果您发出一个多对象删除请求,此请求指定从一个启用了 MFA 的存储桶中仅删除不受版本控制的对象,且您未提供 MFA 令牌,这些删除会成功。
有关 MFA 删除的信息,请参阅配置 MFA 删除。