【发布时间】:2021-05-08 21:38:21
【问题描述】:
请帮助理解如何创建这样的东西?
data "aws_iam_policy_document" "assume_role_policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ec2.amazonaws.com"]
}
}
dynamic "statement" {
for_each = var.assume_role_identities != [] ? [true] : []
content {
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = var.assume_role_identities
}
}
}
dynamic "statement" {
for_each = var.assume_role_services != [] ? [true] : []
content {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = var.assume_role_services
}
}
}
}
此代码的问题在于,如果我不指定任何应具有访问权限的角色或服务,则它是一个退出并出现没有主体的错误。 是否可以在动态块上设置一些计数条件?或者如何解决?
问题说明:
如果我只想传递某个值,它将无法工作导致它形成一个空值的问题
如果我只添加身份记录,这就是 terraform 在这个 casem 上应用的内容
+ assume_role_policy = jsonencode(
{
+ Statement = [
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Principal = {
+ Service = "ec2.amazonaws.com"
}
+ Sid = ""
},
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Principal = {
+ AWS = "arn:aws:iam::account_id:user/some_user"
}
+ Sid = ""
},
+ {
+ Action = "sts:AssumeRole"
+ Effect = "Allow"
+ Principal = {
+ Service = []
}
+ Sid = ""
},
]
+ Version = "2012-10-17"
}
)
由此出现问题:
创建 IAM 角色名称-角色时出错:MalformedPolicyDocument:无效 政策主体:com.amazon.balsa.error.InvalidPolicyException: 传入的策略有一个没有主体的语句!
【问题讨论】:
-
我不确定我是否理解这个问题。请您分享您的输入和预期输出,然后分享当前正在生成的内容以及为什么这不是您想要的?如果出现错误,在您的问题中也包含错误会很有用。
-
你已经有了for_each的条件,不需要计数。正如@ydaetskcoR 所建议的那样,您对 var.assume_role_identities 和 var.assume_role_services 的输入是什么。您是否尝试将空列表传递给这些变量?
-
我想目的是为所有角色身份(如果提供)设置一个语句块,然后为所有服务(如果提供)设置一个语句块,这样如果是这样就有意义,但很难说没有扩大问题。
-
对@ydaetskcoR 的困惑感到抱歉。添加问题示例
-
@Nick 这是我不能给出空值的问题。添加问题示例
标签: terraform terraform-provider-aws terraform0.12+