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

使用Terraform创建S3 Bucket ACL时遇AccessDenied问题求助

问题描述

我尝试使用根账号及IAM用户创建S3 Bucket ACL,但均遭遇困难。以下是IAM用户对应的Terraform代码:

resource "aws_iam_policy_attachment" "s3_full_access" {
  name       = "s3_full_access_attachment"
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
  users      = ["iamadmin"]
}

resource "aws_s3_bucket" "My_bucket" {
  bucket = "my-test-bucket-for-vpc-endpoints"
  tags = {
    Name = "My bucket"
  }
}

resource "aws_s3_bucket_acl" "my_bucket_acl" {
  bucket = aws_s3_bucket.My_bucket.bucket
  acl    = "public-read"
}

resource "aws_s3_object" "object" {
  bucket = aws_s3_bucket.My_bucket.bucket
  key    = "curl.txt"
  source = "curl.txt"
  acl    = "public-read"

  etag = filemd5("curl.txt")
}

执行时持续报错:

│ Error: error creating S3 bucket ACL for my-test-bucket-for-vpc-endpoints: AccessDenied: Access Denied
解决方向
  • 关闭账户级S3公共访问阻止:AWS默认启用账户级公共访问限制,即便IAM用户有AmazonS3FullAccess权限,也无法设置公共ACL。需在S3控制台的「账户设置」中,关闭以下四项:
    • 阻止新的公共桶策略
    • 阻止公共和跨账户访问(若桶有公共策略)
    • 阻止新的公共ACL
    • 阻止公共和跨账户访问(若桶有公共ACL)
  • 等待权限生效:给IAM用户附加策略后,可能需要几分钟完成权限同步,避免立即执行Terraform导致权限未生效。
  • 改用桶策略替代ACL:如果无法关闭公共访问阻止,可通过桶策略实现公共读权限,示例Terraform配置:
resource "aws_s3_bucket_policy" "my_bucket_policy" {
  bucket = aws_s3_bucket.My_bucket.id
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = "*"
        Action = "s3:GetObject"
        Resource = "${aws_s3_bucket.My_bucket.arn}/*"
      }
    ]
  })
}

同时移除aws_s3_bucket_acl和aws_s3_object中的acl = "public-read"配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:42:54