Avec la forte tendance Move to Cloud, les entreprises doivent faire face à des enjeux et des risques intrinsèques au Cloud : manque de visibilité et de contrôle, mauvaises configurations, expansion de la surface d’attaque, exposition ou perte des données, etc.
Tous ces enjeux ont un pilier commun : la conformité. La conformité est l’ensemble des processus et outils qui permettent le respect des règles de sécurité. Dans le Cloud, ces règles peuvent être définies par des Benchmarks (CIS, SOC, …), et/ou en interne par la cybersécurité. Les outils peuvent appliquer des contrôles bloquants, modificatifs ou d’audit (qui référencent mais n’agissent pas).
Quelle est la meilleure approche pour assurer efficacement la conformité dans le Cloud Azure ? Dans cet article, nous allons vous partager notre expérience sur les outils permettant de bloquer ou de remédier des ressources non sécurisées dans Azure, et sur les avantages et limites de chaque approche.
Sur Azure, une ressource non sécurisée (une non-conformité) peut être :
Pour être efficace, la conformité doit être la plus automatisée possible. Plusieurs outils nativement intégrés à Azure le permettent :
Azure Policy permet une gestion simple et efficace des contrôles les plus courants dans Azure.
Chaque policy décrit une condition de non-conformité et un effet qui s’applique si cette condition est vérifiée. Les ressources Azure sont évaluées régulièrement ou quand elles sont modifiées. Azure Policy peut, si besoin, bloquer ou remédier les ressources non sécurisées.
Azure Policy est l'outil de conformité intégré nativement dans Azure :
> Comment construire et utiliser une policy Azure ?
Le cœur de la policy est la condition de non-conformité. C’est une combinaison logique de comparaisons entre :
Microsoft crée et tient à jour des alias : des paramètres propres à chaque type de ressources qui sont requêtables. Seuls les alias et certaines informations (Subscription, tags, localisation, …) peuvent être contrôlés par les policies.
L’effet est l’action qui est déclenchée quand une ressource est évaluée comme non-conforme par une policy. Cinq effets sont particulièrement utiles : Audit, AuditIfNotExists, Deny, Modify et DeployIfNotExists.
Pour bien comprendre les policies, il faut s’intéresser au fonctionnement de la gestion des ressources sur Azure. Azure Resource Manager (ARM) est le service de déploiement et de gestion des ressources Azure. Toute manipulation d’une ressource au niveau du plan de contrôle (i.e. de sa configuration) est traduite en appel API vers ARM (GET, PUT, PATCH, DELETE, …) ; et ce, quel que soit l’initiateur (Portail, IaC, PowerShell, policy…).
Le schéma ci-dessous résume le fonctionnement des policies Azure pour chaque effet :
Quelques commentaires additionnels sur Azure Policy :
> Remédier avec Azure Policy, avantages et limites.
Quels contrôles sont réalisables avec Azure Policy ?
Quels contrôles ne sont pas compatibles avec Azure Policy ?
Exemple de cas d’usage : Comment contrôler le tag d’une ressource ?
Nous allons donc nous intéresser à Azure Deployment Script, la solution proposée par Azure pour déclencher l’exécution d’un script avec une policy.
Azure Deployment Script est un type particulier de policy DeployIfNotExists qui permet de créer temporairement les ressources nécessaires à l’exécution d’un script :
Le script peut être codé en PowerShell ou Azure CLI. Il est possible d’inclure le script dans le corps de la policy, mais il doit être écrit sur une seule ligne. Le stockage du script à l’extérieur de la policy est possible avec :
Le Storage Account et le Key Vault doivent être créés et configurés en amont. L’autorisation pour accéder au Blob se fait avec un SAS Token (Shared Access Signature), à inclure dans le corps de la policy. De plus, le Storage Account doit avoir un accès public ouvert pour être accessible depuis le Container Instance. Ainsi, il est d'autant plus important de ne pas stocker les secrets en clair dans les scripts mais plutôt de les stocker et les récupérer dans un Key Vault !
De plus, le script peut interagir avec la policy à travers ses entrées/sorties :
Le schéma ci-dessous présente une architecture possible pour utiliser un Deployment Script. Avec les permissions adaptées, le script permet de créer des contrôles plus poussés que les policies. Par exemple, il peut requêter une API externe afin de comparer la valeur d’un tag d’une ressource Azure avec une base de données on-premise.
Qu’apporte Azure Deployment Script ?
Quelles sont les conséquences de son utilisation ?
Le Deployment Script permet de dépasser les limites des policies avec l’exécution d’un script. Cependant, pour y parvenir, il est nécessaire de déployer des ressources dans les Subscriptions à contrôler, et de donner des permissions élevées sur un périmètre large. Nous souhaitons donc étudier une alternative, potentiellement moins réactive, mais aussi moins intrusive : Azure Automation Account.
Azure Automation Account est un service PaaS qui permet le codage et le test des scripts (Python ou PowerShell). Il facilite aussi la planification de l’exécution des scripts.
L’Automation Account peut contenir plusieurs scripts, sous la forme de Runbooks, qui peuvent être déclenchés :
L’Automation Account crée un environnement sandbox pour exécuter les scripts. Il est aussi possible de lancer les scripts dans une Machine Virtuelle (Hybrid Worker). Cela résout les limitations de l’environnement Sandbox (IP publique, 3h max d’exécution) mais nécessite la sécurisation d’une VM.
Le schéma ci-dessous présente une architecture possible d’utilisation d’un Automation Account :
Le Runbook évalue une ressource, récupère les secrets dans le Key Vault et requête la base de données externe. Il peut alors vérifier la conformité et stocker cette information dans un Storage Account (ou une DB).
Dans cet exemple, le Runbook se déclenche à intervalle régulier. Mais nous pouvons aussi imaginer un déclenchement par une alerte (ou un Webhook). Cela complexifie la solution mais permet une action plus immédiate.
En termes de remédiation, deux options sont possibles :
Qu’apporte Azure Automation Account ?
Quelles sont les conséquences de son utilisation ?
Dans cet article, nous avons introduit trois outils nativement intégrés à Azure qui permettent de remédier les ressources dans le Cloud de Microsoft. Chacun possède des avantages mais fait aussi face à des limites :
> Comment choisir quelle solution adopter ? Pour quels contrôles ?
Cette prise de décision peut parfois être plus complexe et nécessiter une étude approfondie en fonction de votre environnement et de votre politique de sécurité Cloud. D’autant plus que les actions modificatives automatisées peuvent créer des state drifts avec le IaC. Ainsi, nous recommandons une utilisation réfléchie et testée.
Pour conclure, ne pas oublier que la sécurité est régie par le risque. Il n’est pas pertinent d’utiliser des contrôles bloquants ou modificatifs sur toutes les non-conformités. Le gain apporté par le contrôle doit être supérieur à la perte (temps, coût, risques) engendrée par sa mise en place.
Pour certaines failles de sécurité, aller au-delà de ce qui est possible avec Azure Policy est pourtant nécessaire. Azure Deployment Script et Azure Automation Account sont alors des outils adaptés. Avec une approche projet (environnement dédié, étude de risques, tests, etc.) pour contrôler leur impact, ils permettent la mise en place sécurisée de contrôles complexes et d’actions poussées. Alors n’attendez plus ! Utilisez-les !