9 — Data Protection and Security (AZ-305)
A. Vocabulaire encryption
A.1 At-rest / In-transit / In-use
| Type | Protège contre | Exemple Azure |
|---|---|---|
| At-rest | Vol disque, accès non autorisé stockage | TDE (SQL), SSE (Storage), Encryption at Host (VM) |
| In-transit | Interception réseau (MITM) | TLS 1.2+ (default PaaS) |
| In-use | Dump RAM, DBA malveillant, breach hyperviseur | Always Encrypted with Secure Enclaves, Confidential VMs |
A.2 Qui gère la clé ?
| Modèle | Qui possède | Quand |
|---|---|---|
| PMK Platform-Managed Key | MS gère tout (gen, rotation) | Default 90% des cas |
| CMK Customer-Managed Key | Toi via Key Vault, control rotation/révocation | Compliance régulée (HIPAA/PCI/FedRAMP) |
| BYOK Bring Your Own Key | Toi, importée depuis HSM on-prem dans KV | Migration avec clé maître existante |
A.3 Key envelope — pourquoi 2 niveaux
- DEK chiffre les data réelles (AES-256) ; KEK / CMK chiffre la DEK (dans KV)
- Rotation KEK = re-chiffrer juste la DEK (pas des millions de rows)
A.4 Types de clés supportés par Key Vault
| Type | Usage typique | Compatible CMK Azure ? |
|---|---|---|
| RSA (2048 / 3072 / 4096) | Wrap/unwrap (encryption envelope), signatures | ✅ OUI — le seul utilisable comme CMK |
| EC (P-256 / P-384 / P-521) | Signatures digitales (JWT, code signing) | ❌ Non (EC ne fait pas wrap/unwrap) |
| Symmetric (oct AES) | Encryption directe AES | ❌ Non (uniquement Managed HSM, pas pour CMK Azure services) |
🎯 Au 305 : CMK = RSA dans 100% des cas concrets (TDE, SSE, Disk Encryption, AE). Si une question propose "EC key" ou "symmetric key" comme CMK → mauvaise réponse.
A.5 Tailles RSA acceptées par service Azure (CMK) ⭐
| Service Azure | Tailles RSA acceptées | Recommandation portail |
|---|---|---|
| TDE SQL CMK (DB / MI / Synapse) | RSA 2048 ou 3072 | RSA 3072 (default portail) |
| Storage SSE CMK | RSA 2048 / 3072 / 4096 | RSA 3072 |
| Disk Encryption Set CMK (VM disks) | RSA 2048 / 3072 / 4096 | RSA 3072 |
| Always Encrypted CMK (colonne SQL) | RSA 2048 / 3072 / 4096 | RSA 2048 ou 3072 |
| App Service / Function (certs TLS) | RSA 2048 minimum | RSA 2048 ou 3072 |
🚨 Piège 305 : RSA 1024 retiré depuis longtemps, ne marche plus. RSA 2048 = minimum partout, 3072 = recommandé pour compliance moderne, 4096 = ultra-strict (perf moindre).
A.6 HSM (Hardware Security Module)
- FIPS 140-2 Level 2 = Standard KV (software) ou Premium KV (HSM-backed)
- FIPS 140-3 Level 3 = Managed HSM (HSM physique dédié) → PCI-DSS HSM, defense, gov
💡 Enclave + Attestation (pour Always Encrypted with Secure Enclaves) : zone mémoire isolée où même l'admin Azure ne lit pas ; un attestation provider (Microsoft Azure Attestation) vérifie qu'elle est authentique. Détail = AZ-500.
B. Transparent Data Encryption (TDE)
B.1 C'est quoi
Encryption at-rest des fichiers DB + backups + transaction logs. Activé par défaut sur Azure SQL DB / MI / Synapse Dedicated SQL pool. Protège vol disque/backup, pas DBA.
⚠️ TDE ≠ TLS ≠ Always Encrypted (defense in depth) :
- TLS (1.2+) = chiffre connexion réseau (app ⇄ SQL), default PaaS
- TDE = chiffre fichiers sur disque (default ON, AES-256)
- Always Encrypted = chiffre data dans la colonne, déchiffrée côté app uniquement
B.2 Architecture (key envelope)
- DEK (chiffre data) = AES 256 symétrique
- TDE Protector (wrappe DEK) en mode CMK = RSA asymétrique 2048 ou 3072 dans KV / Managed HSM
Prérequis CMK :
- KV avec soft-delete + purge protection activés
- Key RSA 2048 ou 3072, même région que SQL Server
- SQL Server accède via Managed Identity (UMI pour database-level)
B.3 PMK vs CMK
| Mode | Qui gère | Use case |
|---|---|---|
| Service-managed (PMK) | MS (default) | 90% des cas |
| Customer-managed (CMK / BYOK) ⭐ | Toi via KV | Compliance régulée (HIPAA/PCI/FedRAMP), révocation contrôle humain |
B.4 Pièges TDE 305
- ⚠️ TDE ne protège PAS contre DBA qui
SELECT * FROM Patients→ pour cacher aux DBAs → Always Encrypted. - 🚨 KV dans région ≠ SQL server → failover Geo-DR cassé.
- 🚨 TDE Protector révoqué par accident → DB inaccessible.
- 🚨 CMK database-level = UMI obligatoire (System-assigned non supporté à ce niveau).
C. Always Encrypted (AE)
C.1 C'est quoi
Encryption client-side : la DB ne voit jamais la donnée en clair (DBAs Azure inclus). Chiffrement/déchiffrement par driver app, SQL stocke et retourne chiffré. (Ne se fait pas sur Azure mais il faut se connecté a la DB)
[App + driver AE] → chiffre AVANT envoi → [SQL stocke chiffré] → retourne chiffré → [App déchiffre]
C.2 Architecture — 2 clés
| Clé | Quoi | Où |
|---|---|---|
| Column Master Key (CMK) | Clé racine, chiffre les CEKs | Azure KV / Cert Store / HSM |
| Column Encryption Key (CEK) | Chiffre les colonnes | Stockée chiffrée par CMK dans la DB |
C.3 Les 3 variantes ⭐
| Variante | Queries | Niveau sécu | Cas |
|---|---|---|---|
| AE Deterministic | Equality = lookups OK |
Bon, mais leak fréquence (10× même mutuelle = pattern visible) | SSN pour lookup |
| AE Randomized | AUCUNE query directe | Max | Salary, MedicalNotes lues après lookup |
| AE Secure Enclaves ⭐⭐ | Riches (=, <, >, LIKE, sorting, INDEX) | Max + queryable | Le seul moyen d'avoir AE et des requêtes utiles |
📖 Mémo des 3 modes
- Deterministic = "même valeur → même chiffré". Permet
WHERE col = ?mais leak de fréquence si valeurs répétées. → colonnes uniques (SSN, email). - Randomized = "même valeur → chiffré différent à chaque fois". Sécu max mais aucune query possible. → colonnes lues, jamais filtrées (salaire, notes).
- Secure Enclaves ⭐ = Randomized + enclave CPU isolée qui déchiffre temporairement pour la query. Sécu max + queries riches (
=,<,>,LIKE,ORDER BY). → réponse prod moderne.
C.4 TDE vs AE
| TDE | Always Encrypted | |
|---|---|---|
| Niveau | At-rest (fichiers) | Client-side (app) |
| Protège contre | Vol fichiers / backups | Toute personne sans clé (DBAs inclus) |
| Queries | Toutes (SQL voit clair) | Limitées (Det) ou riches (Enclaves) |
| Perf | Très faible | Moyen (overhead client) |
| Setup | 2 clics (default) | CMK/CEK + driver app |
C.5 Pièges AE 305
- 🚨 Deterministic + colonne faible cardinalité (genre, statut) → leak fréquence évident.
- 🚨 Sans Secure Enclaves, Randomized = aucune query (
WHERE,ORDER BY, JOIN). - 🚨 CMK perdue / KV purgé → data irrécupérables (même MS ne peut rien).
- 🚨 App sans
Column Encryption Setting=Enableddans conn string → driver ne déchiffre pas. - 🚨 Secure Enclaves sans attestation provider → handshake refusé, AE bloqué.
D. Dynamic Data Masking (DDM)
D.1 C'est quoi
Masque les données dans résultats query selon user — couche présentation (pas chiffrement). Conformité d'affichage cosmétique, pas vraie sécurité.
D.2 Architecture
- Données stockées en clair (≠ AE)
- Affichage masqué au SELECT pour users sans permission
UNMASK - Users dans
SQL users excluded from maskingvoient en clair - Perf overhead quasi nul
D.3 Types de masques
| Type | Exemple |
|---|---|
| Default | XXXX-XXXX ou 0 |
[email protected] |
|
| Random | Range numérique aléatoire |
| Custom string | partial(0,"XXX-XXX-",4) → XXX-XXX-1234 |
| Credit card | XXXX-XXXX-XXXX-1234 |
D.4 TDE vs AE vs DDM
| TDE | AE | DDM | |
|---|---|---|---|
| Niveau | At-rest | Client-side | Présentation |
| Protège contre | Vol fichiers | DBAs + tout sauf app autorisée | Affichage user (cosmétique) |
| Perf | Très faible | Moyen | Quasi nul |
| Queries | Toutes | Limitées (sauf Enclaves) | Toutes |
| Compliance "invisible DBAs" | ❌ | ✅ | ❌ |
D.5 Pièges DDM 305
- ⚠️ DDM ≠ vrai chiffrement : pour réelle protection → AE.
- 🚨 DBAs /
db_ownervoient tout. - 🚨 Inference attack :
WHERE Email LIKE 'a%'retourne lignes même masquées → leak partiel. - 🚨 Backups / TDE : data en clair dans le fichier (DDM = juste vue applicative).
D.bis Récap : TDE / AE / DDM sur SQL DB vs MI vs VM ⭐⭐
Les 3 features (TDE, AE, DDM) existent sur les 3 plateformes SQL Azure. Mais avec des nuances importantes selon la plateforme.
| Feature | Azure SQL Database | SQL Managed Instance | SQL Server on Azure VM |
|---|---|---|---|
| TDE | ✅ Default ON (auto, PMK ou CMK clic portail) | ✅ Default ON (auto, PMK ou CMK) | ✅ Supporté mais manuel — à activer toi-même (T-SQL CREATE DATABASE ENCRYPTION KEY + ALTER DATABASE SET ENCRYPTION ON) |
| Always Encrypted (Deterministic + Randomized) | ✅ Supporté | ✅ Supporté | ✅ Supporté (SQL Server 2016+) |
| AE Secure Enclaves | ✅ Supporté (tiers BC + Hyperscale) — enclave hardware géré MS | ✅ Supporté — enclave hardware géré MS | ✅ Supporté (SQL Server 2019+) avec VBS enclaves Windows Server ou Intel SGX — à toi de provisionner |
| Dynamic Data Masking | ✅ + blade portail dédiée Security > Dynamic Data Masking |
✅ + blade portail | ✅ (SQL Server 2016+) mais pas de blade portail — config via T-SQL ou SSMS |
🎯 Nuances clés 305
TDE
- SQL DB / MI : MS gère, ON par défaut. CMK via clic portail + KV.
- SQL VM : tu actives toi-même comme on-prem. Pour CMK via KV → utiliser EKM (Extensible Key Management) avec KV connector.
Always Encrypted
- Même feature SQL Server partout, pas de différence majeure entre DB/MI/VM.
- Secure Enclaves :
- SQL DB/MI = MS gère l'enclave hardware
- SQL VM = besoin VBS enclaves Windows Server 2019+ ou Intel SGX (à toi)
Dynamic Data Masking
- SQL DB / MI : blade Azure portail simple à utiliser.
- SQL VM : pas de blade Azure (c'est ton SQL Server IaaS) → config T-SQL :
ALTER TABLE Customers ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()');
🎯 Questions type 305
| Scénario | Réponse |
|---|---|
| "Encryption at-rest default automatique sans config" | SQL DB ou MI (TDE auto-ON) — pas SQL VM (manuel) |
| "Always Encrypted Secure Enclaves managé MS" | SQL DB ou MI (hardware géré) |
| "DDM avec config simple portail" | SQL DB ou MI (blade portal dédiée) |
| "AE + DDM + TDE sur SQL Server 2022 IaaS avec control total" | SQL Server on Azure VM (tout supporté, à config soi-même) |
🎯 TL;DR : Les 3 features existent partout. SQL DB / MI = managé MS, facile (clics portail). SQL VM = à toi de config comme on-prem (plus de flexibilité, plus de boulot, mais control total).
E. Storage encryption (rappel + extensions 305)
E.1 Storage Service Encryption (SSE) — default
- Default ON, gratuit, AES-256. Tous les blobs/files/tables/queues chiffrés au repos.
- Géré par MS (PMK) par défaut. CMK optionnel via KV.
E.2 Encryption Scopes (granularité par container)
- Différent CMK par container/blob dans un même Storage Account.
- Use case : multi-tenant SaaS (1 client = 1 scope = 1 CMK).
- Configuration :
Storage Account > Encryption > Encryption scopes.
E.3 Infrastructure encryption (double encryption)
- Active une 2ème couche de chiffrement AES-256 sous le SSE.
- Use case : compliance ultra-stricte (defense, gov), zero-trust hardware.
- Activable à la création seulement, irréversible.
E.4 Container Access Policy vs Immutable Policy
| Feature | Stored Access Policy | Immutable Policy (WORM) |
|---|---|---|
| Niveau | Container | Container ou Version (blob) |
| But | Gérer durée de vie d'un SAS (révoquer, changer perms) | Empêcher modif/delete (WORM) |
| Protège | Permissions SAS | Intégrité contenu (compliance) |
| Modes | n/a | Time-based retention / Legal hold |
| États | Active/Modifiée/Supprimée | Unlocked (test) / Locked (irréversible) |
| Use case | SAS temporaire révocable | SEC 17a-4, FINRA, HIPAA, archives légales |
🚨 Une Immutable Policy Locked = définitif (même MS ne peut rien). Tester en Unlocked d'abord.
E.5 Pièges Storage encryption 305
- 🚨 CMK pour Storage : besoin KV avec soft-delete + purge protection (comme SQL TDE).
- 🚨 Infrastructure encryption activable seulement à la création.
- 🚨 Encryption Scopes = granularité per-container/blob, pas per-account.
F. SAS tokens ⭐
F.1 Les 3 types
| Type | Identité | Révocation | Use case |
|---|---|---|---|
| Account SAS | Storage account key | Rotation de la storage key (impact massif) | Legacy, déconseillé |
| Service SAS | Storage account key (avec ou sans Stored Access Policy) | Via Stored Access Policy (recommandé) ou rotation key | App qui doit accéder à un blob/container |
| User Delegation SAS ⭐ | Entra ID (signé avec une clé déléguée par Entra) | Désactivation user Entra ou rotation clé déléguée | Moderne, recommandé prod : audit user Entra, pas de storage key exposée |
🚨 Précision User Delegation SAS : "user" = l'user Entra qui a généré/signé le SAS, PAS un user autorisé à l'utiliser. Une fois généré, n'importe qui avec l'URL peut s'en servir (comme les autres SAS). Le bénéfice : pas de storage key exposée + audit du signataire + révocation via Entra (désactiver l'user → ses SAS deviennent invalides) + permissions limitées au RBAC de l'user signataire. Expiry max 7 jours.
F.2 Stored Access Policy ⭐
- Politique au niveau container Blob (ou file share / queue / table) qui groupe N SAS Service sous une même policy.
- Permet de :
- Révoquer un SAS (ou groupe de SAS) sans rotation de la storage key → révoque la policy = tous les SAS générés depuis deviennent invalides instantanément
- Modifier permissions / expiration centralement
- Sans Stored Access Policy → SAS valide jusqu'à son
expiry, révocation = rotation storage key (casse TOUS les SAS de tout le compte, impact massif).
🎯 Use case design 305 : "plusieurs SAS clients (B2B partners) avec révocation possible par client" → Stored Access Policy (1 policy par client).
⚠️ Distractors exam "révoquer accès à un seul client" :
- RBAC = exige identité Entra (SAS = anonyme, pas Entra)
- ReadOnly lock = bloque TOUTES modifs du SA, pas ciblé
- SAS direct (sans policy) = révocation = rotation storage key → casse tout
- Stored Access Policy ⭐ = LA bonne réponse
💡 Distinct de Immutable Policy (WORM) = empêche modif/delete data (compliance), pas une question d'accès SAS.
F.3 Pièges SAS 305
- 🚨 User Delegation SAS = la moderne. Account SAS / Service SAS sans Stored Policy = legacy.
- 🚨 Account SAS donne accès à tout le compte → dangereux, éviter.
- 🚨 Révoquer un SAS sans Stored Access Policy = rotation storage key (casse tous les autres SAS).
G. VM Encryption ⭐
G.1 Les 4 couches d'encryption VM
| Couche | Quoi | Quand l'utiliser |
|---|---|---|
| SSE pour disks managés (default) | Encryption at-rest automatique des managed disks, géré MS | Activé partout, gratuit |
| Azure Disk Encryption (ADE) | BitLocker (Windows) / DM-Crypt (Linux) dans la VM, KV pour les clés | Compliance OS-level encryption, audit visible côté VM |
| Encryption at Host ⭐ | Encryption des disks + caches au niveau de l'hôte physique | Recommandé prod moderne, plus simple qu'ADE, perf meilleure |
| Confidential VMs ⭐⭐ | Encryption in-use (RAM chiffrée via AMD SEV-SNP) + attestation hardware | Workloads ultra-sensibles (in-use protection) |
G.2 ADE vs Encryption at Host
| ADE | Encryption at Host | |
|---|---|---|
| Niveau | OS (BitLocker/DM-Crypt) dans la VM | Hyperviseur (avant écriture disque) |
| Setup | Plus complexe (KV + extension) | Toggle simple à la création VM |
| Caches VM | Pas chiffrés par défaut | ✅ Chiffrés (incl. temp disks) |
| Perf | Overhead | Quasi nul |
| Visibilité OS | Visible (BitLocker côté OS) | Transparent |
| Recommandation MS 2026 | Compat legacy | ⭐ Préféré |
G.3 Confidential Computing — awareness 305
- Confidential VMs : RAM chiffrée, AMD SEV-SNP, attestation par Azure Attestation Service.
- DC-series / DCsv3 : SKUs avec Intel SGX (enclaves CPU pour code+data isolés).
- Confidential containers (AKS) : pods isolés via Confidential Computing.
- Use case 305 : workload financier/gov/santé qui demande "data invisible même au cloud provider".
G.4 Trusted Launch
- Pas vraiment "encryption", mais secure boot + vTPM pour VMs Gen2.
- Protège contre rootkits/bootkits.
- Activé par défaut sur nouvelles VMs Gen2 dans portail (2026).
G.5 Pièges VM encryption 305
- 🚨 Encryption at Host > ADE en prod moderne (recommandation MS).
- 🚨 Confidential VMs ≠ encryption at-rest classique → c'est in-use (RAM chiffrée).
- 🚨 ADE nécessite KV configuré pour disk encryption (paramètre spécifique).
- 🚨 Trusted Launch ≠ encryption (anti-rootkit boot-level).
H. Defender for Cloud — protection data services
H.1 Defender for SQL (rappel — détaillé fiche 13)
- Vulnerability Assessment : scan baseline régulier
- Advanced Threat Protection (ATP) : SQL injection, anomalous access, brute force
- Activable per-server ou subscription-level
H.2 Defender for Storage ⭐
- Anomalous access : alerte sur patterns suspects (exfiltration, IP étrange)
- Malware scanning (preview/GA selon région) : scan AV sur blobs uploadés
- Sensitive data discovery : détecte PII dans blobs (intégré Purview)
- Activation :
Defender for Cloud > Environment settings > Storage : ON
H.3 Defender for Key Vault ⭐
- Anomalous access : alerte sur volume inhabituel d'opérations, IP étrange
- Suspicious access patterns : grosse vague de
get-secret= signe d'exfiltration - Activation :
Defender for Cloud > Environment settings > Key Vault : ON
H.4 Pièges Defender 305
- 🚨 Subscription-level recommandé : couvre toutes les ressources présentes + futures auto.
- 🚨 Defender for Storage = payant per-storage-account ou per-million-transactions.
- 🚨 Defender for KV essentiel pour détecter exfiltration de secrets.
J. Decision tree AZ-305
Par besoin
Compliance avec own keys (CMK) ?
├─ Standard (HIPAA/PCI typique) → KV Premium HSM-backed + CMK
└─ Ultra (PCI HSM, defense) → Managed HSM (FIPS 140-3 L3) + CMK
Données ultra-sensibles invisibles aux DBAs ?
├─ Queries SQL riches → AE Secure Enclaves ⭐⭐
├─ Simple equality lookups → AE Deterministic
├─ Lecture brute, no queries → AE Randomized
└─ Affichage masqué par user → Dynamic Data Masking (cosmétique)
VM encryption ?
├─ Default at-rest → SSE managed disks (gratuit, ON)
├─ OS-level compliance → ADE (BitLocker/DM-Crypt) [legacy]
├─ Prod moderne → Encryption at Host ⭐
└─ Workload in-use ultra → Confidential VMs
Storage encryption ?
├─ Default → SSE PMK (ON, gratuit)
├─ CMK compliance → SSE CMK (KV)
├─ Multi-tenant per-container → Encryption Scopes
└─ Double encryption gov → Infrastructure encryption (à la création)
Workload régulé (HIPAA / PCI Level 1) ?
└─ Combo : TDE CMK + AE Secure Enclaves + Defender for SQL + Audit + Private Endpoint
Par data type
Secret app (conn string, API key) → KV Secrets + Managed Identity
Cert TLS (App Gateway/Front Door) → KV Certificates + integration AGW/FD
Clé symétrique pour wrap/unwrap → KV Keys (RSA)
SAS pour blob temporaire → User Delegation SAS (Entra) ⭐
PII en colonne SQL → Always Encrypted
Compliance retention WORM blob → Immutable Policy Locked
DEMO
Demo Portail — Activer une Managed Identity sur une VM/App Service
System-assigned (SAMI) :
VM/App Service > Settings > Identity- Toggle System assigned : On → Save → un Object ID Entra est généré
- Utiliser cet Object ID pour assigner un rôle (ex
Key Vault Secrets Usersur le KV)
User-assigned (UMI) :
Create a resource > Managed Identity > + Create→ nameumi-prod, RG, region- Assigner cette UMI à une ressource :
VM > Identity > User assigned > + Add > umi-prod - Donner les rôles RBAC à l'UMI (pas à la VM) sur les ressources cibles
💡 Mémo : SAMI lié à la VM (supprimé si VM supprimée), UMI indépendante (survit, réutilisable).
Demo Portail — TDE CMK (Customer Managed Key) au Server level
- Créer Key Vault :
Key Vaults > + Create- Basics tab : RG, Key vault name
mysqlkv, Region = même que SQL Server, Pricing tier Standard (ou Premium HSM-backed) - Access configuration tab : Permission model = Azure RBAC
- Recovery options : Soft-delete Enabled + Purge protection ON (irréversible, obligatoire CMK)
- Review + create
- Créer la key RSA :
mysqlkv > Objects > Keys > + Generate/Import- Generate, Name
MyTDEKey, Key type RSA, RSA key size 3072 (ou 2048) → Create
- Activer Managed Identity sur SQL Server :
SQL Server > Settings > Identity- System assigned managed identity > Status : On → Save
- Donner le rôle au SQL Server sur KV :
mysqlkv > Access control (IAM) > + Add > Add role assignment- Role : Key Vault Crypto Service Encryption User → Next
- Members : Assign access to = Managed identity → + Select members → SQL server →
mysrv-demo→ Select - Review + assign
- Configurer TDE CMK :
SQL Server > Security > Transparent data encryption- Toggle Customer-managed key ON
- Change key → KV
mysqlkv→ keyMyTDEKey→ version (ou versionless) → Select - (Optionnel) Make this key the default TDE protector + Auto-rotate key
- Save
Pour TDE CMK au database level : à la création de la DB > Security tab > Configure transparent data encryption > Database level CMK (UMI obligatoire, System-assigned non supporté à ce niveau).
Demo Portail / SSMS — Always Encrypted
⚠️ Always Encrypted nécessite SSMS / Azure Data Studio pour générer CEK et chiffrer les colonnes (opération client-side). Le portail Azure ne crée que la CMK dans Key Vault + les permissions.
Étape 1 — Créer la Column Master Key dans Key Vault (Portail)
Key Vaults > mysqlkv > Objects > Keys > + Generate/Import- Generate, Name
CMK1, Key type RSA, RSA key size 3072 (ou 2048) → Create - Donner au user qui lance le wizard le rôle Key Vault Crypto Officer sur le KV
Étape 2 — Wizard SSMS
- Ouvrir SSMS ou Azure Data Studio > connecter à la SQL DB (auth Entra)
- Clic droit DB > Tasks > Encrypt Columns…
- Column Selection : cocher colonnes + choisir Encryption Type (Deterministic / Randomized) + Encryption Key (CEK_Auto1 généré auto)
- Master Key Configuration : Azure Key Vault > sign in > sub + KV
mysqlkv+ keyCMK1 - Run Settings : Proceed to finish now → Finish (génère CMK + CEK + alter colonnes)
- Côté app : ajouter
Column Encryption Setting=Enabledà la connection string
Pour Secure Enclaves : ajouter Attestation Url=https://... dans connection string + activer enclave côté server.
💡 Au 305 tu n'as pas à coder le DDL T-SQL ni le code .NET. Le wizard SSMS suffit pour comprendre + savoir que c'est implémenté côté client.
Demo Portail — Dynamic Data Masking
SQL databases > mydb > Security > Dynamic Data Masking- Le portail liste les Recommended fields to mask (auto-détection email, credit card, name) → cliquer Add mask sur chaque suggestion
- Ou cliquer + Add mask pour un mask manuel :
- Schema :
dbo - Table :
Customers - Column :
Email - Masking field format :
- Default value (0, xxxx) : selon type
- Credit card value :
XXXX-XXXX-XXXX-1234 - Email :
[email protected] - Random number (range min-max, numérique seulement)
- Custom string :
partial(prefix, "padding", suffix), expartial(0,"XXX-XXX-",4)→XXX-XXX-1234
- Add
- Schema :
- SQL users excluded from masking : list
;-separated des admins/analytics qui voient en clair - Save en haut de la blade
- Test : SELECT depuis un user non-exempt → data masquée ; depuis un user exempt ou avec
GRANT UNMASK→ data en clair
Demo Portail — Storage CMK avec KV
- Pré-requis : KV avec soft-delete + purge protection, key RSA, Storage Account
Storage Account > Settings > Encryption- Encryption key type : Customer-managed keys
- Encryption key : Select from Key Vault → choisir KV + key
- Identity : System-assigned managed identity du Storage Account (auto activée)
- Vérifier rôle RBAC : SA MI a Key Vault Crypto Service Encryption User sur le KV
- Save
Demo Portail — User Delegation SAS
Storage Account > Data storage > Containers > [container] > Shared access tokens(n'utilise PAS la storage key)- Signing method : User delegation key ⭐ (Entra-based)
- Permissions : Read, List, etc.
- Start/expiry : durée
- Allowed IP addresses + Allowed protocols (HTTPS only)
- Generate SAS token and URL → token signé par Entra (pas par storage key)
💡 Avantage User Delegation SAS : audit user Entra, révocable via désactivation user, jamais d'exposition de storage key.
Demo Portail — Encryption at Host (VM)
VM > + Create- Basics : config standard
- Disks > Encryption type : Encryption at host ⭐ (toggle visible si feature subscription registered)
- Review + create
Pré-requis subscription :
Set-AzProviderFeature -ProviderNamespace "Microsoft.Compute" -FeatureName "EncryptionAtHost"(une fois par sub).