不能在不同的订阅中使用日志分析工作区? terraform azurerm 策略分配
can't use log analytics workspace in a different subscription? 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,因此您无法预填充它。
所以如果你想在 terraform 中实现,似乎你必须 运行 策略分配两次,第一次只是获取 ID,然后手动(或通过脚本)分配权限,然后 运行策略分配再次指向资源..
2这个ID其实是给了贡献者权限的,你只要进入子RBAC就可以看到
我正在使用 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,因此您无法预填充它。 所以如果你想在 terraform 中实现,似乎你必须 运行 策略分配两次,第一次只是获取 ID,然后手动(或通过脚本)分配权限,然后 运行策略分配再次指向资源..
2这个ID其实是给了贡献者权限的,你只要进入子RBAC就可以看到