将策略定义分配到某个范围后,Azure Policy 会确定该范围内的哪些资源应进行合规性评估。 仅当认为某个资源适用于给定的策略分配时,才会评估其合规性。
适用性取决于多种因素:
- 策略规则的 if块中的条件。
- 策略定义的模式。
- 分配中指定的排除范围。
- 分配中指定的“资源选择器”。
- 资源或资源层次结构的例外。
评估策略规则的 if 块中的条件适用性的方式根据效果而略有不同。
注意
适用性与合规性不同,用于确定两者的逻辑也不同。 如果某个资源适用,则意味着它与策略相关。 如果某个资源合规,则意味着它符合策略。 有时,只有策略规则中的某些条件会影响适用性,而策略规则的所有条件都会影响合规性状态。
资源管理器模式
ifNotExists 策略效果
AuditIfNotExists 和 DeployIfNotExists 策略的适用性取决于策略规则的整个 if 条件。 当 if 计算为 false 时,该策略不适用。
其他所有策略类型
Azure Policy 仅计算策略规则 if 表达式中的 type、name 和 kind 条件,并将其他条件视为 true(否定时为 false)。 如果最终计算结果为 true,则该策略适用, 否则不适用。
下面是前面所述适用性逻辑的特殊情况:
| 方案 | 结果 | 
|---|---|
| if条件中的任何无效别名 | 策略不适用 | 
| 当 if条件仅由kind条件组成时 | 该策略适用于所有资源 | 
| 当 if条件仅由name条件组成时 | 该策略适用于所有资源 | 
| 当 if条件仅由type和kind条件组成时 | 在确定适用性时只考虑 type条件 | 
| 当 if条件仅由type和name条件组成时 | 在确定适用性时只考虑 type条件 | 
| 当 if条件由type、kind及其他条件组成时 | 在确定适用性时考虑 type和kind条件 | 
| 当 if条件由type、name及其他条件组成时 | 在确定适用性时考虑 type和name条件 | 
| 当任何条件(包括部署参数)包含 location条件时 | 不适用于订阅 | 
资源提供程序模式
Microsoft.Kubernetes.Data
Microsoft.Kubernetes.Data 策略的适用性取决于策略规则的整个 if 条件。 当 if 计算为 false 时,该策略不适用。
Microsoft.KeyVault.Data、Microsoft.DataFactory.Data
如果策略规则的 type 条件评估为 true,则带有这些资源提供程序模式的策略适用。 type 表示组件类型。
密钥保管库组件类型:
- Microsoft.KeyVault.Data/vaults/certificates
- Microsoft.KeyVault.Data/vaults/keys
- Microsoft.KeyVault.Data/vaults/secrets
Azure 数据工厂组件类型:
- Microsoft.DataFactory.Data/factories/outboundTraffic
不适用的资源
在某些情况下,根据条件或范围,资源适用于分配,但由于业务原因,它们不应适用。 此时,最好应用排除项或豁免项。 若要详细了解何时使用每一种,请查看范围比较
注意
根据设计,Azure Policy 不会通过策略评估来评估 Microsoft.Resources 资源提供程序下的资源(订阅和资源组除外)。
后续步骤
- 了解如何将资源标记为不适用。
- 详细了解适用性限制
- 了解如何获取 Azure 资源的合规性数据。