【发布时间】:2023-01-13 18:48:47
【问题描述】:
我正在尝试创建一个 Terraform 部署,它将通过遍历 principal_object_ids 列表及其分配的角色来执行 azurerm_role_assignment。我的代码大致是:
定义 principal_ids 和要分配的角色:
locals {
subscription_access_list_by_id = {
"SPID########1" : "reader" ,
"SPID########1" : "storage blob data reader",
"SPID########2" : "owner",
"SPID########2" : "storage blob data owner"
}
}
分配角色的模块:
resource "azurerm_role_assignment" "role" {
scope = var.subscription_id
role_definition_name = var.role_definition_name
principal_id = var.object_id
}
包含以下块的 main.tf:
module "access-control" {
for_each = local.subscription_access_list
source = "modules/access-control"
principal_id. = each.key
subscription_id = var.subscription_id
role_definition_name = each.value
}
我实际上最终看到的是,给定服务主体的最后一个条目是唯一被执行的条目。即,在上面的示例中,SPID#######1 将获得“存储 blob 数据读取器”,但不是“读取器”,而 SPID######2 将获得“存储 blob 数据所有者”,但不是“所有者”。
我假设发生了一些事情,它只为每个键创建一个块,所以最新的值会覆盖它,但我不确定如何在不更复杂地实现我的 subscription_access_list_by_id 映射的情况下解决这个问题。
我试过使用 {for k, v in subscription_access_list_by_id : k => v } 作为一种无济于事的方法。
【问题讨论】:
-
您有重复的密钥,因此您需要重组。请注意,没有一种语言允许映射、哈希、字典、链表等中的重复键,因此这里没有解决方法。
标签: terraform terraform-provider-azure