删除 Amazon S3 对象 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

删除 Amazon S3 对象

您可以使用 Amazon S3 控制台、Amazon SDK、Amazon Command Line Interface (Amazon CLI) 或 REST API 直接从 Amazon S3 删除一个或多个对象。例如,如果您正在收集日志文件,最好在不再需要这些文件时将其删除。可以设置 S3 生命周期规则来自动删除对象(如日志文件)。

要删除对象,可以使用以下 API 操作之一:

  • 删除单个对象 – Amazon S3 提供了 DELETEDeleteObject)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:DeleteObjects3: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 删除