我有哪些选项可以调试自定义 Azure 策略或评估策略引擎外部的字段?
What are my options to debug Custom Azure policies or evaluate fields outside policy engine?
我正在尝试构建一些自定义策略,并且我正在处理一些复杂的字段表达式,如下所示:
"then": {
"effect": "[parameters('effect')]",
"details": {
"type": "Microsoft.Network/azureFirewalls",
"existenceCondition": {
"count": {
"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*]",
"where": {
"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*].subnet.id",
"like": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(field('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"
}
},
"equals": 1
}
}
}
表达式不符合我的预期。是否有任何方法可以通过调用 Powershell 来评估策略引擎外部资源的上述某些字段或表达式?
例如,当我需要调试东西时,我如何在策略引擎之外评估这样的表达式:
"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*].subnet.id",
"like": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(field('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"
资源图查询
获取别名的当前值。我喜欢通过 API (Postman) 使用资源图查询。为此,请使用具有 Bearer Token 授权的以下端点。
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01
资源图查询正文负载:
{
"query": "Resources | where type =~ 'Microsoft.Network' | project aliases",
"subscriptions": [
"{{subscription_id}}"
]
}
更新:2022 年 1 月 29 日。看起来别名值不再在 Resource Graph 中编制索引。在这种情况下,我会使用下面描述的方法。您还可以在 powershell 中通过 运行 Get-AzPolicyAlias 验证您使用的别名路径。例如,(Get-AzPolicyAlias -NamespaceMatch 'microsoft.security' -ResourceTypeMatch 'pricings' ).Aliases
将提供 Microsoft.Security/pricings 资源提供程序下所有别名的列表。但是,它们不会告诉您当前值。要获取当前值,您可以编写一个策略并使用下面描述的方法。
Azure Policy 门户反馈
另外,另一个检查 Azure Policy 反馈的好地方是 Azure Policy 门户 Compliance
选项卡 blade。如果您可以让您的政策评估为 Non-Compliant
,它会向您反馈为什么以这种方式评估它。
根据政策执行此操作 blade
- 点击
Compliance
- 点击您的任务名称
- 单击适用的策略定义名称
- 查看任何
Non-Compliant
资源
- 单击该行最右侧的省略号
...
- Select
Compliant Reason
.
这将向您展示 Target Value
、Current Value
等方面的宝贵信息
我正在尝试构建一些自定义策略,并且我正在处理一些复杂的字段表达式,如下所示:
"then": {
"effect": "[parameters('effect')]",
"details": {
"type": "Microsoft.Network/azureFirewalls",
"existenceCondition": {
"count": {
"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*]",
"where": {
"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*].subnet.id",
"like": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(field('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"
}
},
"equals": 1
}
}
}
表达式不符合我的预期。是否有任何方法可以通过调用 Powershell 来评估策略引擎外部资源的上述某些字段或表达式?
例如,当我需要调试东西时,我如何在策略引擎之外评估这样的表达式:
"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*].subnet.id",
"like": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(field('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"
资源图查询
获取别名的当前值。我喜欢通过 API (Postman) 使用资源图查询。为此,请使用具有 Bearer Token 授权的以下端点。
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01
资源图查询正文负载:
{
"query": "Resources | where type =~ 'Microsoft.Network' | project aliases",
"subscriptions": [
"{{subscription_id}}"
]
}
更新:2022 年 1 月 29 日。看起来别名值不再在 Resource Graph 中编制索引。在这种情况下,我会使用下面描述的方法。您还可以在 powershell 中通过 运行 Get-AzPolicyAlias 验证您使用的别名路径。例如,(Get-AzPolicyAlias -NamespaceMatch 'microsoft.security' -ResourceTypeMatch 'pricings' ).Aliases
将提供 Microsoft.Security/pricings 资源提供程序下所有别名的列表。但是,它们不会告诉您当前值。要获取当前值,您可以编写一个策略并使用下面描述的方法。
Azure Policy 门户反馈
另外,另一个检查 Azure Policy 反馈的好地方是 Azure Policy 门户 Compliance
选项卡 blade。如果您可以让您的政策评估为 Non-Compliant
,它会向您反馈为什么以这种方式评估它。
根据政策执行此操作 blade
- 点击
Compliance
- 点击您的任务名称
- 单击适用的策略定义名称
- 查看任何
Non-Compliant
资源 - 单击该行最右侧的省略号
...
- Select
Compliant Reason
.
这将向您展示 Target Value
、Current Value
等方面的宝贵信息