簡體   English   中英

有沒有辦法將 CORS 規則添加到 Terraform aws_s3_bucket 數據源?

[英]Is there a way to add CORS rule to Terraform aws_s3_bucket data source?

我有一個不是通過 Terraform 創建的現有存儲桶。我目前正在為該存儲桶設置一個策略以獲得額外的訪問權限。 我需要向存儲桶添加cors_rule ,但我發現的所有內容都表明您需要創建resource才能添加 cors 規則。 有沒有辦法將cors_rule添加到現有存儲桶數據源?

data "aws_s3_bucket" "my_bucket" {
  bucket = "my-bucket"

  # This produces a failure on plan
  cors_rule {
    allowed_headers = ["*"]
    allowed_methods = ["GET", "HEAD"]
    allowed_origins = [
      "https://example.my-website.com"
    ]
    expose_headers  = [
      "Access-Control-Allow-Origin",
      "ETag"
    ]
    max_age_seconds = 3000
  }
}

resource "aws_s3_bucket_policy" "allow_access" {
  bucket = data.aws_s3_bucket.my_bucket.id
  policy = data.aws_iam_policy_document.allow_access.json
}

data "aws_iam_policy_document" "allow_access" {
  statement {
    sid = "Access"

    principals {
      type = "AWS"
      identifiers = ["arn:aws:iam::123456789012:user/test"]
    }

    actions = [
      "s3:GetObject",
      "s3:GetBucketLocation",
      "s3:ListBucket",
    ]

    resources = [
      data.aws_s3_bucket.my_bucket.arn,
      "${data.aws_s3_bucket.my_bucket.arn}/*"
    ]
  }
}

計划錯誤

你真幸運。 就在今天/昨天,AWS 提供商的 4.0.0 版發布了。
新的提供程序版本在 S3 存儲桶處理方面進行了大量重構。 您現在有一個獨立的s3_bucket_cors_configuration資源,而不是直接在aws_s3_bucket資源上的 CORS 設置。 這意味着您現在可以配置 CORS 設置(以及許多其他設置),而無需在 state 中實際擁有存儲桶本身。

resource "aws_s3_bucket_cors_configuration" "example" {
  bucket = aws_s3_bucket.example.bucket

  cors_rule {
    allowed_headers = ["*"]
    allowed_methods = ["PUT", "POST"]
    allowed_origins = ["https://s3-website-test.hashicorp.com"]
    expose_headers  = ["ETag"]
    max_age_seconds = 3000
  }

  cors_rule {
    allowed_methods = ["GET"]
    allowed_origins = ["*"]
  }
}

唯一需要注意的是,您需要升級到 AWS 供應商的 4.0.0 以及隨之而來的所有重大更改。

只能修改terraform管理的資源,不能修改作為數據源引入的資源。 您可以做的是為您的存儲桶創建一個資源,然后導入現有的存儲桶:

terraform import aws_s3_bucket.my_bucket my-bucket

導入命令將為您提供在存儲桶上設置的所有屬性的列表。 對於您不想使用 terraform 管理的屬性,請在生命周期塊中使用ignore參數。

resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-bucket"

  cors_rule {
    allowed_headers = ["*"]
    allowed_methods = ["PUT", "POST", "DELETE", "GET"]
    allowed_origins = ["*"]
    expose_headers  = []
  }
}

這適用於 3.7 版

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM