如何用Terraform在Microsoft Defender for Cloud中启用指定代理
在Microsoft Defender for Cloud中通过Terraform启用Log Analytics/Azure Monitor代理的问题
我希望通过Terraform在Microsoft Defender for Cloud中启用「Log Analytics agent/Azure Monitor agent」,但当前使用的Terraform代码无法生效,请问该如何操作?

我的Terraform代码如下:
resource "azurerm_security_center_subscription_pricing" "mdc_vm" { count = var.enable_defender_plan_for_virtualmachines ? 1 : 0 tier = "Standard" resource_type = "VirtualMachines" } resource "null_resource" "reset_vm" { count = var.enable_defender_plan_for_virtualmachines ? 1 : 0 triggers = { ad_info = local.az_info } provisioner "local-exec" { when = destroy command = <<-EOD az login --service-principal -u ${element(split(",", self.triggers.ad_info), 0)} -p $ARM_CLIENT_SECRET --tenant ${element(split(",", self.triggers.ad_info), 2)} az security pricing create -n VirtualMachines --tier 'Free' --subscription ${element(split(",", self.triggers.ad_info), 1)} EOD } }
问题原因
你当前的代码仅启用了Defender for Virtual Machines的标准防护层,但没有配置自动部署代理的核心设置——Defender for Cloud的代理启用需要同时开启防护计划和自动代理部署两个环节,缺一不可。
解决方案
添加azurerm_security_center_auto_provisioning资源来配置自动部署代理,以下是完整的修正代码:
# 启用Defender for Virtual Machines标准层 resource "azurerm_security_center_subscription_pricing" "mdc_vm" { count = var.enable_defender_plan_for_virtualmachines ? 1 : 0 tier = "Standard" resource_type = "VirtualMachines" } # 配置自动部署Log Analytics代理(适用于传统代理) resource "azurerm_security_center_auto_provisioning" "log_analytics_agent" { count = var.enable_defender_plan_for_virtualmachines ? 1 : 0 auto_provision = "On" # 如果需要指定自定义工作区,取消下面注释并填入工作区ID # workspace_id = azurerm_log_analytics_workspace.example.id } # 若要启用Azure Monitor代理(新一代代理),添加以下资源 resource "azurerm_security_center_auto_provisioning" "azure_monitor_agent" { count = var.enable_defender_plan_for_virtualmachines ? 1 : 0 azure_monitor_agent_auto_provision = "On" } # 销毁时重置防护计划和代理部署设置 resource "null_resource" "reset_vm" { count = var.enable_defender_plan_for_virtualmachines ? 1 : 0 triggers = { ad_info = local.az_info } provisioner "local-exec" { when = destroy command = <<-EOD az login --service-principal -u ${element(split(",", self.triggers.ad_info), 0)} -p $ARM_CLIENT_SECRET --tenant ${element(split(",", self.triggers.ad_info), 2)} # 重置Defender防护层为Free az security pricing create -n VirtualMachines --tier 'Free' --subscription ${element(split(",", self.triggers.ad_info), 1)} # 关闭自动代理部署 az security auto-provisioning-setting update -n default --auto-provision Off --subscription ${element(split(",", self.triggers.ad_info), 1)} # 若启用了Azure Monitor代理,也需要关闭 az security auto-provisioning-setting update -n default --azure-monitor-agent-auto-provision Off --subscription ${element(split(",", self.triggers.ad_info), 1)} EOD } }
关键说明
azurerm_security_center_auto_provisioning是控制代理自动部署的核心资源:auto_provision = "On"会自动给订阅内的虚拟机部署Log Analytics代理azure_monitor_agent_auto_provision = "On"用于启用新一代Azure Monitor代理的自动部署
- 如果需要将代理数据发送到自定义Log Analytics工作区,指定
workspace_id参数即可,否则会使用Defender默认创建的工作区 - 确保执行Terraform的服务主体拥有Security Admin或Contributor权限,否则无法修改安全中心设置
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

