【发布时间】:2022-02-12 16:29:00
【问题描述】:
我有一个不是通过 Terraform 创建的现有存储桶。我目前正在对该存储桶设置策略以获得额外的访问权限。我需要将cors_rule 添加到存储桶中,但我发现的所有内容都表明您需要创建resource 才能添加cors 规则。有没有办法将cors_rule 添加到现有的存储桶数据源?
- 将 CORS 添加到正在创建的存储桶中:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket#using-cors
- 桶数据源文档:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/s3_bucket
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}/*"
]
}
}
【问题讨论】:
-
您应该使用 cors_rule 在 terraform 中配置存储桶,然后将存储桶导入 terraform 状态。
-
@luk2302 感谢您的回复,但是在这种情况下这是不可能的。我们必须利用已经存在的存储桶。
-
这正是导入资源的目的。
-
我意识到这就是它的用途,我的问题是专门问“有没有办法?”。如果导入是一个选项,我们会选择它。
-
那不行,你别无选择。导入是您问题的解决方案。如果您故意且没有充分理由忽视旨在解决您的问题的解决方案,那么您就不走运了。无论如何,拥有一个改变某些东西的数据源会很糟糕,因此你想要的设计是不受支持的。
标签: amazon-web-services amazon-s3 terraform cors