我有哪些选项可以调试自定义 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 ValueCurrent Value 等方面的宝贵信息