删除 Amazon S3 对象 - Amazon Simple Storage Service

删除 Amazon S3 对象

您可以使用 Amazon S3 控制台、AWS SDK、AWS Command Line Interface (AWS 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 删除