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