Module 7 : Sécurité avancée
Azure Key Vault
Key Vault est le coffre-fort pour stocker secrets, clés et certificats :
+----------------------------------------------------------+
| KEY VAULT |
+----------------------------------------------------------+
| |
| Secrets : Chaines de connexion, mots de passe |
| Keys : Clés de chiffrement (RSA, EC) |
| Certificates: Certificats SSL/TLS |
| |
| Accès: |
| - RBAC (recommandé) |
| - Accèss Policies (legacy) |
| |
+----------------------------------------------------------+
# Créer un Key Vault (PowerShell)
az keyvault create --name kv-folab-dev-001 --resource-group rg-folab-dev --location westeurope --enable-rbac-authorization true --sku standard --tags Project=FOLAB Env=Dev
# Ajouter un secret
az keyvault secret set --vault-name kv-folab-dev-001 --name "sql-connection-string" --value "Server=tcp:myserver.database.windows.net..."
# Lire un secret
az keyvault secret show --vault-name kv-folab-dev-001 --name "sql-connection-string" --query "value" -o tsv
# Lister les secrets (noms seulement)
az keyvault secret list --vault-name kv-folab-dev-001 --output table
Version Bash (cliquez pour afficher)
# Créer un Key Vault
az keyvault create \
--name kv-folab-dev-001 \
--resource-group rg-folab-dev \
--location westeurope \
--enable-rbac-authorization true \
--sku standard \
--tags Project=FOLAB Env=Dev
# Ajouter un secret
az keyvault secret set \
--vault-name kv-folab-dev-001 \
--name "sql-connection-string" \
--value "Server=tcp:myserver.database.windows.net..."
# Lire un secret
az keyvault secret show \
--vault-name kv-folab-dev-001 \
--name "sql-connection-string" \
--query "value" -o tsv
# Lister les secrets (noms seulement)
az keyvault secret list \
--vault-name kv-folab-dev-001 \
--output table
Permissions Key Vault (RBAC)
| Role | Permissions |
|---|---|
| Key Vault Administrator | Gestion complète |
| Key Vault Secrets Officer | CRUD sur les secrets |
| Key Vault Secrets User | Lecture des secrets |
| Key Vault Crypto Officer | CRUD sur les clés |
# Donner accès a une Managed Identity (PowerShell)
az role assignment create --role "Key Vault Secrets User" --assignee {managed-identity-principal-id} --scope "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001"
Version Bash (cliquez pour afficher)
# Donner accès a une Managed Identity
az role assignment create \
--role "Key Vault Secrets User" \
--assignee {managed-identity-principal-id} \
--scope "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001"
Managed Identities en pratique
Pourquoi les Managed Identities ?
- Pas de secrets a gérer
- Rotation automatique des credentials
- Audit simplifié
- Intégration native Azure
# Scenario : Synapse accede au Key Vault via son Managed Identity (PowerShell)
# 1. Récupérer l'identité du workspace Synapse
$SYNAPSE_MI = az synapse workspace show --name syn-folab-dev --resource-group rg-folab-dev --query identity.principalId -o tsv
# 2. Donner accès au Key Vault
az role assignment create --role "Key Vault Secrets User" --assignee $SYNAPSE_MI --scope "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001"
# 3. Dans Synapse, creer un Linked Service vers Key Vault
# Le Linked Service utilisera automatiquement la Managed Identity
Version Bash (cliquez pour afficher)
# Scenario : Synapse accede au Key Vault via son Managed Identity
# 1. Récupérer l'identité du workspace Synapse
SYNAPSE_MI=$(az synapse workspace show \
--name syn-folab-dev \
--resource-group rg-folab-dev \
--query identity.principalId -o tsv)
# 2. Donner accès au Key Vault
az role assignment create \
--role "Key Vault Secrets User" \
--assignee $SYNAPSE_MI \
--scope "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001"
# 3. Dans Synapse, creer un Linked Service vers Key Vault
# Le Linked Service utilisera automatiquement la Managed Identity
Microsoft Defender for Cloud (PowerShell)
Defender for Cloud fournit des recommandations de securite :
# Activer Defender for Cloud (niveau gratuit par défaut)
az security pricing create --name VirtualMachines --tier Standard
# Voir les recommandations
az security assessment list --output table
# Voir le score de securite
az security secure-score list --output table
Version Bash (cliquez pour afficher)
# Activer Defender for Cloud (niveau gratuit par défaut)
az security pricing create \
--name VirtualMachines \
--tier Standard
# Voir les recommandations
az security assessment list \
--output table
# Voir le score de securite
az security secure-score list \
--output table
Recommandations typiques
Points d'attention fréquents :
- Storage accounts avec accès public
- VMs sans chiffrement de disque
- Key Vaults sans soft delete
- SQL sans audit activé
- Ressources sans Private Endpoints
Chiffrement (PowerShell)
# Chiffrement au repos (par défaut dans Azure)
# - Storage : Microsoft-managed keys ou Customer-managed keys (CMK)
# - SQL : TDE (Transparent Data Encryption)
# - Disks : Azure Disk Encryption
# Activer CMK sur un Storage Account
az storage account update --name stfolabdev001 --resource-group rg-folab-dev --encryption-key-source Microsoft.Keyvault --encryption-key-vault "https://kv-folab-dev-001.vault.azure.net" --encryption-key-name "storage-encryption-key"
# Chiffrement en transit
# - TLS 1.2 minimum (par défaut)
# - HTTPS obligatoire
az storage account update --name stfolabdev001 --resource-group rg-folab-dev --https-only true --min-tls-version TLS1_2
Version Bash (cliquez pour afficher)
# Chiffrement au repos (par défaut dans Azure)
# - Storage : Microsoft-managed keys ou Customer-managed keys (CMK)
# - SQL : TDE (Transparent Data Encryption)
# - Disks : Azure Disk Encryption
# Activer CMK sur un Storage Account
az storage account update \
--name stfolabdev001 \
--resource-group rg-folab-dev \
--encryption-key-source Microsoft.Keyvault \
--encryption-key-vault "https://kv-folab-dev-001.vault.azure.net" \
--encryption-key-name "storage-encryption-key"
# Chiffrement en transit
# - TLS 1.2 minimum (par défaut)
# - HTTPS obligatoire
az storage account update \
--name stfolabdev001 \
--resource-group rg-folab-dev \
--https-only true \
--min-tls-version TLS1_2
Sécurité réseau avancée (PowerShell)
# Activer le pare-feu sur Key Vault
az keyvault update --name kv-folab-dev-001 --resource-group rg-folab-dev --default-action Deny
# Autoriser un subnet
az keyvault network-rule add --name kv-folab-dev-001 --resource-group rg-folab-dev --vnet-name vnet-folab-dev --subnet snet-data
# Créer un Private Endpoint pour Key Vault
az network private-endpoint create --name pe-keyvault-folab --resource-group rg-folab-dev --vnet-name vnet-folab-dev --subnet snet-data --private-connection-resource-id "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001" --group-id vault --connection-name pec-keyvault
Version Bash (cliquez pour afficher)
# Activer le pare-feu sur Key Vault
az keyvault update \
--name kv-folab-dev-001 \
--resource-group rg-folab-dev \
--default-action Deny
# Autoriser un subnet
az keyvault network-rule add \
--name kv-folab-dev-001 \
--resource-group rg-folab-dev \
--vnet-name vnet-folab-dev \
--subnet snet-data
# Créer un Private Endpoint pour Key Vault
az network private-endpoint create \
--name pe-keyvault-folab \
--resource-group rg-folab-dev \
--vnet-name vnet-folab-dev \
--subnet snet-data \
--private-connection-resource-id "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001" \
--group-id vault \
--connection-name pec-keyvault
Audit et conformite (PowerShell)
# Les logs Key Vault vers Log Analytics
az monitor diagnostic-settings create --name "diag-keyvault" --resource "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001" --workspace law-folab-dev --logs '[{\"category\":\"AuditEvent\",\"enabled\":true}]'
# Requete KQL pour voir les accès aux secrets
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.KEYVAULT"
| where OperationName == "SecretGet"
| project TimeGenerated, CallerIPAddress, identity_claim_upn_s, ResultType
| order by TimeGenerated desc
Version Bash (cliquez pour afficher)
# Les logs Key Vault vers Log Analytics
az monitor diagnostic-settings create \
--name "diag-keyvault" \
--resource "/subscriptions/{sub}/resourceGroups/rg-folab-dev/providers/Microsoft.KeyVault/vaults/kv-folab-dev-001" \
--workspace law-folab-dev \
--logs '[{"category":"AuditEvent","enabled":true}]'
# Requete KQL pour voir les accès aux secrets
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.KEYVAULT"
| where OperationName == "SecretGet"
| project TimeGenerated, CallerIPAddress, identity_claim_upn_s, ResultType
| order by TimeGenerated desc
Checklist securite DataLab
- [ ] Key Vault avec RBAC activé
- [ ] Managed Identities pour les services
- [ ] Private Endpoints sur ressources critiques
- [ ] Firewall activé sur Storage et Key Vault
- [ ] TLS 1.2 minimum partout
- [ ] Audit logs vers Log Analytics
- [ ] Defender for Cloud activé
- [ ] Soft delete activé sur Key Vault