Skip to content

DDE Subscription-Level Security Controls

Environment: Azure DDE (tenant ff1c5d68, ciriusdde.com) Scope: Baseline security controls expected on every DDE subscription Purpose: Expected state for HIPAA/HITRUST compliance in a customer-facing Medicare billing environment. Deviations are findings. Owner: Rory — all remediation approved before merge Remediation repo: azure-dde-infra


Why These Controls Exist

DDE processes Medicare billing data and publishes applications to external users via AVD. HIPAA requires technical safeguards on storage, key material, network access, and audit logs. HITRUST layers specific control families on top. Defender for Cloud and Azure Policy continuously evaluate these. This doc captures the expected state so audits become a diff operation.


Storage Accounts

Every storage account in DDE must have:

ControlExpected StateRationale
Public blob accessDisabled at account levelHIPAA — no anonymous PHI exposure
Network rulesPrivate endpoint only, default_action = "Deny"Defense in depth vs. shared-key leakage
TLS versionmin_tls_version = "TLS1_2"Azure baseline, HIPAA-relevant
Shared key accessshared_access_key_enabled = false where feasibleEntra ID auth preferred
Infrastructure encryptioninfrastructure_encryption_enabled = trueHIPAA double encryption
Soft delete (blob)30 days minimumRansomware recovery
Soft delete (container)7 days minimumAccidental deletion recovery
VersioningEnabled where data mutability existsRansomware recovery
Diagnostic settingsAll categories → cirius-logging-law-central (cross-tenant)6-year SIEM-independent archive

Module: establish a dde-storage module pattern so these defaults are automatic.


Key Vault

Every DDE Key Vault must have:

ControlExpected StateRationale
Access modelenable_rbac_authorization = trueAccess policies are a deprecated pattern
Network rulesPrivate endpoint, default_action = "Deny"No public key material exposure
Soft deleteEnabled, 90-day retentionAzure default plus HIPAA
Purge protectionpurge_protection_enabled = truePrevents permanent deletion during incident
Diagnostic settingsAuditEvent + AzurePolicyEvaluationDetailscirius-logging-law-centralDetects key theft
CMK usageVaults backing CMK resources use HSM-backed keys where cost permitsHIPAA technical safeguard

Module: keyvault-cmk (from azure-infra, ported or referenced in azure-dde-infra).


Network Security Groups

Every NSG in DDE must have:

ControlExpected State
Default postureDeny-by-default — implicit deny terminal rule above 65000
Inbound internetNo */Internet source without explicit justification in the rule description
RDP/SSH from internetNever — must be behind Twingate, Bastion, or Palo Alto NVA
NSG flow logsEnabled on every NSG, retention 30 days minimum, traffic analytics on
Flow logs destinationStorage account in DDE + LAW cirius-logging-law-central (cross-tenant)

Module: nsg module must default NSG flow logs on and fail closed if the target storage account isn't present.


Diagnostic Settings — Universal

Rule: Every resource in DDE that supports diagnostic settings forwards to cirius-logging-law-central (ID 5d76d1f2, logging subscription in PROD tenant).

Resource TypeCategories
Activity LogAll administrative, security, policy, service-health
Azure PolicyCompliance and evaluation events
Key VaultAuditEvent + AzurePolicyEvaluationDetails
Storage (blob/file/queue/table)StorageRead, StorageWrite, StorageDelete
NSGNetworkSecurityGroupEvent + NetworkSecurityGroupRuleCounter
AVD session hostsConnection events via agent + OS logs via Azure Monitor Agent
AKS (if introduced)kube-apiserver, kube-audit, kube-audit-admin, guard
Front Door / App GatewayAll categories

Module: diagnostic-settings — every new resource wires this in. CI Checkov rule flags any resource without diagnostic settings.


Defender for Cloud

PlanDDE Posture
Defender for Servers Plan 2Enabled on all subscriptions (file integrity, JIT, vuln assessment)
Defender for StorageEnabled — malware scan on upload for any PHI-adjacent containers
Defender for Key VaultEnabled
Defender for Resource ManagerEnabled
Defender for DNSEnabled
Defender for App ServiceEnabled where App Service present
Defender CSPMEnabled — continuous posture scoring
Secure Score target>= 80% per subscription; drops below trigger a story

Continuous export to cirius-logging-law-central for alert correlation with the 17-agent SecOps system.


Azure Policy Assignments

Required assignments on every DDE subscription:

InitiativePurpose
HIPAA HITRUSTHIPAA-specific technical safeguards
ISO 27001:2013Broad security baseline
Azure Security BenchmarkDefender for Cloud backbone
NIST SP 800-53 Rev 5 (audit mode)Maps to AWS Security Hub R5 equivalence

Enforcement mode: Most assignments remain in AuditIfNotExists until baseline compliance is reached, then promote specific controls to Deny once remediation is complete.


Activity Log Alerts

Required alert rules per subscription:

RuleTrigger
Policy assignment changed`Microsoft.Authorization/policyAssignments/write
Security contact changed`Microsoft.Security/securityContacts/write
Role assignment changed at subscription scopeMicrosoft.Authorization/roleAssignments/*
Network Security Group rule changeMicrosoft.Network/networkSecurityGroups/securityRules/*
Key Vault deletion or purgeMicrosoft.KeyVault/vaults/delete or .../purge
Storage account network rule changeMicrosoft.Storage/storageAccounts/write with networkAcls diff

All alerts route to the same action group that feeds SecOps POST /api/incidents.


Managed Disks

ControlExpected State
Encryption at hostencryption_at_host_enabled = true except Palo Alto marketplace images (unsupported — CMK is compensating)
CMK encryptionDiskEncryptionSet backed by customer-managed key in DDE Key Vault
Public network accessDisabled

Recovery Services Vaults

ControlExpected State
Soft deletesoft_delete_enabled = true, 14 days minimum
ImmutabilityUnlocked on permanent vaults (never on decommission-bound — blocks cleanup)
Cross-region restoreEnabled where DR strategy requires
Private endpointEnabled
Diagnostic settingsAll categories → cirius-logging-law-central

Module: recovery-vault.


Known Gaps (Current State, April 2026)

These are the gaps Defender for Cloud and internal review have surfaced in DDE. Each is a DDEENV story; remediation lands via azure-dde-infra PRs.

GapNotes
Storage accounts without private endpoints or VNet rulesMultiple accounts; DDEENV-037 (this workstream)
Key Vault without private linkDDEENV-037 remediation
NSG flow logs not configured on all NSGsDDEENV-037 remediation
Managed disks without double encryptionPending CMK rollout per subscription
Activity log alerts missing for Policy / Security operationsPending rollout
Storage infrastructure encryption not enabledPending per-account update
ASR coverage incomplete on DDE VMsTracked separately in DDE ASR planning runbook
Privileged SPs with permanent admin roles at subscription scopeTracked in DDE privileged access review

  • security/dde-privileged-access-review.md — identity side of the review
  • runbooks/dde-asr-configuration.md — DR planning for DDE VMs
  • security/terraform-standards.md — Terraform compliance expectations
  • security/lpriv-baseline.md — PROD tenant equivalent

Internal use only — Cirius Group