无法在其他订阅中使用 Log Analytics 工作区?Terraform Azurerm Policy Assignment



我正在使用terraform将azure策略编写为代码我发现了两个问题1我似乎不能在同一订阅中使用不同订阅上的日志分析工作区,这很好2对于需要托管身份的策略,我似乎无法为其分配正确的权限。

resource "azurerm_policy_assignment" "Enable_Azure_Monitor_for_VMs" {

name                 = "Enable Azure Monitor for VMs"
scope                = data.azurerm_subscription.current.id
policy_definition_id = "/providers/Microsoft.Authorization/policySetDefinitions/55f3eceb-5573-4f18-9695-226972c6d74a"
description          = "Enable Azure Monitor for the virtual machines (VMs) in the specified scope (management group, subscription or resource group). Takes Log Analytics workspace as parameter."
display_name         = "Enable Azure Monitor for VMs"
location             = var.location
metadata = jsonencode(
{
"category" : "General"
})
parameters = jsonencode({
"logAnalytics_1" : {
"value" : var.log_analytics_workspace_ID
}
})
identity {
type = "SystemAssigned"
}
}
resource "azurerm_role_assignment" "vm_policy_msi_assignment" {
scope                = azurerm_policy_assignment.Enable_Azure_Monitor_for_VMs.scope
role_definition_name = "Contributor"
principal_id         = azurerm_policy_assignment.Enable_Azure_Monitor_for_VMs.identity[0].principal_id
}

对于var.log_analytics_workspace_ID,如果我使用与策略位于同一订阅中的工作区ID,它将正常工作。但是,如果我使用来自不同订阅的工作区ID,则在部署之后,工作区字段将为空。

也适用于

resource "azurerm_role_assignment" "vm_policy_msi_assignment"

,我已经给了自己用户访问管理的角色,但是部署之后;该标识当前具有以下权限:;还是空白?

我自己的问题得到了答案:(1我认为,这在Azure中设计得不好。MS状态";为定义中包含DeployIfNotExists效果的每个策略分配创建托管标识(MSI(。目标分配范围所需的权限是自动管理的。但是,如果修正任务需要与分配范围之外的资源交互,则需要手动配置所需的权限">

这意味着,需要访问另一个订阅中的日志分析工作区的系统生成的托管身份需要手动使用日志分析工作空间贡献者权限此外,由于您不能使用用户生成的托管ID,因此无法预先填充此ID。因此,如果你想在terraform中实现,似乎你必须运行两次策略分配,第一次只是获取ID,然后手动(或通过脚本(分配权限,然后再次运行策略分配来指向资源。。

2 ID实际上被赋予了贡献者的权利,你只需要进入子RBAC就可以看到它。

最新更新