共用方式為

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

策略和策略措施提供了一种简单的方法,可以通过 Azure Monitor 的诊断设置 实现大规模日志记录。 本文介绍如何为没有内置策略的 Azure 资源创建自定义策略。 请参阅 使用内置 Azure 策略大规模创建诊断设置 ,以便更轻松地为具有内置策略的 Azure 资源创建诊断设置。

日志类别组

日志类别组,将类似类型的日志组合在一起。 使用类别组,可以轻松地在单个命令中引用多个日志。 存在包含所有日志的 allLogs 类别组。 还有一个包含所有审核日志的审核类别组。 通过使用类别组,可以定义在将新日志类别添加到组时动态更新的策略。

自定义策略定义

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

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

  1. 请确保已安装 Azure PowerShell

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

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

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

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

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

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

    以下示例演示了如何通过 PowerShell 和 Azure CLI 安装策略定义。 每个示例包括元数据,用于指定一个“监视”类别,以便将新策略定义与内置策略定义分组到一起。

    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
    

Initiative

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

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

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

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

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

Assignment

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

此屏幕截图显示 Azure 门户中 Log Analytics 工作区的诊断设置中“分配任务”部分的“基础”选项卡设置。

通过使用计划参数,你可以同时为计划中的所有策略定义指定工作区或任何其他详细信息。

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

Remediation

该计划在创建时应用于每个虚拟机。 修正任务将该计划中的策略定义部署到现有资源,因此,你可以为已创建的任何资源创建诊断设置。

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

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

Next steps