Skip to content

Commit 1755f0d

Browse files
committed
Fix Defender defaults parity, expose appSubnetDelegation, document Defender for ARM
- Align Defender for Servers/Databases defaults: auto-enable for prod in TF (matches Bicep) - Expose appSubnetDelegation param in Bicep main and pass to networking module - Add Defender for ARM to security.md documentation
1 parent 4df4d5b commit 1755f0d

File tree

4 files changed

+16
-7
lines changed

4 files changed

+16
-7
lines changed

docs/security.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Security that protects you without slowing you down. Every recommendation here i
1313
| Defender for Containers | If running AKS | ~$7/vCPU/month | Runtime threat detection, image vulnerability scanning, Kubernetes audit log monitoring. |
1414
| Defender for Databases | Prod only | Varies | SQL/Postgres threat detection — alerts on SQL injection, anomalous access, brute force. |
1515
| Defender for Key Vault | Prod only | ~$0.02/10k transactions | Alerts on unusual access patterns to secrets. Cheap insurance. |
16+
| Defender for ARM | Both subs | ~$4/sub/month | Detects suspicious control-plane operations (mass deletions, privilege escalation). Always enabled by this landing zone. |
1617
| Defender for Storage | No | ~$10/month per account | Malware scanning. Skip unless you accept user file uploads. |
1718
| Defender for App Service | No | ~$15/month per instance | Limited value compared to other plans. Revisit later. |
1819
| Defender for DNS | No | ~$0.70/million queries | Niche. Only if you suspect DNS exfiltration (you don't). |

infra/bicep/main.bicep

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ param budgetAlertEmails array
2828
@description('Deploy VNet and networking resources')
2929
param deployNetworking bool = true
3030

31+
@description('Service delegation for the app subnet (e.g., Microsoft.Web/serverFarms for App Service, Microsoft.App/environments for Container Apps)')
32+
param appSubnetDelegation string = 'Microsoft.Web/serverFarms'
33+
3134
@description('Enable Defender for Servers P2 (recommended for prod)')
3235
param enableDefenderForServers bool = environment == 'prod'
3336

@@ -104,6 +107,7 @@ module networking 'modules/networking.bicep' = if (deployNetworking) {
104107
location: location
105108
vnetName: 'vnet-${prefix}'
106109
vnetAddressPrefix: environment == 'prod' ? '10.0.0.0/16' : '10.1.0.0/16'
110+
appSubnetDelegation: appSubnetDelegation
107111
tags: tags
108112
}
109113
}

infra/terraform/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ module "networking" {
102102
module "security" {
103103
source = "./modules/security"
104104
security_contact_email = var.security_contact_email
105-
enable_defender_for_servers = var.enable_defender_for_servers
105+
enable_defender_for_servers = local.enable_defender_for_servers
106106
enable_defender_for_containers = var.enable_defender_for_containers
107-
enable_defender_for_databases = var.enable_defender_for_databases
107+
enable_defender_for_databases = local.enable_defender_for_databases
108108
enable_defender_for_key_vault = var.enable_defender_for_key_vault
109109
}
110110

infra/terraform/variables.tf

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,21 +98,21 @@ variable "security_contact_email" {
9898
}
9999

100100
variable "enable_defender_for_servers" {
101-
description = "Enable Defender for Servers P2"
101+
description = "Enable Defender for Servers P2 (recommended for prod)"
102102
type = bool
103-
default = false
103+
default = null
104104
}
105105

106106
variable "enable_defender_for_containers" {
107-
description = "Enable Defender for Containers"
107+
description = "Enable Defender for Containers (recommended if running AKS)"
108108
type = bool
109109
default = false
110110
}
111111

112112
variable "enable_defender_for_databases" {
113-
description = "Enable Defender for Databases"
113+
description = "Enable Defender for Databases (recommended for prod)"
114114
type = bool
115-
default = false
115+
default = null
116116
}
117117

118118
variable "enable_defender_for_key_vault" {
@@ -136,6 +136,10 @@ variable "tags" {
136136
locals {
137137
prefix = var.prefix != "" ? var.prefix : "${var.company_name}-${var.environment}"
138138

139+
# Defender defaults: enable Servers and Databases for prod (matches Bicep behavior)
140+
enable_defender_for_servers = var.enable_defender_for_servers != null ? var.enable_defender_for_servers : var.environment == "prod"
141+
enable_defender_for_databases = var.enable_defender_for_databases != null ? var.enable_defender_for_databases : var.environment == "prod"
142+
139143
budget_start_date = var.budget_start_date != "" ? var.budget_start_date : formatdate("YYYY-MM-01'T'00:00:00Z", plantimestamp())
140144

141145
vnet_address_prefix = var.vnet_address_prefix != "" ? var.vnet_address_prefix : (var.environment == "prod" ? "10.0.0.0/16" : "10.1.0.0/16")

0 commit comments

Comments
 (0)