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

2 分钟阅读
0

我想解决为什么我无法删除 Amazon Simple Storage Service (Amazon S3) 存储桶的问题。

解决方案

先决条件

在删除 Amazon S3 存储桶之前,请执行以下操作:

  • 对于作为静态网站托管的存储桶,请查看和更新与存储桶相关的 Amazon Route 53 托管区设置。
  • 如果存储桶接收来自弹性负载均衡 (ELB) 的日志数据,请在删除存储桶之前停止向该存储桶传输日志。

**注意:**如果您删除存储桶名称,则该名称将可供所有用户使用。如果另一个 AWS 账户使用该存储桶名称,则您将无法重用该存储桶名称。最佳做法是不要删除存储桶。而是将其清空。

S3 存储桶不为空

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

**注意:**如果您在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

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

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

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

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

**注意:**要快速删除存储桶,请将 XYZ 设置为 1 天。

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

使用 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}}')"

**注意:**请将 bucket-name 替换为您的 Amazon S3 存储桶名称。

使用 Amazon S3 控制台

完成以下步骤:

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

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

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

接入点已与存储桶关联

在删除 Amazon S3 存储桶之前,请删除附加到该存储桶的所有接入点。您无法删除在同一账户内附加了 S3 接入点多区域接入点的存储桶。

IAM 身份没有足够的权限

在用于删除存储桶的 IAM 身份的 IAM 策略中,授予 DeleteBucket 权限。或者,在存储桶策略中包含 delete-bucket API 操作。

显式 DENY 语句会阻止删除操作

显式 DENY 语句优先于显式 ALLOW 语句。确认 IAM 身份、存储桶和虚拟私有云 (VPC) 策略中不包含显式 DENY 语句。

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

AWS 官方
AWS 官方已更新 4 个月前