Introduction
Dans le monde de l’administration système et de la gestion des environnements Microsoft 365, PowerShell est un outil incontournable. Cependant, avec sa grande puissance vient une grande responsabilité. Deux concepts clés permettent de gérer efficacement la sécurité et les risques lors de l’utilisation de PowerShell : l’ExecutionPolicy et les niveaux d’impact. Cet article approfondit ces notions essentielles pour tout administrateur ou ingénieur travaillant avec PowerShell, en particulier dans le contexte de Microsoft 365.
ExecutionPolicy : La Première Ligne de Défense
L’ExecutionPolicy est un paramètre de sécurité crucial qui détermine les conditions dans lesquelles PowerShell charge les fichiers de configuration et exécute les scripts. C’est la première barrière contre l’exécution de scripts malveillants ou non autorisés.
Les Différents Niveaux de ExecutionPolicy
1. Restricted
- Le niveau le plus restrictif et le paramètre par défaut.
- Empêche l’exécution de tous les scripts.
- Permet uniquement l’utilisation de commandes interactives.
2. AllSigned
- Tous les scripts et fichiers de configuration doivent être signés par un éditeur de confiance.
- Offre une bonne sécurité tout en permettant l’exécution de scripts vérifiés.
3. RemoteSigned
- Les scripts téléchargés doivent être signés par un éditeur de confiance.
- Les scripts locaux peuvent s’exécuter sans signature.
- Recommandé pour la plupart des environnements professionnels, y compris Microsoft 365.
4. Unrestricted
- Aucune restriction, tous les scripts peuvent s’exécuter.
- Affiche un avertissement pour les scripts téléchargés.
- À utiliser avec précaution, car potentiellement dangereux.
5. Bypass
- Aucune restriction, aucun avertissement ou invite.
- Utilisé principalement pour les scripts qui créent leurs propres environnements sécurisés.
6. Undefined
- Supprime la politique d’exécution actuelle.
- Utilise la politique définie dans le groupe de stratégies.
Commandes Utiles pour Gérer l’ExecutionPolicy
Pour vérifier la politique actuelle :
Get-ExecutionPolicy
Pour définir une nouvelle politique :
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Pour définir la politique pour un processus spécifique :
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
Niveaux d’Impact : Évaluer les Risques des Actions
Au-delà de l’ExecutionPolicy, PowerShell utilise le concept de niveaux d’impact pour catégoriser les commandes en fonction de leur potentiel à affecter le système. Cette catégorisation aide les administrateurs à mieux contrôler l’exécution des scripts et à prévenir les actions non intentionnelles potentiellement dangereuses.
Les Trois Niveaux d’Impact
1. Low Impact
- Description : Actions à faible risque qui n’affectent généralement pas le fonctionnement du système.
- Exemples : Modification de la description d’un service, lecture de données, création de rapports.
- Comportement par défaut : Pas de demande de confirmation.
2. Medium Impact
- Description : Actions qui peuvent affecter temporairement le fonctionnement du système ou des services.
- Exemples : Arrêt d’un service, redémarrage d’une application.
- Comportement par défaut : Pas de demande de confirmation, mais peut être configuré pour en demander.
3. High Impact
- Description : Actions potentiellement dangereuses qui peuvent avoir des conséquences importantes sur le système ou les données.
- Exemples : Redémarrage de l’ordinateur, suppression d’utilisateurs, formatage de disques.
- Comportement par défaut : Demande systématique de confirmation.
Gestion des Confirmations avec $ConfirmPreference
La variable $ConfirmPreference est un outil puissant pour contrôler quand PowerShell demande une confirmation avant d’exécuter une commande. Elle permet d’ajuster le niveau de sécurité en fonction des besoins spécifiques de l’environnement.
Valeurs Possibles pour $ConfirmPreference
- High : Demande confirmation uniquement pour les actions à haut impact.
- Medium : Demande confirmation pour les actions à impact moyen et élevé.
- Low : Demande confirmation pour toutes les actions, y compris celles à faible impact.
- None : Ne demande jamais de confirmation, quelle que soit l’action.
Modification de $ConfirmPreference
Pour modifier le comportement de confirmation :
$ConfirmPreference = "Medium"
Cette commande configurera PowerShell pour demander une confirmation pour les actions à impact moyen et élevé.
Exemple Pratique
Imaginons un script qui gère des services dans Microsoft 365 :
# Définir le niveau de confirmation
$ConfirmPreference = "Low"
# Action à faible impact
Set-Service -Name "MSExchangeIS" -Description "Microsoft Exchange Information Store"
# Action à impact moyen
Stop-Service -Name "MSExchangeIS"
# Action à fort impact
Restart-Computer
Avec $ConfirmPreference défini sur « Low », PowerShell demandera une confirmation pour chacune de ces actions, même celle à faible impact.

Considérations pour Microsoft 365
Dans le contexte de Microsoft 365, la gestion de la sécurité et des risques avec PowerShell prend une dimension particulière :
- La politique RemoteSigned est souvent recommandée pour les environnements d’entreprise utilisant Microsoft 365.
- Pour les scripts d’administration Microsoft 365, assurez-vous qu’ils sont signés ou exécutés dans un environnement contrôlé.
- L’utilisation de PowerShell pour gérer Microsoft 365 nécessite souvent des modules spécifiques qui peuvent avoir leurs propres exigences en matière de politique d’exécution.
- Sécurité des données : Les actions sur les boîtes aux lettres ou les données utilisateur devraient être considérées comme à fort impact.
- Disponibilité des services : La modification des configurations de services Office 365 pourrait être classée comme impact moyen.
- Automatisation : Pour les scripts automatisés, considérez l’utilisation de -Confirm:$false pour bypasser les confirmations dans des environnements contrôlés.
Création et Utilisation de Certificats pour Signer des Scripts PowerShell
La sécurité PowerShell est primordiale dans les environnements Microsoft 365, et la signature de scripts est un élément clé de cette sécurité. Voici un guide détaillé sur la création de certificats, la signature de scripts, et la gestion des stratégies d’exécution.
Création de Certificats pour Signer des Scripts PowerShell
- Création d’un certificat auto-signé
Utilisez la commande suivante pour créer un certificat auto-signé :
$cert = New-SelfSignedCertificate -Subject "CN=PowerShell Code Signing" -Type CodeSigningCert -CertStoreLocation Cert:\CurrentUser\My
Si vous avez correctement exécuter cette commande, vous aurez vos certificat dans le chemin par défaut ce trouvant dans :
C:\Users\TOTO\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates
- Exportation du certificat
Exportez le certificat pour une utilisation future :
Export-Certificate -Cert $cert -FilePath C:\Certificates\PowerShellSigning.cer
Signature de Scripts PowerShell
- Signer un script
Utilisez la commande suivante pour signer un script :
Set-AuthenticodeSignature -FilePath C:\Scripts\MonScript.ps1 -Certificate $cert
- Vérification avant
Pour voir le contenu du script avant et après la signature :
# Avant modification
Get-Content C:\Scripts\MonScript.ps1
3. Résignature en cas de modification
Si vous modifiez le script, vous devrez le signer à nouveau :
Set-AuthenticodeSignature -FilePath C:\Scripts\MonScript.ps1 -Certificate $cert
La signature ajoutera un bloc de signature à la fin du script.
# Vérification Après signature
Get-Content C:\Scripts\MonScript.ps1
4. Résignature en cas de modification de nouveau
Si vous modifiez le script, vous devrez le signer à nouveau :
Set-AuthenticodeSignature -FilePath C:\Scripts\MonScript.ps1 -Certificate $cert
Avantages de la Signature de Scripts
- Intégrité : Garantit que le script n’a pas été modifié depuis sa signature.
- Authentification : Confirme l’identité de l’auteur du script.
- Confiance : Permet l’exécution de scripts dans des environnements avec des politiques de sécurité strictes.
- Contrôle : Facilite la gestion des scripts autorisés dans un environnement d’entreprise.
Configuration des Stratégies d’Exécution
La sécurité PowerShell dépend grandement des stratégies d’exécution. Voici où elles sont configurées :
- Pour un utilisateur ou un ordinateur (Base de registre)
- Chemin :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
- Clé :
ExecutionPolicy
- Pour un domaine (Active Directory)
- Utilisez les Stratégies de Groupe (GPO)
- Chemin :
Stratégies Ordinateur > Modèles d'administration > Composants Windows > Windows PowerShell
- Paramètre : « Activer l’exécution de scripts »
Vérification et Modification des Stratégies d’Exécution
- Vérifier la stratégie actuelle
Get-ExecutionPolicy -List
- Modifier la stratégie
Set-ExecutionPolicy AllSigned -Scope CurrentUser
Dans le contexte de Microsoft 365, la sécurité PowerShell est cruciale. L’utilisation de certificats pour signer les scripts et la gestion appropriée des stratégies d’exécution sont des pratiques essentielles pour maintenir un environnement sécurisé tout en permettant l’automatisation et la gestion efficace des ressources.
Conclusion
La maîtrise de la création de certificats, de la signature de scripts et de la gestion des stratégies d’exécution est fondamentale pour assurer une sécurité PowerShell robuste dans les environnements Microsoft 365. Ces pratiques permettent de trouver un équilibre entre la sécurité et la flexibilité nécessaire pour une administration efficace.
La maîtrise de l’ExecutionPolicy et des niveaux d’impact dans PowerShell est essentielle pour une administration sécurisée et efficace, particulièrement dans des environnements complexes comme Microsoft 365. Ces outils permettent de trouver le juste équilibre entre sécurité et efficacité opérationnelle.
En comprenant et en utilisant correctement ces concepts, les administrateurs peuvent significativement réduire les risques associés à l’utilisation de PowerShell tout en profitant pleinement de sa puissance pour gérer et automatiser leurs environnements Microsoft 365.
#Powershell ExecutionPolicy
Liens internes
- Gestion des services Microsoft 365 avec PowerShell
- Bonnes pratiques de sécurité pour l’administration PowerShell
- Automatisation des tâches dans Microsoft 365