如何使用terraform 为多个现有的手动创建(而不是通过terraform(的S3存储桶创建S3存储桶策略
例如:我手动创建了A、B、C存储桶,现在我想为所有3个s3存储桶添加一个s3存储桶策略,我如何通过Terraform实现这一点?我们可以在这里使用一些循环的东西吗?请通知
是否希望对每个bucket应用相同的策略?这实际上并不起作用,因为策略需要在resource
部分中包含bucket名称。这是S3存储桶策略的一个奇怪的限制,我从未完全理解过,不能使用通配符(*
(作为存储桶名称。
无论如何,您可以这样做,在策略中动态设置bucket名称。
我只是从内存中输入这个,所以请原谅任何语法错误。
locals {
// The names of the buckets you want to apply policies to
buckets = [
"mybucket",
"anotherbucket",
]
}
// Create a unique policy for each bucket, using
// the bucket name in the policy.
data "aws_iam_policy_document" "bucket_policies" {
for_each = toset(local.buckets)
statement {
actions = [
"s3:PutObject"
]
resources = [
"arn:aws:s3:::${each.key}/*"
]
principals {
type = "AWS"
identifiers = [
var.my_user_arn
]
}
}
}
// Apply each policy to its respective bucket
resource "aws_s3_bucket_policy" "policies" {
for_each = toset(local.buckets)
bucket = each.key
policy = data.aws_iam_policy_document.bucket_policies[each.key].json
}