你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Policy 定义 denyAction 效果

denyAction 效果用于根据对资源的大规模预期操作阻止请求。 目前唯一支持的操作是 DELETE。 此效果和操作名称有助于防止意外删除关键资源。

DenyAction 评估

提交具有适用操作名称和目标范围的请求调用时,denyAction 会阻止请求成功。 该请求返回为 403 (Forbidden)。 在门户中,可以将 Forbidden 视为策略分配阻止的部署状态。

Microsoft.Authorization/policyAssignmentsMicrosoft.Authorization/denyAssignmentsMicrosoft.Blueprint/blueprintAssignmentsMicrosoft.Resources/deploymentStacksMicrosoft.Resources/subscriptionsMicrosoft.Authorization/locks 都免于强制实施 denyAction,以防止出现锁定情况。

订阅删除

策略不会阻止在删除订阅期间删除资源。

资源组删除

策略会在删除资源组期间根据 denyAction 策略评估支持位置和标记的资源。 只有在策略规则中将 cascadeBehaviors 设置为 deny 的策略才会阻止删除资源组。 策略不会阻止移除不支持位置和标记的资源,也不会阻止移除任何具有 mode:all 的策略。

级联删除

当删除父资源会隐式删除其所有子资源和扩展资源时,会发生级联删除。 当删除操作针对的是父资源时,策略不会阻止移除子资源和扩展资源。 例如,Microsoft.Insights/diagnosticSettingsMicrosoft.Storage/storageaccounts 的扩展资源。 如果 denyAction 策略的目标是 Microsoft.Insights/diagnosticSettings,则对诊断设置(子级)的删除调用将失败,但对存储帐户(父级)的删除将隐式删除诊断设置(扩展)。

下表描述了在给定适用于分配的 denyAction 策略资源和 DELETE 调用目标范围的情况下,是否会保护资源不被删除。 在此表的上下文中,索引资源是支持标记和位置的资源,非索引资源是不支持标记或位置的资源。 有关索引和非索引资源的详细信息,请转到定义模式。 子资源是只存在于另一资源的上下文内的资源。 例如,虚拟机扩展资源是虚拟机的子级,而虚拟机是父资源。

正在删除的实体 适用于策略条件的实体 采取的操作
资源 资源 Protected
订阅 资源 Deleted
资源组 索引资源 依赖cascadeBehaviors
资源组 未编制索引的资源 Deleted
子资源 父资源 父级受保护;子级已删除
父资源 子资源 Deleted

DenyAction 属性

denyAction 效果的“details”属性具有定义操作和行为的所有子属性。

  • actionNames(必需)
    • 一个数组,用于指定要阻止执行的操作。
    • 支持的操作名称为:delete
  • cascadeBehaviors(可选)
    • 一个对象 ,用于定义在删除资源组时隐式删除资源时需遵循的行为。
    • 仅在 mode 设置为 indexed 的策略定义中受支持。
    • 允许的值为 allowdeny
    • 默认值为 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"
      }
    }
  }
}

后续步骤