gpt4 book ai didi

amazon-web-services - terraform:有没有办法动态创建 iam 策略声明?

转载 作者:行者123 更新时间:2023-12-03 16:11:12 25 4
gpt4 key购买 nike

地形版本:0.11

我正在运行多个 eks 集群并尝试按照此文档在所有集群中启用基于 IAM 角色的服务帐户:
https://www.terraform.io/docs/providers/aws/r/eks_cluster.html#enabling-iam-roles-for-service-accounts

当我在策略语句中对集群名称进行硬编码并创建多个语句时,这会起作用

data "aws_iam_policy_document" "example_assume_role_policy" {

# for cluster 1

statement {
actions = ["sts:AssumeRoleWithWebIdentity"]
effect = "Allow"

condition {
test = "StringEquals"
variable = "${replace(aws_iam_openid_connect_provider.example1.url, "https://", "")}:sub"
values = ["system:serviceaccount:kube-system:aws-node"]
}

principals {
identifiers = ["${aws_iam_openid_connect_provider.example1.arn}"]
type = "Federated"
}
}
}

由于我有多个集群,我希望能够动态生成语句
所以我做了以下更改:

我创建了一个 count主体和条件中的变量和更改值
count = "${length(var.my_eks_cluster)}" 

condition {
test = "StringEquals"
variable = "${replace(element(aws_iam_openid_connect_provider.*.url, count.index), "https://", "")}:sub"
values = ["system:serviceaccount:kube-system:aws-node"]
}

principals {
identifiers = ["${element(aws_iam_openid_connect_provider.*.url, count.index)}"]
type = "Federated"
}

Terraform 现在能够找到集群,但也会生成多个策略。
这将不起作用,因为在以下语法中,假设角色策略不采用列表
resource "aws_iam_role" "example" {
assume_role_policy = "${data.aws_iam_policy_document.example_assume_role_policy.*.json}"
name = "example"
}

似乎不是创建多个策略,我需要在一个策略中生成多个语句(以便我可以添加到一个 iam_role)。有没有人做过类似的事情?谢谢。

最佳答案

您只需要一个策略,因此不应使用 count你的政策中的论点。
你想要的是多个语句,像这样

data "aws_iam_policy_document" "example" {
statement {
# ...
}
statement {
# ...
}
}

现在您可以直接对其进行硬编码(也许这将是测试它是否有效的良好开端)。如果你想从一个变量动态生成它,你需要一个 dynamic -block 如下所述: https://www.terraform.io/docs/configuration/expressions.html

在你的情况下,这可能是
data "aws_iam_policy_document" "example" {
dynamic "statement" {
for_each = aws_iam_openid_connect_provider

content {
actions = ["sts:AssumeRoleWithWebIdentity"]
effect = "Allow"

condition {
test = "StringEquals"
variable = "${replace(statement.value.url, "https://", "")}:sub"
values = ["system:serviceaccount:kube-system:aws-node"]
}

principals {
identifiers = ["${statement.value.arn}"]
type = "Federated"
}
}
}
}

不过,我认为“动态”仅自 TF 0.12 起才可用。

关于amazon-web-services - terraform:有没有办法动态创建 iam 策略声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62184180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com