Files
regorus/tests/azure_policy/cases/e2e_approved_subnets_deny.yaml
T
Anand Krishnamoorthi afdb894d85 test(azure_policy): add end-to-end policy test cases (#699)
50 end-to-end test cases derived from real Azure built-in policies. Each
file contains a complete policy definition, sample resources, and expected
evaluation results. Coverage spans storage, networking, compute, security,
monitoring, database, identity, governance, and update management scenarios.

Signed-off-by: Anand Krishnamoorthi <anakrish@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-27 18:04:50 -05:00

193 lines
6.8 KiB
YAML

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# E2E Test: VirtualEnclaves/ApprovedVirtualNetworkSubnets_Deny
# Real Azure Policy: "Network interfaces should be connected to an approved subnet
# of the approved virtual network"
# Source: regolator/policyDefinitions/VirtualEnclaves/ApprovedVirtualNetworkSubnets_Deny.json
#
# Features exercised:
# - Value count with named iterator: count { value: params, name: "subnetName" }
# - current('subnetName') to reference the iterator value
# - concat() to build dynamic resource IDs
# - Boolean parameter branching (allowAllSubnets true vs false)
# - not { field like concat(...) } double-negation on wildcard array
# - Two distinct allOf branches inside anyOf based on parameter value
aliases: test_aliases.json
policy_definition: |
{
"properties": {
"displayName": "Network interfaces should be connected to an approved subnet of the approved virtual network",
"policyType": "BuiltIn",
"mode": "Indexed",
"parameters": {
"effect": {
"type": "String",
"defaultValue": "Deny",
"allowedValues": ["Audit", "Deny", "Disabled"]
},
"virtualNetworkId": {
"type": "String",
"metadata": {
"displayName": "Virtual network Id"
}
},
"allowedSubnetList": {
"type": "Array",
"defaultValue": []
},
"allowAllSubnets": {
"type": "Boolean",
"defaultValue": true
}
},
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Network/networkInterfaces"
},
{
"anyOf": [
{
"allOf": [
{
"value": "[parameters('allowAllSubnets')]",
"equals": true
},
{
"not": {
"field": "Microsoft.Network/networkInterfaces/ipconfigurations[*].subnet.id",
"like": "[concat(parameters('virtualNetworkId'),'/*')]"
}
}
]
},
{
"allOf": [
{
"value": "[parameters('allowAllSubnets')]",
"equals": false
},
{
"count": {
"value": "[parameters('allowedSubnetList')]",
"name": "subnetName",
"where": {
"field": "Microsoft.Network/networkInterfaces/ipconfigurations[*].subnet.id",
"equals": "[concat(parameters('virtualNetworkId'),'/subnets/',current('subnetName'))]"
}
},
"equals": 0
}
]
}
]
}
]
},
"then": {
"effect": "[parameters('effect')]"
}
}
}
}
cases:
# =========================================================================
# Branch 1: allowAllSubnets = true — any subnet in the VNet is OK
# =========================================================================
- note: pass_allow_all_subnets_correct_vnet
resource:
type: "Microsoft.Network/networkInterfaces"
name: "nic-good-vnet"
properties:
ipConfigurations:
- properties:
subnet:
id: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/default"
parameters:
virtualNetworkId: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1"
allowAllSubnets: true
want_undefined: true
- note: deny_allow_all_subnets_wrong_vnet
resource:
type: "Microsoft.Network/networkInterfaces"
name: "nic-wrong-vnet"
properties:
ipConfigurations:
- properties:
subnet:
id: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet2/subnets/default"
parameters:
virtualNetworkId: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1"
allowAllSubnets: true
want_effect: "Deny"
# =========================================================================
# Branch 2: allowAllSubnets = false — value count with subnet list
# =========================================================================
- note: pass_specific_subnet_allowed
resource:
type: "Microsoft.Network/networkInterfaces"
name: "nic-allowed-subnet"
properties:
ipConfigurations:
- properties:
subnet:
id: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/frontend"
parameters:
virtualNetworkId: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1"
allowAllSubnets: false
allowedSubnetList: ["frontend", "backend"]
want_undefined: true
- note: deny_subnet_not_in_allowed_list
resource:
type: "Microsoft.Network/networkInterfaces"
name: "nic-bad-subnet"
properties:
ipConfigurations:
- properties:
subnet:
id: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/management"
parameters:
virtualNetworkId: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1"
allowAllSubnets: false
allowedSubnetList: ["frontend", "backend"]
want_effect: "Deny"
- note: deny_empty_subnet_list
resource:
type: "Microsoft.Network/networkInterfaces"
name: "nic-no-list"
properties:
ipConfigurations:
- properties:
subnet:
id: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1/subnets/default"
parameters:
virtualNetworkId: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1"
allowAllSubnets: false
allowedSubnetList: []
want_effect: "Deny"
# =========================================================================
# Wrong type
# =========================================================================
- note: pass_wrong_type
resource:
type: "Microsoft.Compute/virtualMachines"
name: "not-a-nic"
properties: {}
parameters:
virtualNetworkId: "/subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/vnet1"
want_undefined: true