Governance as code con Azure Policy
Azure Policy è lo strumento di enforcement dichiarativo su cui si fonda una landing zone conforme: valuta le risorse rispetto a regole e applica un effetto in fase di creazione, aggiornamento o valutazione periodica. Come architetto, la domanda chiave non è “quale policy scrivo”, ma “quale effetto serve dato il requisito di rischio e la maturità operativa del cliente”.
Scegliere l’effetto giusto
- Audit: registra la non conformità senza bloccare. È la scelta corretta quando devi misurare la deriva su un estate esistente prima di irrigidire i controlli, o quando il blocco romperebbe workload legacy. Nessuna remediation, solo visibilità.
- Deny: impedisce il deployment non conforme. Raccomandalo per controlli hard, non negoziabili (es. “nessuna risorsa fuori da West Europe”, “no IP pubblico su NIC”). Attenzione: agisce solo su create/update, non tocca le risorse già esistenti.
- DeployIfNotExists (DINE): valuta una risorsa correlata e, se assente, ne effettua il deployment tramite un template ARM. È il meccanismo per la remediation automatica — abilitare diagnostic settings verso un Log Analytics workspace, installare l’agente Azure Monitor, forzare Microsoft Defender for Cloud. Richiede una managed identity con i ruoli RBAC adeguati sullo scope.
- Modify: aggiunge/rimuove tag o proprietà (es. TLS minimo) senza redeploy completo; più leggero di DINE quando basta patchare un attributo.
Trade-off tipico: per un requisito “tutti gli storage account devono avere i log diagnostici”, Deny fallirebbe (non crea nulla), mentre DINE è la risposta corretta perché provisiona la configurazione mancante.
Initiative, scope e remediation
Non deployare policy sparse: aggregale in initiative (policy set) per esporre un unico stato di compliance mappato a standard come ISO 27001, PCI-DSS o CIS. Assegna l’initiative al livello più alto possibile — management group — così l’eredità copre le subscription nuove automaticamente; usa exemption puntuali invece di riscrivere gli scope.
Il punto d’esame ricorrente: DINE e Modify non agiscono retroattivamente. Su risorse preesistenti generano solo uno stato non-compliant; per correggerle servono i remediation task, che eseguono l’effetto sulle risorse già presenti tramite la managed identity dell’assignment. Ricorda inoltre che le nuove policy impiegano fino a circa 30 minuti per la valutazione e che il compliance state non è istantaneo.
Compliance mapping con Microsoft Purview
Azure Policy risponde alla domanda “la mia infrastruttura rispetta i controlli tecnici?”. Microsoft Purview copre il piano dei dati: classificazione, sensitivity label, data map e catalogo. In un design end-to-end mappi i requisiti normativi su due assi complementari — Purview per dove risiedono e come sono classificati i dati sensibili, Azure Policy + Microsoft Defender for Cloud (regulatory compliance dashboard) per la postura delle risorse. Confondere i due layer è un errore d’esame frequente.
Strategia di encryption e key management
L’encryption at rest è sempre attiva in Azure con platform-managed key (PMK): Microsoft gestisce rotazione e ciclo di vita, zero overhead. La scelta architetturale è quando salire a customer-managed key (CMK).
PMK vs CMK vs HSM
- PMK: default. Raccomandalo salvo requisito esplicito di controllo sulle chiavi. Semplice, resiliente, nessun rischio di lockout.
- CMK in Azure Key Vault: la chiave vive nel Key Vault del cliente, che controlla rotazione, revoca e audit. Necessario quando la compliance impone separation of duties o crittografia con chiave propria. Costo: complessità operativa e rischio di indisponibilità se la chiave viene revocata o eliminata.
- CMK con HSM-backed key: obbligatorio per requisiti HSM-backed, ma attenzione al livello FIPS richiesto. Key Vault Premium usa HSM multi-tenant validati FIPS 140-2 Level 2; Managed HSM offre HSM single-tenant validati FIPS 140-2 Level 3, con controllo esclusivo (anche verso Microsoft) e BYOK. Un requisito esplicito di Level 3 impone Managed HSM, non Key Vault Premium.
Design essenziale per CMK: abilita soft-delete e purge protection sul Key Vault (previene la perdita permanente della chiave → dati irrecuperabili), configura l’auto-rotation delle chiavi e usa una user-assigned managed identity per l’accesso, così la rotazione dell’identità della risorsa non spezza il wrapping. Per SQL/Storage il pattern è Infrastructure Encryption (doppio layer) quando serve difesa in profondità.
Trappole tipiche d’esame
- Requisito: “loggare risorse non conformi ma non bloccare i team durante il rollout” → effetto Audit (non Deny): visibilità senza attrito.
- Requisito: “abilitare automaticamente i diagnostic settings mancanti” → DeployIfNotExists + remediation task per le risorse esistenti, con managed identity a cui assegni il ruolo RBAC minimo.
- Requisito: “impedire la creazione di VM con IP pubblico” → Deny a livello di management group; ricorda che non rimuove gli IP già esistenti (serve un report/remediation separato).
- Requisito: “il cliente deve poter revocare le chiavi e provare la separation of duties” → CMK in Key Vault (Managed HSM se serve FIPS 140-2 L3), con soft-delete + purge protection per evitare lockout.
- Requisito: “due initiative in conflitto, una Audit e una Deny sullo stesso controllo” → prevale sempre il più restrittivo: Deny vince su Audit; verifica gli scope e usa exemption anziché disabilitare l’assignment.