Azure Policy 定义 denyAction 效果
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
调用目标范围的情况下,是否会保护资源不被删除。 在此表的上下文中,索引资源是支持标记和位置的资源,非索引资源是不支持标记或位置的资源。 有关索引和非索引资源的详细信息,请转到定义模式。 子资源是只存在于另一资源的上下文内的资源。 例如,虚拟机扩展资源是虚拟机的子级,而虚拟机是父资源。
正在删除的实体 | 适用于策略条件的实体 | 采取的操作 |
---|---|---|
资源 | 资源 | Protected |
订阅 | 资源 | Deleted |
资源组 | 索引资源 | 依赖cascadeBehaviors |
资源组 | 未编制索引的资源 | Deleted |
子资源 | 父资源 | 父级受保护;子级已删除 |
父资源 | 子资源 | Deleted |
DenyAction 属性
denyAction
效果的“details
”属性具有定义操作和行为的所有子属性。
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 管理组。