代码之家  ›  专栏  ›  技术社区  ›  Nitrox

Terraform-创建AWS S3存储桶策略错误-策略格式错误:字段版本未知

  •  1
  • Nitrox  · 技术社区  · 10 月前

    我正在创建一个Terraform项目并在其中工作,该项目创建了一个用作静态网站的AWS S3 Bucket。

    我创建了一个“公共访问块”,并添加了另一个资源来创建“AWS S3存储桶策略”,以允许任何人从存储桶/站点公开访问“GetObject”。

    不幸的是,在运行“terraform apply”命令时,我收到了一个错误:

    Error: putting S3 Bucket (terraform-course-project-1-d4f420c9) Policy: operation error S3: PutBucketPolicy, https response error StatusCode: 400, RequestID: AN81J2DNCPWB9S2R, HostID: w93iACwvYDKdAv4a6ZyoYWf3u3TdFdQon+FrwvHb/qprNh27w7VMpSDS+Nry+Xa+XAttzJoQY4o237FHACL7Whd0qlhGNC16, api error MalformedPolicy: Unknown field version
    │
    │   with aws_s3_bucket_policy.static-website-public-read,
    │   on s3.tf line 17, in resource "aws_s3_bucket_policy" "static-website-public-read":
    │   17: resource "aws_s3_bucket_policy" "static-website-public-read" {
    

    我使用的代码:

    resource "random_id" "bucket_suffix" {
      byte_length = 4
    }
    
    resource "aws_s3_bucket" "static_website" {
      bucket = "terraform-project-s3-web-${random_id.bucket_suffix.hex}"
    }
    
    resource "aws_s3_bucket_public_access_block" "static_website" {
      bucket                  = aws_s3_bucket.static_website.id
      block_public_acls       = false
      block_public_policy     = false
      ignore_public_acls      = false
      restrict_public_buckets = false
    }
    
    resource "aws_s3_bucket_policy" "static-website-public-read" {
      bucket = aws_s3_bucket.static_website.id
    
      policy = jsonencode({
        version = "2012-10-17"
        Statement = [
          {
            Sid       = "PublicReadGetObject"
            Effect    = "Allow"
            Principal = "*"
            Action    = "s3:GetObject"
            Resource  = "${aws_s3_bucket.static_website.arn}/*"
          }
        ]
      })
    }
    

    如何使此政策生效?我找不到任何关于互联网爬行的信息来解释这个错误,特别是:“api错误MalformedPolicy:未知字段版本”。

    已阅读有关此问题的类似帖子,但未发现“未知字段”错误。

    1 回复  |  直到 10 月前
        1
  •  0
  •   Mark B    10 月前

    它特别指出:

    未知字段版本

    它告诉你 version 字段未知。我认为这是因为该政策对案件敏感,应该是 Version 大写字母 V .

    尝试将您所掌握的内容与以下示例进行比较 the official documentation .