Créer des normes et des recommandations personnalisées dans Microsoft Defender for Cloud

Recommandations en matière de sécurité dans Microsoft Defender for Cloud vous aident à améliorer et à renforcer votre posture de sécurité. Les recommandations sont basées sur des évaluations par rapport aux normes de sécurité définies pour les abonnements Azure, les comptes Amazon Web Services (AWS) et les projets Google Cloud Platform (GCP) qui ont Defender for Cloud activés.

Cet article explique comment :

  • Créez des recommandations personnalisées pour tous les clouds (Azure, AWS et GCP) avec une requête KQL (Kusto Query Language).
  • Affectez des recommandations personnalisées à une norme de sécurité personnalisée.

Avant de commencer

  • Vous avez besoin d’autorisations de propriétaire sur l’abonnement pour créer une nouvelle norme de sécurité.
  • Vous avez besoin d’autorisations d’Administrateur de sécurité pour créer des recommandations personnalisées.
  • Pour créer des recommandations personnalisées basées sur le langage de requête Kusto (KQL), vous devez avoir activé le plan Defender Cloud Security Posture Management (CSPM activé. Tous les clients peuvent créer des recommandations personnalisées basées sur Azure Policy.
  • Passez en revue la prise en charge dans les clouds Azure pour obtenir des recommandations personnalisées.

Nous vous recommandons de regarder cet épisode de Defender for Cloud dans le champ pour en savoir plus sur les recommandations personnalisées et la façon d’écrire des requêtes KQL.

Créer une suggestion personnalisée

Créez des recommandations personnalisées, notamment les étapes de correction, de gravité et les normes auxquelles la recommandation doit être attribuée. Vous ajoutez une logique de recommandation avec KQL. Vous pouvez utiliser un éditeur de requête simple avec des modèles de requête intégrés que vous pouvez ajuster selon vos besoins, ou écrire votre requête KQL à partir de zéro.

Pour créer une recommandation personnalisée :

  1. Connectez-vous au portail Azure.

  2. Accédez à Microsoft Defender for Cloud>Paramètres de l’environnement> pour l’abonnement approprié.

  3. Sélectionnez Stratégies de sécurité>+ Créer une recommandation personnalisée.

    Screenshot de la page stratégies de sécurité Microsoft Defender for Cloud avec l’action Créer une recommandation personnalisée mise en surbrillance.

  4. Entrez les détails suivants : Nom, Étendue, Gravité et Problème de sécurité. Facultatif : Description, correction.

  5. Cliquez sur Suivant.

  6. Entrez une requête KQL ou sélectionnez Ouvrir l’éditeur de requête.

    Capture d’écran du flux de recommandation personnalisé avec l’action d’éditeur de requête Open utilisée pour lancer l’éditeur KQL.

  7. Cliquez sur Suivant.

  8. Sélectionnez les normes pertinentes pour la recommandation.

    Capture d’écran du volet des détails de la recommandation Microsoft Defender for Cloud, affichant les champs du nom, de la gravité et des normes attribuées.

  9. Cliquez sur Suivant.

  10. Sélectionnez les normes personnalisées à attribuer.

  11. Sélectionnez Examiner et créer.

  12. Passez en revue les détails de la recommandation.

  13. Sélectionnez Créer.

    Capture d’écran de la page « Vérifier et créer » de Microsoft Defender for Cloud, affichant le résumé des recommandations avant l’envoi.

Utilisation de l’éditeur de requête

Nous vous recommandons d’utiliser l’éditeur de requête pour créer une requête de recommandation. Vous pouvez également utiliser les modèles de requête et exemples fournis pour afficher des exemples de requêtes et apprendre à créer vos propres modèles de requête.

  • L’utilisation de l’éditeur vous permet de générer et de tester votre requête avant de commencer à l’utiliser.
  • Sélectionnez Guide pratique (How to) pour obtenir de l’aide sur la structure de la requête, ainsi que des instructions et des liens supplémentaires.
  • L’éditeur contient des exemples de requête de recommandation intégrés que vous pouvez utiliser pour générer votre propre requête. Les données apparaissent dans la même structure que dans l'API.
  1. Sélectionnez Nouvelle requête.

    Capture d’écran de l’éditeur de requête avec Nouvelle requête sélectionnée pour commencer à écrire une requête de recommandation.

  2. Utilisez l’exemple de modèle de requête avec ses instructions ou sélectionnez un exemple de requête de recommandation intégrée dans la partie inférieure de la page pour commencer.

  3. Sélectionnez Exécuter la requête pour tester la requête que vous avez créée.

  4. Lorsque la requête est prête, coupez-la et collez-la à partir de l’éditeur dans le volet requête Recommandation .

  5. Passez à l’étape 7 à partir de la section Créer une recommandation personnalisée.

Modèles de requête et exemples

L’éditeur de requête inclut des exemples intégrés et les modèles de cette section montrent comment structurer les vérifications de sécurité courantes. Chaque modèle renvoie les ressources dans le périmètre et marque les ressources non conformes avec UNHEALTHY. Dans ce modèle de modèle, modifiez uniquement l’expression condition et conservez la HealthStatus ligne inchangée.

Note

Les modèles de cette section utilisent des types de ressources Azure. Pour les ressources AWS et GCP, remplacez Environment == 'Azure' par Environment == 'AWS' ou Environment == 'GCP' et mettez à jour Identifiers.Type pour correspondre au type de ressource dans votre environnement.

Identifiez les machines virtuelles qui manquent de balises de gouvernance obligatoires, telles que les informations du centre de coûts ou du propriétaire.

RawEntityMetadata
| where Environment == 'Azure' and Identifiers.Type =~ 'Microsoft.Compute/virtualMachines'
| extend condition = (isnull(Record.tags["CostCenter"]) or isnull(Record.tags["Owner"]))
| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')
| project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

Colonnes de sortie :Id, , Name, EnvironmentIdentifiersAdditionalData, Record,HealthStatus

Logique d’évaluation : les machines auxquelles il manque les balises requises ont HealthStatus défini sur UNHEALTHY et apparaissent comme des constatations de non-conformité. Les machines pour lesquelles les deux balises sont définies ont HealthStatus défini sur HEALTHY.

Exigences du schéma de sortie KQL

Avant d’écrire votre requête, comprenez le schéma de sortie requis. Il s’agit de la façon dont Microsoft Defender for Cloud interprète vos résultats et mappe les résultats aux ressources.

Colonnes de sortie requises :

Column Catégorie Purpose
Id Chaîne (obligatoire) Identificateur de ressource utilisé par Defender for Cloud pour référencer la ressource.
Name Chaîne (obligatoire) Nom de ressource lisible par l’homme affiché dans les résultats.
Environment Chaîne (obligatoire) Environnement cloud : Azure, AWS ou GCP.
Identifiers Dynamique (obligatoire) Type de ressource et identificateurs transmis à partir de l’enregistrement source.
AdditionalData Dynamique (obligatoire) Métadonnées de ressource supplémentaires transmises à partir de l’enregistrement source.
Record Dynamique (obligatoire) Enregistrement de ressource complet contenant toutes les propriétés.
HealthStatus Chaîne (obligatoire) Résultat de l’évaluation : UNHEALTHY (non conforme) ou HEALTHY (conforme).

Terminez toujours votre requête avec : | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

Mappage d’évaluation :

Chaque requête doit définir une HealthStatus valeur pour chaque ressource. Utilisez la iff() fonction pour évaluer votre condition et affecter l’état :

| extend condition = (your condition here)
| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')

Dans ce modèle, modifiez uniquement l’expression condition . Conservez la HealthStatus ligne inchangée :

| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')

Les ressources où HealthStatus est UNHEALTHY apparaissent comme des résultats non conformes dans Defender for Cloud. Les ressources pour lesquelles HealthStatus est HEALTHY sont conformes et n’apparaissent pas dans les constatations.

Important

Définissez toujours HealthStatus sur 'UNHEALTHY' ou 'HEALTHY'. Renvoyer toutes les ressources comprises dans l’étendue. Defender for Cloud utilise la colonne HealthStatus pour déterminer la conformité. Le fait d’omettre des ressources du jeu de résultats est considéré comme une absence de données, et non comme un état sain.

Erreurs courantes et correctifs

  • Colonnes requises manquantes : Si l’une des sept colonnes requises est manquante, la requête échoue. Toujours terminer par | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus.
  • Valeurs HealthStatus incorrectes : seules 'UNHEALTHY' et 'HEALTHY' sont des valeurs autorisées (sensibles à la casse). D’autres valeurs ou null provoquent des erreurs d’analyse.
  • Chemins de propriété incorrects : Les propriétés sont accessibles via Record.properties.*, pas directement. Par exemple, utilisez Record.properties.httpsOnly et non properties.httpsOnly.
  • Sensibilité à la casse du type de ressource : Utilisez =~ (correspondance insensible à la casse) pour les comparaisons de Identifiers.Type. Par exemple : Identifiers.Type =~ 'Microsoft.Storage/storageAccounts'.
  • Propriétés nulles dans l’ensemble des abonnements : Testez votre requête sur plusieurs abonnements présentant des configurations variées. Utilisez des vérifications isnull() lorsque des propriétés peuvent être absentes.

Utiliser des recommandations personnalisées à grande échelle

La création de recommandations personnalisées dans le portail Azure est optimale pour la plupart des utilisateurs. L’interface fournit un éditeur KQL pratique et des outils de validation intégrés. Une approche programmatique peut également être utile lorsque vous devez déployer des recommandations dans de nombreux environnements ou abonnements.

Automatiser via l’API

Si vous avez prévalidé des requêtes KQL et que vous souhaitez automatiser la création de recommandations personnalisées, vous pouvez utiliser l’API Microsoft Defender for Cloud. Cette méthode vous permet de déployer rapidement des recommandations, en vous assurant qu’elles sont cohérentes et évolutives dans vos environnements cloud.

  • Avantages : vous pouvez automatiser et mettre à l’échelle le déploiement de recommandations personnalisées.
  • Quand l’utiliser : cette méthode est idéale pour les implémentations à grande échelle où vous devez appliquer des recommandations de façon cohérente dans plusieurs environnements.

Pour plus d’informations sur l’utilisation de l’API pour gérer des recommandations personnalisées, consultez la Référence de l’API composite Defender for Cloud.

Créer un standard personnalisé

Les recommandations personnalisées peuvent être attribuées à une ou plusieurs normes personnalisées.

Pour créer une norme personnalisée :

  1. Connectez-vous au portail Azure.

  2. Accédez à Microsoft Defender for Cloud>Paramètres de l’environnement> pour l’abonnement approprié.

  3. Sélectionnez Stratégies de sécurité>+ Créer>Standard.

  4. Sélectionnez les recommandations que vous souhaitez ajouter à la norme personnalisée.

  5. (Facultatif) Pour les abonnements Azure, consultez la colonne Source.

    Page de création d’une norme personnalisée dans Microsoft Defender for Cloud, affichant la liste des recommandations disponibles pour la sélection.

  6. Sélectionnez Créer.

Créer et améliorer des recommandations personnalisées avec Azure Policy (hérité)

Pour les abonnements Azure, vous pouvez créer des recommandations et des normes personnalisées et les améliorer à l’aide d’Azure Policy. Il s’agit d’une fonctionnalité héritée, et nous vous conseillons d’utiliser la nouvelle fonctionnalité de recommandations personnalisées.

Créer une recommandation personnalisée et une norme (héritée)

Vous pouvez créer des recommandations et des normes personnalisées dans Defender for Cloud en créant des définitions de stratégie et des initiatives dans Azure Policy et en les intégrant dans Defender for Cloud.

Pour créer une recommandation ou une norme personnalisée avec Azure Policy (hérité) :

  1. Créez une ou plusieurs définitions de stratégie dans le Portail Azure Policy ou par programme.
  2. Créez une initiative de stratégie qui contient les définitions de stratégie personnalisées.

Intégrer l’initiative en tant que standard personnalisé (hérité)

Les affectations de stratégie sont utilisées par Azure Policy pour attribuer des ressources Azure à une stratégie ou à une initiative.

Pour intégrer une initiative à une norme de sécurité personnalisée dans Defender for Cloud, vous devez inclure "ASC":"true" dans le corps de la requête, comme indiqué ici. Le champ ASC rattache l’initiative à Microsoft Defender for Cloud.

Pour intégrer une initiative personnalisée :

Exemple d’intégration d’une initiative personnalisée

PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}?api-version=2021-06-01

Corps de la demande (JSON) :

{
    "properties": {
      "displayName": "Cost Management",
      "description": "Policies to enforce low cost storage SKUs",
      "metadata": {
        "category": "Cost Management",
        "ASC":"true"
      },
      "parameters": {
        "namePrefix": {
          "type": "String",
          "defaultValue": "myPrefix",
          "metadata": {
            "displayName": "Prefix to enforce on resource names"
          }
        }
      },
      "policyDefinitions": [
        {
          "policyDefinitionId": "/subscriptions/<Subscription ID>/providers/Microsoft.Authorization/policyDefinitions/7433c107-6db4-4ad1-b57a-a76dce0154a1",
          "policyDefinitionReferenceId": "Limit_Skus",
          "parameters": {
            "listOfAllowedSKUs": {
              "value": [
                "Standard_GRS",
                "Standard_LRS"
              ]
            }
          }
        },
        {
          "policyDefinitionId": "/subscriptions/<Subscription ID>/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
          "policyDefinitionReferenceId": "Resource_Naming",
          "parameters": {
            "prefix": {
              "value": "[parameters('namePrefix')]"
            },
            "suffix": {
              "value": "-LC"
            }
          }
        }
      ]
    }
  }

Exemple de suppression d’une affectation

Cet exemple vous montre comment supprimer une affectation :

DELETE https://management.azure.com/{subscription}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2018-05-01

Améliorer les recommandations personnalisées (héritées)

Les recommandations intégrées fournies avec Microsoft Defender pour le cloud incluent des détails tels que des niveaux de gravité et des instructions de correction. Si vous souhaitez ajouter ce type d’informations à des recommandations personnalisées pour Azure, utilisez l’API REST.

Les deux types d’informations que vous pouvez ajouter sont les suivants :

  • RemediationDescription : chaîne
  • Gravité – Enum [Faible, Moyen, Élevé]

Les métadonnées doivent être ajoutées à la définition de stratégie pour une stratégie qui fait partie de l’initiative personnalisée. Cela devrait figurer dans la propriété « securityCenter », comme indiqué :

{
  "metadata": {
    "securityCenter": {
      "RemediationDescription": "Custom description goes here",
      "Severity": "High"
    }
  }
}

Voici un autre exemple de stratégie personnalisée incluant la propriété metadata/securityCenter :

{
"properties": {
"displayName": "Security - ERvNet - AuditRGLock",
"policyType": "Custom",
"mode": "All",
"description": "Audit required resource groups lock",
"metadata": {
  "securityCenter": {
    "RemediationDescription": "Resource Group locks can be set via Azure Portal -> Resource Group -> Locks",
    "Severity": "High"
 }
},
"parameters": {
  "expressRouteLockLevel": {
    "type": "String",
    "metadata": {
      "displayName": "Lock level",
      "description": "Required lock level for ExpressRoute resource groups."
    },
    "allowedValues": [
      "CanNotDelete",
      "ReadOnly"
    ]
  }
},
"policyRule": {
  "if": {
    "field": "type",
    "equals": "Microsoft.Resources/subscriptions/resourceGroups"
  },
  "then": {
    "effect": "auditIfNotExists",
    "details": {
      "type": "Microsoft.Authorization/locks",
      "existenceCondition": {
        "field": "Microsoft.Authorization/locks/level",
        "equals": "[parameters('expressRouteLockLevel')]"
      }
    }
  }
}
}
}

Pour obtenir un autre exemple de propriété securityCenter, consultez des exemples d’API REST pour les métadonnées d’évaluation.

Étapes suivantes

Vous pouvez utiliser les liens suivants pour en savoir plus sur les requêtes Kusto :