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

使用Terraform创建S3 Bucket时遇到AccessDenied权限错误

问题描述

我编写了一份简单的Terraform配置文件main.tf,内容如下:

provider "aws" {
  region = "eu-central-1"  # Set your desired region
}
    
locals {
   bucket_name = "noname-production-default-storage"
}
    
resource "aws_s3_bucket" "noname-production-s3" {
  bucket = local.bucket_name
}
    
resource "aws_s3_bucket_policy" "noname-s3-policy" {
  bucket = aws_s3_bucket.noname-production-s3.id
    
  policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
       {
          Sid = "PublicReadGetObject",
          Effect = "Allow",
          Principal = "*",
          Action = "s3:GetObject",
          Resource = "arn:aws:s3:::${local.bucket_name}/*"
       }
     ]
  })
}

执行该配置时出现错误:

Error: putting S3 policy: AccessDenied: Access Denied

我的IAM用户已配置如下全权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        }
    ]
}

请问我缺少哪些必要权限?或是我的Terraform配置存在问题?


问题排查与解决

可能的原因及对应方案

  • 账户级公共访问限制拦截
    AWS默认启用S3账户级公共访问阻止设置,若开启了「阻止新的公共存储桶策略」等相关选项,即使IAM用户有全权限,也无法设置允许公共访问的Bucket Policy。
    解决:

    1. 登录AWS控制台,进入S3服务的「访问管理」-「公共访问设置」,临时关闭相关公共访问阻止选项后再执行Terraform
    2. 或在Terraform中添加资源直接禁用这些限制:
    resource "aws_s3_account_public_access_block" "disable_public_block" {
      block_public_acls       = false
      block_public_policy     = false
      ignore_public_acls      = false
      restrict_public_buckets = false
    }
    
  • Bucket名称全球冲突
    S3桶名是全球唯一的,若noname-production-default-storage已被其他AWS账户占用,实际创建的桶可能不符合预期,导致设置Policy时权限报错。
    解决:更换唯一桶名,比如添加账户ID或自定义前缀。

  • IAM隐性权限限制
    虽IAM策略显示全权限,但可能存在隐性限制:

    1. 检查IAM用户的权限边界(Permission Boundary),确认是否允许s3:PutBucketPolicy操作
    2. 若为组织内账户,需确认**服务控制策略(SCP)**是否拦截了S3相关权限操作,联系管理员核查配置
  • Terraform配置优化点
    当前Bucket Policy的Resource字段使用本地变量,可改为引用桶资源的ARN,避免名称不一致问题:

    Resource = "${aws_s3_bucket.noname-production-s3.arn}/*"
    

内容的提问来源于stack exchange,提问作者Philipp S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:32:48