Qu'est-ce que PowerShell DSC ?
Desired State Configuration (DSC) est une fonctionnalité de PowerShell permettant de décrire l'état cible d'un système sous forme de code déclaratif. Le Local Configuration Manager (LCM) de chaque nœud applique et maintient cet état de façon continue. C'est le pilier de l'Infrastructure as Code sur l'écosystème Microsoft.
1. Première configuration DSC : serveur web IIS
Configuration WebServerConfig {
param ([string[]] $NodeName = "localhost")
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName xWebAdministration # Install-Module xWebAdministration
Node $NodeName {
# Installer IIS
WindowsFeature IIS {
Ensure = "Present"
Name = "Web-Server"
}
WindowsFeature IISManagementTools {
Ensure = "Present"
Name = "Web-Mgmt-Tools"
DependsOn = "[WindowsFeature]IIS"
}
# Configurer le site web
xWebsite DefaultSite {
Ensure = "Present"
Name = "Default Web Site"
State = "Started"
PhysicalPath = "C:inetpubwwwroot"
BindingInfo = @(
MSFT_xWebBindingInformation {
Protocol = "HTTP"
Port = 80
}
MSFT_xWebBindingInformation {
Protocol = "HTTPS"
Port = 443
CertificateThumbprint = "XXXXX..."
CertificateStoreName = "MY"
}
)
DependsOn = "[WindowsFeature]IIS"
}
# S'assurer que le service est en cours d'exécution
Service W3SVC {
Name = "W3SVC"
State = "Running"
StartType = "Automatic"
DependsOn = "[WindowsFeature]IIS"
}
# Fichier de configuration applicative
File AppConfig {
DestinationPath = "C:inetpubwwwrootweb.config"
SourcePath = "\SRV-DEPLOYDSC-Sourcesweb.config"
Checksum = "SHA-256"
Force = $true
DependsOn = "[WindowsFeature]IIS"
}
}
}
# Générer le fichier MOF de configuration
WebServerConfig -NodeName "SRV-WEB01", "SRV-WEB02" -OutputPath "C:DSCWebServer"
2. Appliquer la configuration (mode Push)
# Tester la configuration sans l'appliquer
Test-DscConfiguration -Path "C:DSCWebServer" -ComputerName SRV-WEB01
# Appliquer (Push)
Start-DscConfiguration -Path "C:DSCWebServer" `
-ComputerName SRV-WEB01, SRV-WEB02 `
-Wait -Verbose -Force
# Vérifier l'état de conformité
Get-DscConfigurationStatus -CimSession SRV-WEB01 | Select-Object Status, StartDate, DurationInSeconds
3. Configurer le LCM pour la surveillance continue
[DSCLocalConfigurationManager()]
Configuration LCMConfig {
Node "SRV-WEB01" {
Settings {
RefreshMode = "Push" # ou "Pull" pour le mode pull server
ConfigurationMode = "ApplyAndAutoCorrect" # Recorrige les dérives automatiquement
ConfigurationModeFrequencyMins = 30 # Vérification toutes les 30 min
RebootNodeIfNeeded = $false
ActionAfterReboot = "ContinueConfiguration"
}
}
}
LCMConfig -OutputPath "C:DSCLCM"
Set-DscLocalConfigurationManager -Path "C:DSCLCM" -ComputerName SRV-WEB01 -Force -Verbose
4. Mode Pull avec Azure Automation DSC
Azure Automation State Configuration implémente un serveur Pull managé, idéal pour gérer des centaines de nœuds :
# Enregistrer un serveur dans Azure Automation DSC
$params = @{
AutomationAccountName = "aa-techbyhm-prod"
ResourceGroupName = "rg-automation"
ComputerName = @("SRV-WEB01", "SRV-WEB02", "SRV-APP01")
OutputFolder = "C:DSCMetaConfig"
NodeConfigurationName = "WebServerConfig.SRV-WEB01"
RefreshFrequencyMins = 30
ConfigurationModeFrequencyMins = 15
RebootNodeIfNeeded = $false
ActionAfterReboot = "ContinueConfiguration"
AllowModuleOverwrite = $true
ConfigurationMode = "ApplyAndAutoCorrect"
}
Register-AzAutomationDscNode @params
5. Rapport de conformité en temps réel
# Récupérer l'état de conformité de tous les nœuds dans Azure Automation
$nodes = Get-AzAutomationDscNode `
-AutomationAccountName "aa-techbyhm-prod" `
-ResourceGroupName "rg-automation"
$nodes | Select-Object Name, Status, LastSeen, NodeConfigurationName |
Sort-Object Status | Format-Table -AutoSize
# Nodes non conformes
$nonCompliant = $nodes | Where-Object Status -ne "Compliant"
if ($nonCompliant) {
Write-Warning "Nœuds non conformes :"
$nonCompliant | Select-Object Name, Status, LastSeen | Format-Table
}
6. Ressources DSC communautaires essentielles
| Module | Ressources |
|---|---|
| xWebAdministration | Sites IIS, App Pools, liaisons SSL |
| xActiveDirectory | Domaine AD, OUs, utilisateurs, groupes |
| NetworkingDsc | Cartes réseau, pare-feu, routage |
| SqlServerDsc | Installation et configuration SQL Server |
| SecurityPolicyDsc | Politiques de sécurité locales (SecEdit) |
| CertificateDsc | Gestion des certificats et PKI |
Conclusion
PowerShell DSC transforme la configuration de vos serveurs en code versionnable, auditable et idempotent. Combiné à Azure Automation State Configuration, il devient un outil de conformité continue puissant, garantissant que chaque serveur reste conforme à son état désiré, même après des modifications manuelles accidentelles.