Azure Policy 定义结构基础知识
Azure Policy 定义描述了资源符合性条件以及在满足某个条件时所产生的效果。 条件将资源属性字段或值与所需值进行比较。 资源属性字段是通过别名进行访问的。 如果资源属性字段为数组,则可使用特殊的数组别名从所有数组成员中选择值,并将条件应用于每个值。 如需了解更多,请参见条件。
通过使用策略分配,可以控制成本和管理资源。 例如,可指定仅允许特定类型的虚拟机。 也可要求资源使用特定的标记。 某个范围内的分配适用于该范围及以下范围内的所有资源。 如果将策略分配应用到资源组,则会将其应用到该资源组中的所有资源。
使用 JSON 创建包含以下元素的策略定义:
displayName
description
mode
metadata
parameters
policyRule
- 逻辑计算
effect
例如,以下 JSON 说明限制资源部署位置的策略:
{
"properties": {
"displayName": "Allowed locations",
"description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
"mode": "Indexed",
"metadata": {
"version": "1.0.0",
"category": "Locations"
},
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of locations that can be specified when deploying resources",
"strongType": "location",
"displayName": "Allowed locations"
},
"defaultValue": [
"chinanorth2"
]
}
},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
}
有关详细信息,请转到策略定义架构。 Azure Policy 内置和模式位于 Azure Policy 示例。
显示名称和说明
请使用 displayName
和 description
来标识策略定义,并提供定义使用上下文。 displayName
的最大长度为 128 个字符,description
的最大长度为 512 个字符。
注意
在创建或更新策略定义期间,id
、type
和 name
由 JSON 外部属性定义,在 JSON 文件中不是必需的。 通过 SDK 获取策略定义将返回 id
、type
和 name
属性作为 JSON 的一部分,但每个属性都是与策略定义相关的只读信息。
策略类型
尽管无法设置 policyType
属性,但 SDK 返回了三个值且在门户中可见:
Builtin
:Microsoft 提供和维护这些策略定义。Custom
:客户创建的所有策略定义都具有此值。
模型
mode
的配置要取决于策略是针对 Azure 资源管理器属性还是资源提供程序属性。
资源管理器模式
mode
决定要为策略定义评估的资源类型。 支持的模式包括:
all
:评估资源组、订阅和所有资源类型indexed
:仅评估支持标记和位置的资源类型
例如,资源 Microsoft.Network/routeTables
支持标记和位置,并在这两种模式中进行评估。 但是,无法标记资源 Microsoft.Network/routeTables/routes
,也不会在 indexed
模式下对其进行评估。
大多数情况下,建议将 mode
设置为 all
。 通过门户创建的所有策略定义使用 all
模式。 如果使用 PowerShell 或 Azure CLI,则可以手动指定 mode
参数。 如果策略定义不包含 mode
值,则在 Azure PowerShell 中默认为 all
,在 Azure CLI 中默认为 null
。 null
模式等同于使用 indexed
来支持后向兼容性。
在创建强制执行标记或位置的策略时,应该使用 indexed
。 虽然并不是必需的,但是它会阻止不支持标记和位置的资源,使其不会在符合性结果中显示为不兼容。 有一个例外情况,就是资源组和订阅。 策略定义若在资源组或订阅上强制执行位置或标记,则应将 mode
设为 all
,并明确以 Microsoft.Resources/subscriptions/resourceGroups
或 Microsoft.Resources/subscriptions
类型为目标。 有关示例,请参阅模式:标记 - 示例 #1。 有关支持标记的资源列表,请参阅有关 Azure 资源的标记支持。
资源提供程序模式
完全支持以下资源提供程序模式:
Microsoft.Kubernetes.Data
用于管理 Kubernetes 群集和组件(如 Pod、容器和入口)。 支持 Azure Kubernetes 服务群集和已启用 Azure Arc 的 Kubernetes 群集。 使用该资源提供程序模式的定义使用效果“审核”、“拒绝”和“已禁用”。Microsoft.KeyVault.Data
,用于管理 Azure Key Vault 中的保管库和证书。 有关这些策略定义的详细信息,请参阅将 Azure Key Vault 与 Azure Policy 集成。
Microsoft.DataFactory.Data
用于使用 Azure Policy 拒绝未在允许列表中指定的 Azure 数据工厂出站流量域名。 此资源提供程序模式仅强制实施,在公共预览版中不报告合规性情况。
注意
除非明确声明,否则资源提供程序模式仅支持内置策略定义,且不支持在组件级别进行豁免。
Metadata
metadata
可选属性用于存储关于策略定义的信息。 客户可在 metadata
中定义对其组织有用的任何属性和值。 但是,Azure 策略和内置策略有一些相同属性。每个 metadata
属性有 1024 个字符的限制。
常见元数据属性
version
(字符串):跟踪有关策略定义的内容版本的详细信息。category
(字符串):确定在 Azure 门户中的哪个类别下显示策略定义。preview
(布尔):如果策略定义为“预览”,则为 True 或 False 标记。deprecated
(布尔):如果策略定义被标记为“已弃用”,则为 True 或 False 标记。portalReview
(字符串):决定是否应在门户中查看参数,而不考虑必需的输入。
定义位置
创建计划或策略时,需要指定定义位置。 定义位置必须是管理组或订阅。 此位置决定了计划或策略的分配范围。 资源必须是用于分配的目标定义位置的层次结构中的直系成员或子代。
如果定义位置是:
- 订阅 - 策略定义只能分配到该订阅内的资源。
- 管理组 - 策略定义只能分配到子管理组和子订阅内的资源。 如果你计划将此策略定义应用于多个订阅,该位置必须是包含每个订阅的管理组。
有关详细信息,请参阅了解 Azure Policy 中的范围。
后续步骤
- 有关策略定义结构的详细信息,请参阅参数、策略规则和别名。
- 有关计划,请参阅计划定义结构。
- 在 Azure Policy 示例中查看示例。
- 查看了解策略效果。
- 了解如何以编程方式创建策略。
- 了解如何获取符合性数据。
- 了解如何修正不符合的资源。
- 参阅使用 Azure 管理组来组织资源,了解什么是管理组。