【发布时间】:2021-12-12 21:40:37
【问题描述】:
我正在尝试在我的三个环境中的每个环境中为用户附加不同类型的策略: 开发、登台和生产。
环境信息以字符串格式存储为 terraform 变量,例如'开发'。
resource "aws_iam_policy" "s3-dev-policy" {
count = var.stage != "dev" ? 1 : 0
name = "s3-bucket-policy-${var.stage}"
description = "Access rights for cicd-user to Bucket on Dev"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [{
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3::: dev-bucket-pushed",
"arn:aws:s3::: dev-bucket-pushed/*"
]
}
}
EOF
}
resource "aws_iam_group_policy_attachment" "attach_cicd-users_s3_dev_group_policy" {
count = var.stage != "dev" ? 1 : 0
group = aws_iam_group.cicd-users.name
policy_arn = aws_iam_policy.s3-dev-policy[count.index]
}
Terraform apply 不会抱怨语法,但即使阶段设置为“dev”,它也不会应用此资源。条件是否仅适用于布尔作为数据类型?
【问题讨论】:
-
如果你 100% 确定
var.stage是dev,这应该可以工作 - 你确定 infra.尚未配置,并且 Terraform 正在跳过实际应用,因为没有可应用的内容? -
没错。
terraform state list可能会帮助您评估 Terraform 已经管理的内容。 -
另外 - 您确定政策文本是正确的吗?我不确定冒号后的空格,即
:::
标签: amazon-web-services amazon-s3 terraform