Module 5 : Gouvernance Azure
Management Groups
Les Management Groups permettent d'organiser les subscriptions :
+----------------------------------------------------------+
| HIERARCHIE GOUVERNANCE |
+----------------------------------------------------------+
| |
| Root Management Group |
| | |
| +-- MG-DataLab |
| | |
| +-- MG-Production |
| | +-- Subscription Prod |
| | |
| +-- MG-Development |
| +-- Subscription Dev |
| +-- Subscription Test |
| |
+----------------------------------------------------------+
# Créer un Management Group (PowerShell)
az account management-group create --name MG-DataLab --display-name "DataLab Root"
# Créer des sous-groupes
az account management-group create --name MG-Production --parent MG-DataLab --display-name "Production Workloads"
az account management-group create --name MG-Development --parent MG-DataLab --display-name "Development Workloads"
# Déplacer une subscription dans un MG
az account management-group subscription add --name MG-Development --subscription "DataLab-Dev"
Version Bash (cliquez pour afficher)
# Créer un Management Group
az account management-group create \
--name MG-DataLab \
--display-name "DataLab Root"
# Créer des sous-groupes
az account management-group create \
--name MG-Production \
--parent MG-DataLab \
--display-name "Production Workloads"
az account management-group create \
--name MG-Development \
--parent MG-DataLab \
--display-name "Development Workloads"
# Déplacer une subscription dans un MG
az account management-group subscription add \
--name MG-Development \
--subscription "DataLab-Dev"
Azure Policy
Azure Policy permet d'appliquer des règles de conformite :
- Audit : Signale les non-conformites
- Deny : Empêche la création de ressources non conformes
- DeployIfNotExists : Déploie automatiquement des configurations
- Modify : Modifie les ressources existantes
Politiques essentielles
# Lister les définitions de politique intégrées
az policy définition list --query "[?policyType=='BuiltIn'].{Name:displayName, ID:name}" --output table
# Politiques recommandées pour DataLab :
# - "Allowed locations" : Limiter les régions
# - "Require tag on resources" : Obliger les tags
# - "Storage accounts should restrict network access"
# - "Audit VMs that do not use managed disks"
Exemple : Obliger les tags
# Définir une politique custom pour obliger le tag "Project"
{
"mode": "Indexed",
"policyRule": {
"if": {
"field": "tags['Project']",
"exists": "false"
},
"then": {
"effect": "deny"
}
}
}
# Créer la définition (PowerShell)
az policy définition create --name "require-project-tag" --display-name "Require Project tag" --description "Toute ressource doit avoir un tag Project" --rules @policy-require-tag.json --mode Indexed
# Assigner la politique au Resource Group
az policy assignment create --name "require-project-tag-folab" --policy "require-project-tag" --scope "/subscriptions/{sub-id}/resourceGroups/rg-folab-dev"
Version Bash (cliquez pour afficher)
# Créer la définition
az policy définition create \
--name "require-project-tag" \
--display-name "Require Project tag" \
--description "Toute ressource doit avoir un tag Project" \
--rules @policy-require-tag.json \
--mode Indexed
# Assigner la politique au Resource Group
az policy assignment create \
--name "require-project-tag-folab" \
--policy "require-project-tag" \
--scope "/subscriptions/{sub-id}/resourceGroups/rg-folab-dev"
Initiatives (Policy Sets) (PowerShell)
# Les Initiatives regroupent plusieurs politiques
# Exemple : Initiative de sécurité Azure
az policy set-définition list --query "[?policyType=='BuiltIn'].{Name:displayName}" --output table | Select-Object -First 20
# Initiatives recommandées :
# - "Azure Security Benchmark"
# - "CIS Microsoft Azure Foundations Benchmark"
# - "ISO 27001:2013"
Version Bash (cliquez pour afficher)
# Les Initiatives regroupent plusieurs politiques
# Exemple : Initiative de sécurité Azure
az policy set-définition list \
--query "[?policyType=='BuiltIn'].{Name:displayName}" \
--output table | head -20
# Initiatives recommandées :
# - "Azure Security Benchmark"
# - "CIS Microsoft Azure Foundations Benchmark"
# - "ISO 27001:2013"
Resource Locks (PowerShell)
Proteger les ressources critiques contre la suppression accidentelle :
# Créer un lock "CanNotDelete"
az lock create --name "protect-storage" --lock-type CanNotDelete --resource-group rg-folab-dev --resource-name stfolabdev001 --resource-type Microsoft.Storage/storageAccounts
# Créer un lock "ReadOnly" (empêche toute modification)
az lock create --name "readonly-prod" --lock-type ReadOnly --resource-group rg-folab-prod
# Lister les locks
az lock list --resource-group rg-folab-dev --output table
# Supprimer un lock (nécessaire avant de supprimer la ressource)
az lock delete --name "protect-storage" --resource-group rg-folab-dev
Version Bash (cliquez pour afficher)
# Créer un lock "CanNotDelete"
az lock create \
--name "protect-storage" \
--lock-type CanNotDelete \
--resource-group rg-folab-dev \
--resource-name stfolabdev001 \
--resource-type Microsoft.Storage/storageAccounts
# Créer un lock "ReadOnly" (empêche toute modification)
az lock create \
--name "readonly-prod" \
--lock-type ReadOnly \
--resource-group rg-folab-prod
# Lister les locks
az lock list --resource-group rg-folab-dev --output table
# Supprimer un lock (nécessaire avant de supprimer la ressource)
az lock delete \
--name "protect-storage" \
--resource-group rg-folab-dev
Tags et conventions
Tags obligatoires chez DataLab :
Project | Nom du projet (FOLAB, ESG, etc.) |
Environment | Dev, Test, Prod |
CostCenter | Centre de cout |
Owner | Email du responsable |
CreatedDate | Date de création |
# Appliquer des tags a un Resource Group (PowerShell)
az group update --name rg-folab-dev --tags Project=FOLAB Environment=Dev CostCenter=DataEng Owner=team@mycompany.com
# Appliquer des tags a toutes les ressources d'un RG
$ids = az resource list --resource-group rg-folab-dev --query "[].id" -o tsv
foreach ($id in $ids) {
az tag update --resource-id $id --operation merge --tags Project=FOLAB Environment=Dev
}
# Rechercher des ressources par tag
az resource list --tag Project=FOLAB --output table
Version Bash (cliquez pour afficher)
# Appliquer des tags a un Resource Group
az group update \
--name rg-folab-dev \
--tags Project=FOLAB Environment=Dev CostCenter=DataEng Owner=team@mycompany.com
# Appliquer des tags a toutes les ressources d'un RG
az resource list --resource-group rg-folab-dev --query "[].id" -o tsv | \
while read id; do
az tag update --resource-id "$id" --operation merge \
--tags Project=FOLAB Environment=Dev
done
# Rechercher des ressources par tag
az resource list --tag Project=FOLAB --output table
Azure Blueprints
Les Blueprints permettent de déployer des environnements standardisés :
Blueprint "DataLab-DataPlatform" contient :
+----------------------------------------------------------+
| - Resource Group: rg-{project}-{env} |
| - VNet avec subnets standard |
| - Storage Account ADLS Gen2 |
| - Key Vault |
| - Policies de sécurité |
| - RBAC pré-configuré |
+----------------------------------------------------------+
# Les Blueprints sont gérés via le Portal ou ARM/Bicep
# Ils garantissent la cohérence entre environnements
Conformite et rapports (PowerShell)
# Voir l'état de conformite
az policy state list --resource-group rg-folab-dev --query "[?complianceState=='NonCompliant'].{Policy:policyDefinitionName, Resource:resourceId}"
# Exporter un rapport de conformite
az policy state summarize --resource-group rg-folab-dev --output json > compliance-report.json
Version Bash (cliquez pour afficher)
# Voir l'état de conformite
az policy state list \
--resource-group rg-folab-dev \
--query "[?complianceState=='NonCompliant'].{Policy:policyDefinitionName, Resource:resourceId}"
# Exporter un rapport de conformite
az policy state summarize \
--resource-group rg-folab-dev \
--output json > compliance-report.json