#azure #terraform #terraform-provider-azure
#azure #terraform #terraform-provider-azure
Вопрос:
В настоящее время я пытаюсь создать несколько azurerm_role_definition
с их соответствующими azurerm_role_assignment
для всех моих подписок. Я хочу делать это динамически, а не жестко со subscription_id
значениями. Я могу создать создать карту subscriptions_map
, а затем с for_each
помощью create azurerm_role_defitions
(ов). Однако теперь мне нужно ссылаться на определения в azurerm_role_assignment
. Каков наилучший подход для этого?
# Configure the Microsoft Azure Provider
provider "azurerm" {
features {}
}
# AD App
resource "azuread_application" "test-app" {
display_name = "test-app"
}
# Service Principal
resource "azuread_service_principal" "test-app" {
application_id = azuread_application.test-app.application_id
}
# Available subscriptions
data "azurerm_subscriptions" "available" {
}
locals {
subscriptions_map = {
for obj in data.azurerm_subscriptions.available.subscriptions.* : obj.display_name => obj
}
}
# Role definition
resource "azurerm_role_definition" "test-app" {
for_each = local.subscriptions_map
role_definition_id = "00000000-0000-0000-0000-000000000000"
name = "custom-role-definition-${each.value.display_name}"
scope = each.value.id
permissions {
actions = ["Microsoft.Resources/subscriptions/resourceGroups/read"]
not_actions = []
}
assignable_scopes = [
each.value.id,
]
}
# Role assignment
resource "azurerm_role_assignment" "test-app" {
for_each = local.subscriptions_map
name = "00000000-0000-0000-0000-000000000000"
scope = each.value.id
#Help here
role_definition_id = azurerm_role_definition.test-app.*.role_definition_resource_id
principal_id = azuread_service_principal.test-app.object_id
}
Ответ №1:
Поскольку вы использовали for_each
in azurerm_role_definition.test-app
, вы можете ссылаться на отдельные определения, созданные по имени ключа. Так что ваш azurerm_role_assignment.test-app
может быть:
# Role assignment
resource "azurerm_role_assignment" "test-app" {
for_each = local.subscriptions_map
name = "00000000-0000-0000-0000-000000000000"
scope = each.value.id
#Help here
role_definition_id = azurerm_role_definition.test-app[each.key].role_definition_resource_id
principal_id = azuread_service_principal.test-app.object_id
}