你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Azure Monitor 的内置策略
策略和策略计划提供了一种简单的方法,可通过 Azure Monitor 的诊断设置启用大规模日志记录。 使用策略计划时,可以为 Azure 环境中所有受支持的资源启用审核日志记录。
启用资源日志以跟踪在资源上发生的活动和事件,并让你了解发生的任何变化。
分配策略以启用资源日志,并根据需要将其发送到目标。 将日志发送到第三方 SIEM 系统的事件中心,以实现连续的安全操作。 将日志发送到存储帐户,以便进行长期存储或实现法规合规性。
存在一组内置策略和计划,用于将资源日志定向到 Log Analytics 工作区、事件中心和存储帐户。 这些策略会启用审核日志记录,将属于审核日志类别组的日志发送到事件中心、Log Analytics 工作区或存储帐户。 策略的 effect
为 DeployIfNotExists
,如果未定义其他设置,则会将策略部署为默认值。
部署策略。
使用门户、CLI、PowerShell 或 Azure 资源管理模板部署策略和计划
以下步骤演示如何应用策略,以将密钥保管库的审核日志发送到 Log Analytics 工作区。
在“策略”页中,选择“ 定义”。
选择范围。 你可以将策略应用于整个订阅、资源组或单个资源。
在“定义类型”下拉列表中,选择“策略”。
在“类别”下拉列表中选择“监视”
在“搜索”字段中输入“keyvault”。
选择按类别组为密钥保管库 (microsoft.keyvault/vaults) 启用到 Log Analytics 的日志记录策略,
在策略定义页中,选择“分配”
选择 “参数” 选项卡。
选择要将审核日志发送到的 Log Analytics 工作区。
选择“修正”选项卡。
在“修正”选项卡上,从“要修正的策略”下拉列表中选择 keyvault 策略。
选中“创建托管标识”复选框。
在“托管标识类型”下,选择“系统分配的托管标识”。
依次选择“查看 + 创建”、“创建”。
若要使用 CLI 应用策略,请使用以下命令:
使用 az policy assignment create
创建策略分配。
az policy assignment create --name <policy assignment name> --policy "6b359d8f-f88d-4052-aa7c-32015963ecc1" --scope <scope> --params "{\"logAnalytics\": {\"value\": \"<log analytics workspace resource ID"}}" --mi-system-assigned --location <location>
例如,应用策略以将审核日志发送到 Log Analytics 工作区
az policy assignment create --name "policy-assignment-1" --policy "6b359d8f-f88d-4052-aa7c-32015963ecc1" --scope /subscriptions/12345678-aaaa-bbbb-cccc-1234567890ab/resourceGroups/rg-001 --params "{\"logAnalytics\": {\"value\": \"/subscriptions/12345678-aaaa-bbbb-cccc-1234567890ab/resourcegroups/rg-001/providers/microsoft.operationalinsights/workspaces/workspace-001\"}}" --mi-system-assigned --location eastus
将所需角色分配给为策略分配创建的标识。
通过搜索 roleDefinitionIds 在策略定义中查找角色
...},
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/92aaf0da-9dab-42b6-94a3-d43ce8d16293"
],
"deployment": {
"properties": {...
使用 az policy assignment identity assign
分配所需的角色:
az policy assignment identity assign --system-assigned --resource-group <resource group name> --role <role name or ID> --identity-scope </scope> --name <policy assignment name>
例如:
az policy assignment identity assign --system-assigned --resource-group rg-001 --role 92aaf0da-9dab-42b6-94a3-d43ce8d16293 --identity-scope /subscriptions/12345678-aaaa-bbbb-cccc-1234567890ab/resourceGroups/rg001 --name policy-assignment-1
使用 az policy state trigger-scan
触发扫描以查找现有资源。
az policy state trigger-scan --resource-group rg-001
使用 az policy remediation create
创建修正任务以将策略应用于现有资源。
az policy remediation create -g <resource group name> --policy-assignment <policy assignment name> --name <remediation name>
例如,
az policy remediation create -g rg-001 -n remediation-001 --policy-assignment policy-assignment-1
有关使用 CLI 进行策略分配的详细信息,请参阅 Azure CLI 参考 - az policy assignment
若要使用 PowerShell 应用策略,请使用以下命令:
设置环境
选择订阅并设置资源组
Select-AzSubscription <subscriptionID>
$rg = Get-AzResourceGroup -Name <resource groups name>
获取策略定义并配置策略的参数。 在下面的示例中,我们分配用于将 keyVault 日志发送到 Log Analytics 工作区的策略
$definition = Get-AzPolicyDefinition |Where-Object Name -eq 6b359d8f-f88d-4052-aa7c-32015963ecc1
$params = @{"logAnalytics"="/subscriptions/<subscriptionID/resourcegroups/<resourcgroup>/providers/microsoft.operationalinsights/workspaces/<log anlaytics workspace name>"}
分配策略
$policyAssignment=New-AzPolicyAssignment -Name <assignment name> -DisplayName "assignment display name" -Scope $rg.ResourceId -PolicyDefinition $definition -PolicyparameterObject $params -IdentityType 'SystemAssigned' -Location <location>
#To get your assignemnt use:
$policyAssignment=Get-AzPolicyAssignment -Name '<assignment name>' -Scope '/subscriptions/<subscriptionID>/resourcegroups/<resource group name>'
将所需的一个或多个角色分配给系统分配的托管标识
$principalID=$policyAssignment.Identity.PrincipalId
$roleDefinitionIds=$definition.Properties.policyRule.then.details.roleDefinitionIds
$roleDefinitionIds | ForEach-Object {
$roleDefId = $_.Split("/") | Select-Object -Last 1
New-AzRoleAssignment -Scope $rg.ResourceId -ObjectId $policyAssignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
}
扫描合规性,然后创建修正任务以强制现有资源合规。
Start-AzPolicyComplianceScan -ResourceGroupName $rg.ResourceGroupName
Start-AzPolicyRemediation -Name $policyAssignment.Name -PolicyAssignmentId $policyAssignment.PolicyAssignmentId -ResourceGroupName $rg.ResourceGroupName
检查合规性
Get-AzPolicyState -PolicyAssignmentName $policyAssignment.Name -ResourceGroupName $policyAssignment.ResourceGroupName|select-object IsCompliant , ResourceID
大约 30 分钟后,策略会显示在资源的诊断设置中。
创建新资源时,策略将应用于这些资源。 若要将策略应用于现有资源,请创建修正任务。 修正任务使资源符合策略。
修正任务适用于特定策略。 对于包含多个策略的计划,请为计划中的每个策略创建一个修正任务,其中包含要使其合规的资源。
在首次分配策略时或在分配后的任何阶段定义修正任务。
若要在策略分配期间为策略创建修正任务,请选择“分配策略”页上的“修正”选项卡,然后选中“创建修正任务”复选框。
若要在分配策略后创建修正任务,请从“策略分配”页上的列表中选择已分配的策略。
选择“修正”。
在“策略修正”页的“修正任务”选项卡中跟踪修正任务的状态。
有关修正任务的详细信息,请参阅修正不合规的资源
分配计划
计划是策略的集合。 Azure Monitor 诊断设置有三个计划:
在此示例中,我们分配了一个计划,用于将审核日志发送到 Log Analytics 工作区。
在策略定义页中,选择范围。
在“定义类型”下拉列表中选择“计划”。
在“类别”下拉列表中选择“监视”。
在“搜索”字段中输入“审核”。
选择为支持的资源启用到 Log Analytics 的审核类别组资源日志记录计划。
在下一页上,选择“分配”
在“分配计划”页的“基本信息”选项卡上,选择要应用计划的范围。
在“分配名称”字段中输入名称。
选择“ 参数”选项卡。
参数包含策略中定义的参数。 在这种情况下,我们需要选择要将日志发送到的 Log Analytics 工作区。 有关每个策略的各个参数的详细信息,请参阅特定于策略的参数。
选择要将审核日志发送到的 Log Analytics 工作区。
选择“查看 + 创建”,然后选择“创建”
若要验证策略或计划分配是否正常工作,请在策略分配中定义的订阅或资源组范围内创建资源。
10 分钟后,选择资源的“诊断设置”页。
诊断设置将显示在列表中,它具有默认名称 setByPolicy-LogAnalytics 和你在策略中配置的工作区名称。
通过取消选中“仅显示需要输入或查看的参数”复选框,更改分配计划或策略页的“参数”选项卡中的默认名称。
设置环境变量
# Set up your environment variables.
$subscriptionId = <your subscription ID>;
$rg = Get-AzResourceGroup -Name <your resource group name>;
Select-AzSubscription $subscriptionId;
$logAnlayticsWorskspaceId=</subscriptions/$subscriptionId/resourcegroups/$rg.ResourceGroupName/providers/microsoft.operationalinsights/workspaces/<your log analytics workspace>;
获取计划定义。 在此示例中,我们将使用计划“为支持的资源启用到 Log Analytics 的审核类别组资源日志记录”, "/providers/Microsoft.Authorization/policySetDefinitions/f5b29bc4-feca-4cc6-a58a-772dd5e290a5"
$definition = Get-AzPolicySetDefinition |Where-Object ResourceID -eq /providers/Microsoft.Authorization/policySetDefinitions/f5b29bc4-feca-4cc6-a58a-772dd5e290a5;
设置分配名称并配置参数。 对于此计划,参数包括 Log Analytics 工作区 ID。
$assignmentName=<your assignment name>;
$params = @{"logAnalytics"="/subscriptions/$subscriptionId/resourcegroups/$($rg.ResourceGroupName)/providers/microsoft.operationalinsights/workspaces/<your log analytics workspace>"}
使用参数分配计划
$policyAssignment=New-AzPolicyAssignment -Name $assignmentName -Scope $rg.ResourceId -PolicySetDefinition $definition -PolicyparameterObject $params -IdentityType 'SystemAssigned' -Location eastus;
将 Contributor
角色分配到系统分配的托管标识。 对于其他计划,检查哪些角色是必需的。
New-AzRoleAssignment -Scope $rg.ResourceId -ObjectId $policyAssignment.Identity.PrincipalId -RoleDefinitionName Contributor;
扫描策略合规性。 Start-AzPolicyComplianceScan
命令需要几分钟才能返回
Start-AzPolicyComplianceScan -ResourceGroupName $rg.ResourceGroupName;
通过调用 Get-AzPolicyState
获取要修正的资源列表和所需参数
$assignmentState=Get-AzPolicyState -PolicyAssignmentName $assignmentName -ResourceGroupName $rg.ResourceGroupName;
$policyAssignmentId=$assignmentState.PolicyAssignmentId[0];
$policyDefinitionReferenceIds=$assignmentState.PolicyDefinitionReferenceId;
对于具有不合规资源的每种资源类型,请启动修正任务。
$policyDefinitionReferenceIds | ForEach-Object {
$referenceId = $_
Start-AzPolicyRemediation -ResourceGroupName $rg.ResourceGroupName -PolicyAssignmentId $policyAssignmentId -PolicyDefinitionReferenceId $referenceId -Name "$($rg.ResourceGroupName) remediation $referenceId";
}
检查修正任务完成时的合规性状态。
Get-AzPolicyState -PolicyAssignmentName $assignmentName -ResourceGroupName $rg.ResourceGroupName|select-object IsCompliant , ResourceID
可以使用以下命令获取策略分配详细信息:
$policyAssignment=Get-AzPolicyAssignment -Name $assignmentName -Scope "/subscriptions/$subscriptionId/resourcegroups/$($rg.ResourceGroupName)";
使用 az login
命令登录到 Azure 帐户。
使用 az account set
命令选择要应用策略计划的订阅。
使用 az policy assignment create
分配计划。
az policy assignment create --name <assignment name> --resource-group <resource group name> --policy-set-definition <initiative name> --params <parameters object> --mi-system-assigned --location <location>
例如:
az policy assignment create --name "assign-cli-example-01" --resource-group "cli-example-01" --policy-set-definition 'f5b29bc4-feca-4cc6-a58a-772dd5e290a5' --params '{"logAnalytics":{"value":"/subscriptions/12345678-aaaa-bbbb-cccc-1234567890ab/resourcegroups/cli-example-01/providers/microsoft.operationalinsights/workspaces/cli-example-01-ws"}, "diagnosticSettingName":{"value":"AssignedBy-cli-example-01"}}' --mi-system-assigned --location eastus
将所需角色分配给系统托管标识
通过搜索 roleDefinitionIds 的定义,在计划中的任何策略定义中查找要分配的角色,例如:
...},
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/92aaf0da-9dab-42b6-94a3-d43ce8d16293"
],
"deployment": {
"properties": {...
使用 az policy assignment identity assign
分配所需的角色:
az policy assignment identity assign --system-assigned --resource-group <resource group name> --role <role name or ID> --identity-scope <scope> --name <policy assignment name>
例如:
az policy assignment identity assign --system-assigned --resource-group "cli-example-01" --role 92aaf0da-9dab-42b6-94a3-d43ce8d16293 --identity-scope "/subscriptions/12345678-aaaa-bbbb-cccc-1234567890ab/resourcegroups/cli-example-01" --name assign-cli-example-01
为计划中的策略创建修正任务。
修正任务按策略创建。 每个任务针对特定 definition-reference-id
,在计划中指定为 policyDefinitionReferenceId
。 若要查找 definition-reference-id
参数,请使用以下命令:
az policy set-definition show --name f5b29bc4-feca-4cc6-a58a-772dd5e290a5 |grep policyDefinitionReferenceId
使用 az policy remediation create
修正资源
az policy remediation create --resource-group <resource group name> --policy-assignment <assignment name> --name <remediation task name> --definition-reference-id "policy specific reference ID" --resource-discovery-mode ReEvaluateCompliance
例如:
az policy remediation create --resource-group "cli-example-01" --policy-assignment assign-cli-example-01 --name "rem-assign-cli-example-01" --definition-reference-id "keyvault-vaults" --resource-discovery-mode ReEvaluateCompliance
若要为计划中的所有策略创建修正任务,请使用以下示例:
for policyDefinitionReferenceId in $(az policy set-definition show --name f5b29bc4-feca-4cc6-a58a-772dd5e290a5 |grep policyDefinitionReferenceId |cut -d":" -f2|sed s/\"//g)
do
az policy remediation create --resource-group "cli-example-01" --policy-assignment assign-cli-example-01 --name remediate-$policyDefinitionReferenceId --definition-reference-id $policyDefinitionReferenceId;
done
通用参数
下表描述了每组策略的通用参数。
参数 |
说明 |
有效值 |
默认 |
效果 |
启用或禁用策略执行 |
DeployIfNotExists, AuditIfNotExists, 已禁用 |
DeployIfNotExists |
diagnosticSettingName |
诊断设置名称 |
|
setByPolicy-LogAnalytics |
categoryGroup |
诊断类别组 |
无, 审核, allLogs |
审核 |
特定于策略的参数
Log Analytics 策略参数
此策略使用类别组部署诊断设置,以将日志路由到 Log Analytics 工作区。
参数 |
说明 |
有效值 |
默认 |
resourceLocationList |
用于将日志发送到附近 Log Analytics 的资源位置列表。 “*”选择所有位置 |
支持的位置 |
* |
logAnalytics |
Log Analytics 工作区 |
|
|
事件中心策略参数
此策略使用类别组部署诊断设置,以将日志路由到事件中心。
参数 |
说明 |
有效值 |
默认 |
resourceLocation |
资源位置必须与事件中心命名空间的位置相同 |
支持的位置 |
|
eventHubAuthorizationRuleId |
事件中心授权规则 ID。 授权规则位于事件中心命名空间级别。 例如 /subscriptions/{subscription ID}/resourceGroups/{resource group}/providers/Microsoft.EventHub/namespaces/{Event Hub namespace}/authorizationrules/{authorization rule} |
|
|
eventHubName |
事件中心名称 |
|
监视 |
存储帐户策略参数
此策略使用类别组部署诊断设置,以将日志路由到存储账户。
参数 |
说明 |
有效值 |
默认 |
resourceLocation |
资源位置必须与存储帐户位于同一位置 |
支持的位置 |
|
storageAccount |
存储帐户 resourceId |
|
|
支持的资源
Log Analytics 工作区、事件中心和存储帐户的内置审核日志策略适用于以下资源:
- microsoft.agfoodplatform/farmbeats
- microsoft.apimanagement/service
- microsoft.appconfiguration/configurationstores
- microsoft.attestation/attestationproviders
- microsoft.automation/automationaccounts
- microsoft.avs/privateclouds
- microsoft.cache/redis
- microsoft.cdn/profiles
- microsoft.cognitiveservices/accounts
- microsoft.containerregistry/registries
- microsoft.devices/iothubs
- microsoft.eventgrid/topics
- microsoft.eventgrid/domains
- microsoft.eventgrid/partnernamespaces
- microsoft.eventhub/namespaces
- microsoft.keyvault/vaults
- microsoft.keyvault/managedhsms
- microsoft.machinelearningservices/workspaces
- microsoft.media/mediaservices
- microsoft.media/videoanalyzers
- microsoft.netapp/netappaccounts/capacitypools/volumes
- microsoft.network/publicipaddresses
- microsoft.network/virtualnetworkgateways
- microsoft.network/p2svpngateways
- microsoft.network/frontdoors
- microsoft.network/bastionhosts
- microsoft.operationalinsights/workspaces
- microsoft.purview/accounts
- microsoft.servicebus/namespaces
- microsoft.signalrservice/signalr
- microsoft.signalrservice/webpubsub
- microsoft.sql/servers/databases
- microsoft.sql/managedinstances
后续步骤