使用自定义 Azure 策略大规模创建诊断设置

Azure Policy 和策略计划提供了一种通过使用 Azure Monitor 的诊断设置大规模启用日志记录的方法。 本文介绍如何为没有内置策略的 Azure 资源创建自定义策略。 若要为具有内置策略的 Azure 资源创建诊断设置,请参阅 使用内置 Azure 策略大规模创建诊断设置

先决条件

  • 若要创建策略定义、计划和分配,你需要在相应工作范围内拥有 资源策略参与者 角色,或拥有包含这些权限的角色,例如 所有者
  • 若要对 deployIfNotExists 执行修正操作,策略分配需要托管标识。 授予该标识一个角色,该角色有权在分配范围内创建诊断设置,例如监视参与者Log Analytics参与者

使用日志类别组

日志类别组包含类似类型的日志。 使用类别组,可以轻松地在单个命令中引用多个日志。

类别组 内容
allLogs 该资源的所有可用日志。
audit 该资源的所有审计日志。

使用类别组定义在将新日志类别添加到组时动态更新的策略。

创建自定义策略定义

对于没有内置策略的资源类型,请创建自定义策略定义。 在 Azure 门户中手动创建策略,方法是复制现有的内置策略,然后修改资源类型。 也可以使用 PowerShell 库中的脚本以编程方式创建策略。

该脚本 Create-AzDiagPolicy 为特定资源类型创建策略文件。 使用 PowerShell 或Azure CLI安装文件。 使用以下过程可为诊断设置创建自定义策略定义:

  1. 请确保已安装 Azure PowerShell

  2. 使用以下命令安装脚本:

    Install-Script -Name Create-AzDiagPolicy
    
  3. 通过使用参数指定要将日志发送到何处来运行该脚本。 在提示符下指定订阅和资源类型。

    例如,若要创建将日志发送到Log Analytics工作区和Azure 事件中心的策略定义,请使用以下命令:

    Create-AzDiagPolicy.ps1 -ExportLA -ExportEH -ExportDir ".\PolicyFiles"
    

    或者,在命令中指定订阅和资源类型。 例如,若要创建将日志发送到Log Analytics工作区和SQL Server数据库的Azure 事件中心的策略定义,请使用以下命令:

    Create-AzDiagPolicy.ps1 -SubscriptionID <subscription id> -ResourceType Microsoft.Sql/servers/databases -ExportLA -ExportEH -ExportDir ".\PolicyFiles"
    
  4. 此脚本为每个策略定义创建单独的文件夹。 每个文件夹包含三个文件: azurepolicy.jsonazurepolicy.rules.jsonazurepolicy.parameters.json。 若要在 Azure 门户中手动创建策略,请复制并粘贴其内容azurepolicy.json,因为它包含整个策略定义。 通过 PowerShell 或 Azure CLI 从命令行使用其他两个文件创建策略定义。

    以下示例演示了如何通过 PowerShell 和 Azure CLI 安装策略定义。 每个示例都包含一个元数据,用于指定一个类别 Monitoring ,以使用内置策略定义对新策略定义进行分组。

    New-AzPolicyDefinition -name "Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace" -policy .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json -parameter .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json -mode All -Metadata '{"category":"Monitoring"}'
    
    az policy definition create --name 'deploy-diag-setting-sql-database--workspace' --display-name 'Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace'  --rules 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json' --params 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json' --subscription 'AzureMonitor_Docs' --mode All
    

创建倡议

与为每个策略定义创建分配不同,一种常见的策略是创建一个计划,在其中包括策略定义,以便为每个 Azure 服务创建诊断设置。 根据你管理环境的方式,在计划与管理组、订阅或资源组之间创建分配。 此策略具有以下优势:

  • 为计划创建单个分配,而不是为每个资源类型创建多个分配。 对多个监视组、订阅或资源组使用同一计划。
  • 当需要添加新的资源类型或目标时,只需修改计划即可。 例如,初始要求可能是仅将数据发送到Log Analytics工作区,但稍后需要添加Azure 事件中心。 请修改方案,而不要创建新任务。

有关创建计划的详细信息,请参阅创建和分配计划定义。 请考虑以下建议:

  • 类别设置为监视,以便与相关的内置和自定义策略定义分组。
  • 使用一个通用的计划参数,而不是分别为该计划中包含的策略定义指定 Log Analytics 工作区和 Azure 事件中心 的详细信息。 此参数允许为所有策略定义指定通用值,并在必要时更改该值。

显示倡议定义设置的屏幕截图。

分配举措

根据要监视的资源的范围,将计划分配给 Azure 管理组、订阅或资源组。 管理组可用于限定策略范围,尤其是当你的组织有多个订阅时。

在 Azure 门户中将方案分配到 Log Analytics 工作区的基本设置截图。

计划参数允许你只需一次即可为计划中的所有策略定义指定工作区或其他任何详细信息。

显示“参数”选项卡上的计划参数的屏幕截图。

创建修正任务

创建资源时,Azure Policy 会将该计划应用到每个资源。 修正任务将计划中的策略定义部署到现有资源,并为这些资源创建诊断设置。

使用 Azure 门户创建分配时,可以选择同时创建修正任务。 有关修正的详细信息,请参阅 使用 Azure Policy 修正不符合资源

显示 Log Analytics 工作区的倡议修正措施的屏幕截图。

验证诊断设置

在分配操作和任何修正任务完成后,请确认你的资源中是否存在诊断设置:

  1. 在Azure门户中,转到分配范围内的资源,然后在“监视”下选择“诊断设置”。 确认设置将日志发送到所配置的目标。

  2. 或者,使用Azure CLI列出资源的诊断设置:

    az monitor diagnostic-settings list --resource <resource-id>