我想解决为什么我无法删除 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 天后使所有未完成的分段上传失效。
**注意:**要快速删除存储桶,请将 X、Y 和 Z 设置为 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 控制台
完成以下步骤:
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择要清空的存储桶,然后选择 Empty(清空)。
- 在 Empty bucket(清空存储桶)页面上,在文本字段中输入 permanently delete 以以删除存储桶中的所有对象,然后选择 Empty(清空)。
- (可选)查看 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 语句或存储桶策略。