创建自定义 Azure 安全计划和策略

为了帮助保护系统和环境,Microsoft Defender for Cloud 会生成安全建议。 这些建议基于行业最佳做法,并已合并在提供给所有客户的通用默认安全策略中。 此外,还可能会基于 Microsoft Defender for Cloud 的有关行业和法规标准的知识来提供建议。

你可以利用此功能添加自己的自定义计划。 尽管安全分数中未包含自定义计划,但如果你的环境不遵循你所创建的策略,你将收到建议。 你创建的任何自定义计划都会显示在所有建议的列表中,可以按计划进行筛选,以查看针对计划的建议。 这些计划还将同内置计划一起显示在合规性仪表板中,如教程提高合规性中所述。

Azure Policy 文档中所述,当你为自定义计划指定位置时,该位置必须是某个管理组或订阅。

提示

有关本页关键概念的概述,请参阅什么是安全策略、计划和建议?

可以查看由控件(类似于合规性标准中的控件)组织的自定义计划。 若要了解如何在自定义计划中创建策略组并将其组织到你的计划中,请按照策略定义组中提供的指导操作。

将自定义计划添加到订阅

  1. 在 Defender for Cloud 的菜单中,打开“环境设置”。

  2. 选择要将自定义计划添加到的相关订阅或管理组。

    注意

    若要在 Defender for Cloud 中评估和显示自定义计划,必须在订阅级别(或更高级别)添加它们。 建议选择最广泛的可用范围。

  3. 在“安全策略”页中的“你的自定义计划”区域中,选择“添加自定义计划”。

  4. 查看你的组织中已创建的自定义策略的列表,然后选择“添加”,将策略分配给订阅。

如果列表中没有符合你的需求的计划,你可以创建一个。

创建新的自定义计划:

  1. 选择“新建”。

  2. 输入定义的位置和自定义名称。

    注意

    自定义计划不应与其他自定义或内置计划同名。 如果创建具有相同名称的自定义计划,则会导致仪表板中显示的信息发生冲突。

  3. 选择要包含的策略,然后选择“添加”。

  4. 输入任何所需参数。

  5. 选择“保存”。

  6. 在“添加自定义计划”页中,选择“刷新”。 新计划将可用。

  7. 选择“添加”并将其分配到订阅。

    Create or add a policy.

    注意

    创建新计划需要使用订阅所有者凭据。 有关 Azure 角色的详细信息,请参阅 Microsoft Defender for Cloud 中的权限

    新计划将会生效,你可以在以下两个方面看到效果:

    • 在 Defender for Cloud 菜单中,选择“合规性”。 符合性仪表板将会打开,其中显示了新的自定义计划以及内置计划。

    • 如果环境未遵循你已定义的策略,则你会开始收到建议。

  8. 若要查看针对策略生成的建议,请在边栏中选择“建议”打开“建议”页。 显示的建议带有“自定义”标签,在大约一小时内会一直显示。

    Custom recommendations.

使用 REST API 在 Azure Policy 中配置安全策略

Microsoft Defender for Cloud 与 Azure Policy 实现了本机集成,借助它,你可以利用 Azure Policy 的 REST API 来创建策略分配。 以下说明演示如何创建策略分配以及如何自定义现有的分配。

Azure Policy 中的重要概念:

  • 策略定义是一种规则

  • 计划是策略定义(规则)的集合

  • 分配是将计划或策略应用于特定的范围(管理组、订阅等)

Defender for Cloud 有一项内置计划(Azure 云安全基准),该计划包括其所有安全策略。 为评估对 Azure 资源的 Defender for Cloud 策略,应对管理组或要评估的订阅创建一个分配。

内置计划默认启用所有 Defender for Cloud 策略。 可以选择禁用内置计划中的某些策略。 例如,若要应用除 Web 应用程序防火墙以外的所有 Defender for Cloud 策略,请将策略的 effect 参数的值更改为“Disabled” 。

API 示例

在下面的示例中,替换以下三个变量:

  • {scope},用于输入要应用策略的管理组或订阅的名称
  • {policyAssignmentName},用于输入相关策略分配的名称
  • {name},用于输入你的名字或批准策略更改的管理员的名字

本示例演示如何在订阅或管理组上分配内置的 Defender for Cloud 计划:

   PUT  
   https://management.chinacloudapi.cn/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2018-05-01 

   Request Body (JSON) 

   { 

     "properties":{ 

   "displayName":"Enable Monitoring in Microsoft Defender for Cloud", 

   "metadata":{ 

   "assignedBy":"{Name}" 

   }, 

   "policyDefinitionId":"/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8", 

   "parameters":{}, 

   } 

   } 

本示例演示如何在订阅上分配内置的 Defender for Cloud 计划,并禁用以下策略:

  • 系统更新 ("systemUpdatesMonitoringEffect")

  • 安全配置 ("systemConfigurationsMonitoringEffect")

  • 终结点保护 ("endpointProtectionMonitoringEffect")

   PUT https://management.chinacloudapi.cn/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2018-05-01 

   Request Body (JSON) 

   { 

     "properties":{ 

   "displayName":"Enable Monitoring in Microsoft Defender for Cloud", 

   "metadata":{ 

   "assignedBy":"{Name}" 

   }, 

   "policyDefinitionId":"/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8", 

   "parameters":{ 

   "systemUpdatesMonitoringEffect":{"value":"Disabled"}, 

   "systemConfigurationsMonitoringEffect":{"value":"Disabled"}, 

   "endpointProtectionMonitoringEffect":{"value":"Disabled"}, 

   }, 

    } 

   } 

本示例演示如何在订阅或管理组上分配自定义 Defender for Cloud 计划:

若要将计划载入 Defender 中的自定义安全标准,需要在请求正文中包含 "ASC":"true",如下所示。 ASC 字段将计划加入 Microsoft Defender for Cloud。

以下示例演示如何执行此操作。

有关载入自定义计划的示例

  PUT  
  PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}?api-version=2021-06-01

  Request Body (JSON) 

  {
    "properties": {
      "displayName": "Cost Management",
      "description": "Policies to enforce low cost storage SKUs",
      "metadata": {
        "category": "Cost Management"
        "ASC":"true"
      },
      "parameters": {
        "namePrefix": {
          "type": "String",
          "defaultValue": "myPrefix",
          "metadata": {
            "displayName": "Prefix to enforce on resource names"
          }
        }
      },
      "policyDefinitions": [
        {
          "policyDefinitionId": "/subscriptions/ae640e6b-ba3e-4256-9d62-2993eecfa6f2/providers/Microsoft.Authorization/policyDefinitions/7433c107-6db4-4ad1-b57a-a76dce0154a1",
          "policyDefinitionReferenceId": "Limit_Skus",
          "parameters": {
            "listOfAllowedSKUs": {
              "value": [
                "Standard_GRS",
                "Standard_LRS"
              ]
            }
          }
        },
        {
          "policyDefinitionId": "/subscriptions/ae640e6b-ba3e-4256-9d62-2993eecfa6f2/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
          "policyDefinitionReferenceId": "Resource_Naming",
          "parameters": {
            "prefix": {
              "value": "[parameters('namePrefix')]"
            },
            "suffix": {
              "value": "-LC"
            }
          }
        }
      ]
    }
  }

有关删除工作分配的示例

此示例演示如何删除分配:

  DELETE   
  https://management.chinacloudapi.cn/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2018-05-01 

增强自定义建议(旧版)

通过 Microsoft Defender for Cloud 提供的内置建议包括严重性级别和修正说明等详细信息。 如果要将此类型的信息添加到 Azure 的自定义建议中,请使用 REST API。

可添加的两种类型的信息为:

  • RemediationDescription - 字符串
  • Severity - 枚举 [Low、Medium、High]

对于属于自定义计划一部分的策略,应将元数据添加到策略定义中。 它应在“securityCenter”属性中,如下所示:

 "metadata": {
	"securityCenter": {
		"RemediationDescription": "Custom description goes here",
		"Severity": "High"
    },

下面是包含 metadata/securityCenter 属性的另一个自定义策略示例:

{
"properties": {
	"displayName": "Security - ERvNet - AuditRGLock",
	"policyType": "Custom",
	"mode": "All",
	"description": "Audit required resource groups lock",
	"metadata": {
		"securityCenter": {
			"RemediationDescription": "Resource Group locks can be set via Azure Portal -> Resource Group -> Locks",
			"Severity": "High"
		}
	},
	"parameters": {
		"expressRouteLockLevel": {
			"type": "String",
			"metadata": {
				"displayName": "Lock level",
				"description": "Required lock level for ExpressRoute resource groups."
			},
			"allowedValues": [
				"CanNotDelete",
				"ReadOnly"
			]
		}
	},
	"policyRule": {
		"if": {
			"field": "type",
			"equals": "Microsoft.Resources/subscriptions/resourceGroups"
		},
		"then": {
			"effect": "auditIfNotExists",
			"details": {
				"type": "Microsoft.Authorization/locks",
				"existenceCondition": {
					"field": "Microsoft.Authorization/locks/level",
					"equals": "[parameters('expressRouteLockLevel')]"
				}
			}
		}
	}
}
}

有关使用 securityCenter 属性的其他示例,请参阅 REST API 文档的此部分