为什么我无法删除 Amazon S3 桶?

2 分钟阅读
0

我无法删除 Amazon Simple Storage Service(Amazon S3)桶,我不确定是什么原因。

解决方法

先决条件

在删除 Amazon S3 桶之前,请确认以下几点:

  • 所有 AWS 账户共享 Amazon S3 命名空间。如果您删除桶名称,则该名称将可供所有用户使用。如果另一个 AWS 账户声明该桶名称,则您无法重用该桶名称。最佳实践是清空桶,而不是将其完全删除。
  • 对于作为静态网站托管的桶,请查看和更新与桶相关的 Amazon Route 53 托管区设置。
  • 如果桶收到日志数据,请在将桶删除之前停止向其传输日志。

Amazon S3 桶不为空

要删除 Amazon S3 桶,该桶必须为空。使用 AWS 管理控制台、AWS 命令行界面(AWS CLI)或 SDK 手动删除桶。如果桶较大并且配置了版本控制,则手动删除对象需要很长时间。在这些情况下,请使用 Amazon S3 生命周期配置清空桶。

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

对于已配置版本控制或处于暂停状态的桶,请在生命周期配置中包含以下规则:

  • 规则 1: 在创建 X 天后使对象的所有当前版本失效。在成为非当前版本 Y 天后永久删除对象的所有非当前版本。
  • 规则 2: Z 天后使所有单一删除标记和未完成的分段上传失效。

对于未配置版本控制的桶,请在生命周期配置中包含以下规则:

  • 规则 1: 在创建对象 X 天后使对象的所有当前版本失效。
  • 规则 2: Z 天后使所有未完成的分段上传失效。

**注意:**要快速删除此示例中的桶,请将 XYZ 设置为 1 天。

Amazon S3 每天在世界标准时间凌晨 12:00 运行生命周期规则。生命周期规则运行后,所有符合过期条件的对象都将被标记为删除。由于生命周期策略操作是异步的,因此从桶中物理删除对象需要几天时间。将对象标记为删除后,您无需再为与该对象关联的存储付费。

使用 AWS CLI

运行以下命令,从未配置版本控制的 Amazon S3 桶中永久删除对象:

aws s3 rm s3://bucket-name --recursive

运行以下命令,永久删除已配置版本控制或已暂停的 Amazon S3 桶中的所有对象:

aws s3api delete-objects --bucket BUCKET_NAME --delete "$(aws s3api list-object-versions --bucket BUCKET_NAME --output=json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"

使用 Amazon S3 控制台

  1. 打开 Amazon S3 控制台
  2. 在导航窗格中,选择
  3. 下,选择要清空的桶。然后选择清空
  4. 清空桶页面上,在文本字段中键入永久删除以删除桶中的所有对象。然后选择清空
  5. (可选)查看清空桶: 状态页面,以查看清空进度。

**注意:**如果 Amazon S3 桶中的对象版本在监管模式下被锁定,那么 AWS Identity and Access Management(IAM)身份需要“s3:BypassGovernanceRetention”权限。要绕过监管模式,您必须在请求中包含“x-amz-bypass-governance-retention:true”标头。对于在 AWS 管理控制台中发出的请求,控制台会自动将标头应用于具有绕过监管模式所需权限的请求。

在保留期内,IAM 身份无法删除在合规模式下受保护的对象版本。这包括账户的根用户。在保留期后,请删除在合规模式下受保护的对象。桶为空后,请删除 Amazon S3 桶。

Amazon S3 桶具有与之关联的接入点

在删除 Amazon S3 桶之前,请删除附加到该桶的所有接入点。有关详细信息,请参阅删除接入点

发出 DeleteBucket 请求的 IAM 身份没有足够的权限

向要删除 Amazon S3 桶的 IAM 身份授予 IAM 策略的 DeleteBucket 权限。或者,授予 Amazon S3 桶策略执行 DeleteBucket 操作的权限。

防止删除的显式 DENY 语句

显式 DENY 语句优先于显式 ALLOW 语句。确认以下策略不包含任何显式 DENY 语句:

  • IAM 身份的 IAM 策略
  • Amazon S3 桶策略
  • 虚拟私有云(VPC)端点策略

当 AWS Elastic Beanstalk 创建桶时,默认情况下,策略包含显式 DENY 语句。在删除 Amazon S3 桶之前,请删除显式 DENY 语句或桶策略。

相关信息

清空桶

S3 对象锁定的工作原理

删除桶

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