Azure 策略修改效果

Azure policy modify effect

我有一个 Azure 自定义策略,它会检查所有存储帐户,如果没有 VNet 和子网设置为 selected 网络,它会根据参数修改它们以进行 VNet 集成我进入了。我输入的参数是一个子网信息数组如下

            "allowedNetworks": {
                "type": "array",
                "metadata": {
                    "description": "The list of allowed virtual networks",
                    "displayName": "Allowed Networks"
                },
                "defaultValue": [
                    {
                        "id": "/subscriptions/xxx/resourceGroups/test3/providers/Microsoft.Network/virtualNetworks/rogertest3-vnet/subnets/default",
                        "action": "Allow",
                        "state": "Succeeded"
                    },
                    {
                        "id": "/subscriptions/xxx/resourceGroups/test3/providers/Microsoft.Network/virtualNetworks/rogertest3-vnet/subnets/AzureBastionSubnet",
                        "action": "Allow",
                        "state": "Succeeded"
                    }
                ]
            }

效果如下

"then": {
                "effect": "[parameters('effect')]",
                "details": {
                    "roleDefinitionIds": [
                        "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
                    ],
                    "conflictEffect": "audit",
                    "operations": [
                        {
                            "operation": "addOrReplace",
                            "field": "Microsoft.Storage/storageAccounts/networkAcls.virtualNetworkRules",
                            "value": "[parameters('allowednetworks')]"
                        },
                        {
                            "operation": "addOrReplace",
                            "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                            "value": "Deny"
                        }
                    ]
                }
            }

效果很好,但是围绕这个修改效果有一些行为我有点困惑。

  1. 如果我创建一个新的存储帐户,并且它属于此策略的范围。我注意到它会自动添加此 VNet 集成,即使我在创建时 select“所有网络”

  2. 如果我尝试手动将任何存储帐户更改为所有网络,UI 会很快恢复到 VNet 集成,因此它什么也没做,也不会给出错误消息。使用 powershell 会得到相同的结果。

这和我理解的修改效果有点矛盾,我觉得修改效果不是强制的,它只适用于存储帐户,如果你去修复

其实是有意设计的,刚发现。 Modify effect给出了这个想要的状态配置效果,所以当你创建东西的时候,policy会评估它,如果符合policy,Policy就会生效。