You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用force_delete=true创建的AWS S3 Bucket通过Terraform删除时遇Access Denied失败

解决Terraform销毁存储VPC Flow Logs的S3 Bucket时出现AccessDenied的问题

问题原因

VPC Flow Logs由AWS服务账户投递到S3桶,这些日志对象的所有者可能并非桶的所有者,且你已提前删除了相关权限策略,导致Terraform执行destroy时没有足够权限删除对象。即使桶ACL设置了所有者和日志投递组的完全访问,也可能因对象级所有权限制或权限缺失导致删除失败。

解决步骤

  1. 添加临时桶策略获取删除权限
    给目标S3桶添加以下临时策略,替换占位符为你的实际信息:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::你的账号ID:user/你的用户名"
          },
          "Action": [
            "s3:DeleteObject",
            "s3:ListBucket"
          ],
          "Resource": [
            "arn:aws:s3:::你的桶名/*",
            "arn:aws:s3:::你的桶名"
          ]
        }
      ]
    }
    
  2. 确保对象所有权归桶所有者
    如果日志对象是由AWS服务账户创建的,可能存在对象所有者与桶所有者不一致的情况,开启桶所有权强制控制:

    aws s3api put-bucket-ownership-controls --bucket 你的桶名 --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
    
  3. 手动清空桶内对象
    使用AWS CLI递归删除AWSLogs路径下的所有日志文件:

    aws s3 rm s3://你的桶名/AWSLogs/ --recursive
    

    也可以直接在AWS控制台手动删除桶内所有对象。

  4. 执行Terraform销毁
    完成上述操作后,重新运行:

    terraform destroy
    

注意事项

  • 不要提前删除桶的权限策略,应先确保有足够权限清空桶内对象,再进行销毁操作。
  • force_destroy=true仅能让Terraform尝试删除对象,但前提是执行Terraform的用户拥有对应的删除权限。

内容的提问来源于stack exchange,提问作者AG6HQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:15:52