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

使用Terraform在AWS Academy创建S3桶后出现AccessDenied错误如何解决

解决方案

方法1:配置Terraform跳过Object Lock配置读取(直接解决当前报错)

你遇到的报错是因为高版本的AWS Terraform Provider默认会自动拉取S3桶的Object Lock配置,AWS Academy环境的默认权限没有该接口的访问权限,你可以通过以下两种配置跳过该校验:

方案a:给S3资源添加忽略规则(推荐,仅影响当前桶)

修改你的S3资源代码如下:

resource "aws_s3_bucket" "b" {
  bucket = "my-tf-test-bucket"
  acl    = "private"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }

  # 忽略Object Lock配置的检测,跳过无权限的接口调用
  lifecycle {
    ignore_changes = [
      object_lock_configuration
    ]
  }
}

方案b:全局关闭S3 Object Lock读取(适配所有S3资源)

在你的AWS Provider配置中添加如下参数:

provider "aws" {
  region = "你的AWS区域" # 替换为实际使用的区域,比如us-east-1
  s3_use_object_lock = false
}

方法2:配置Terraform使用AWS Academy的S3权限角色

你不需要将IAM角色绑定到S3桶,只需让Terraform运行时使用该有权限的角色发起AWS API请求即可,配置方式如下:

  • 在AWS Provider中配置自动代入角色,将ARN替换为你AWS Academy中对应S3权限角色的实际ARN:
provider "aws" {
  region = "你的AWS区域"
  assume_role {
    role_arn = "arn:aws:iam::你的AWS账号ID:role/角色名称"
  }
}
  • 也可以先在本地AWS CLI配置文件中配置好该角色的凭证,运行Terraform前导出AWS_PROFILE环境变量指向对应配置项即可。

注意:AWS Academy环境通常会限制角色代入的权限范围,如果你使用assume_role配置时报错,优先通过环境变量或者本地凭证文件的方式指定角色权限,提前用AWS CLI验证角色可正常操作S3后再运行Terraform。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:45:03