denyAction 效果用于根据对资源的预期操作大规模阻止请求。 目前唯一支持的操作是 DELETE。 此效果和操作名称有助于防止意外删除关键资源。
DenyAction 评估
提交具有适用操作名称和目标范围的请求调用时,denyAction 会阻止请求成功。 该请求返回为 403 (Forbidden)。 在门户中,可以将 Forbidden 视为策略分配阻止的部署状态。
              Microsoft.Authorization/policyAssignments、Microsoft.Authorization/denyAssignments、Microsoft.Blueprint/blueprintAssignments、Microsoft.Resources/deploymentStacks、Microsoft.Resources/subscriptions 和 Microsoft.Authorization/locks 都免于强制实施 denyAction,以防止出现锁定情况。
订阅删除
策略不会阻止在删除订阅期间删除资源。
资源组删除
在删除资源组期间,策略会根据 denyAction 策略评估支持位置和标记的资源。 只有在策略规则中将 cascadeBehaviors 设置为 deny 的策略才会阻止删除资源组。 策略不会阻止移除不支持位置和标记的资源,也不会阻止移除任何具有 mode:all 的策略。
级联删除
当删除父资源会隐式删除其所有子资源和扩展资源时,会发生级联删除。 当删除操作针对的是父资源时,策略不会阻止移除子资源和扩展资源。 例如,Microsoft.Insights/diagnosticSettings 是 Microsoft.Storage/storageaccounts 的扩展资源。 如果 denyAction 策略的目标是 Microsoft.Insights/diagnosticSettings,则对诊断设置(子级)的删除调用将失败,但对存储帐户(父级)的删除将隐式删除诊断设置(扩展)。
下表说明了在给定适用于所分配 denyAction 策略的资源和 DELETE 调用的目标范围时,资源是否会受到保护而不被删除。 在此表的上下文中,索引资源是支持标记和位置的资源,非索引资源是不支持标记或位置的资源。 有关索引和非索引资源的详细信息,请转到定义模式。 子资源是只存在于另一资源的上下文内的资源。 例如,虚拟机的扩展资源是虚拟机的子资源,而虚拟机是父资源。
| 正在删除的实体 | 适用于策略条件的实体 | 采取的操作 | 
|---|---|---|
| 资源 | 资源 | 已保护 | 
| 订阅 | 资源 | 已删除 | 
| 资源组 | 索引资源 | 取决于 cascadeBehaviors | 
| 资源组 | 未编制索引的资源 | 已删除 | 
| 子资源 | 父资源 | 保护父资源;删除子资源 | 
| 父资源 | 子资源 | 已删除 | 
DenyAction 属性
              details 效果的“denyAction”属性具有定义操作和行为的所有子属性。
- 
              
actionNames(必需)- 一个数组,用于指定要阻止执行的操作。
 - 支持的操作名称为:
delete。 
 - 
              
cascadeBehaviors(可选)- 一个对象 ,用于定义在删除资源组时隐式删除资源时需遵循的行为。
 - 仅在 mode 设置为 
indexed的策略定义中受支持。 - 允许的值为 
allow或deny。 - 默认值为 
deny。 
 
DenyAction 示例
示例:拒绝针对具有等于 prod 的标记环境的数据库帐户的任何删除调用。由于级联行为设置为“拒绝”,因此请阻止以具有适用数据库帐户的资源组为目标的任何 DELETE 调用。
{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.DocumentDb/accounts"
      },
      {
        "field": "tags.environment",
        "equals": "prod"
      }
    ]
  },
  "then": {
    "effect": "denyAction",
    "details": {
      "actionNames": [
        "delete"
      ],
      "cascadeBehaviors": {
        "resourceGroup": "deny"
      }
    }
  }
}
后续步骤
- 在 Azure Policy 示例中查看示例。
 - 查看 Azure Policy 定义结构。
 - 了解如何以编程方式创建策略。
 - 了解如何获取符合性数据。
 - 了解如何修正不符合的资源。
 - 请参阅 Azure 管理组。