Creare standard personalizzati e raccomandazioni in Microsoft Defender per il cloud

Raccomandazioni di sicurezza in Microsoft Defender per il cloud consentono di migliorare e rafforzare il comportamento di sicurezza. Le raccomandazioni si basano sulle valutazioni rispetto agli standard di sicurezza definiti per le sottoscrizioni Azure, gli account Amazon Web Services (AWS) e i progetti GCP (Google Cloud Platform) con Defender per il cloud abilitati.

In questo articolo viene descritto come:

  • Creare raccomandazioni personalizzate per tutti i cloud (Azure, AWS e GCP) con una query KQL (Kusto Query Language).
  • Assegna raccomandazioni personalizzate a uno standard di sicurezza personalizzato.

Prima di iniziare

  • Per creare un nuovo standard di sicurezza, sono necessarie le autorizzazioni di proprietario per la sottoscrizione.
  • Sono necessarie autorizzazioni di amministratore della sicurezza per creare raccomandazioni personalizzate.
  • Per creare raccomandazioni personalizzate basate sul linguaggio di query Kusto (KQL), è necessario disporre del piano Defender Cloud Security Posture Management (CSPM) abilitato. Tutti i clienti possono creare raccomandazioni personalizzate basate su Criteri di Azure.
  • Esaminare il supporto nei cloud di Azure per consigli personalizzati.

È consigliabile guardare questo episodio di Defender per il cloud nel campo per altre informazioni sulle raccomandazioni personalizzate e su come scrivere query KQL.

Creare una raccomandazione personalizzata

Creare raccomandazioni personalizzate, inclusi i passaggi per la correzione, la gravità e gli standard a cui deve essere assegnata la raccomandazione. Si aggiunge la logica di raccomandazione con KQL. È possibile usare un semplice editor di query con modelli di query predefiniti che è possibile modificare in base alle esigenze oppure scrivere la query KQL da zero.

Per creare una raccomandazione personalizzata:

  1. Accedi al portale di Azure.

  2. Passare a Microsoft Defender per il cloud>Invironment settings> la sottoscrizione pertinente.

  3. Selezionare Criteri >+ Crea raccomandazione personalizzata.

    Screenshot dei criteri di sicurezza di Microsoft Defender per il cloud con l'azione Crea raccomandazione personalizzata evidenziata.

  4. Immettere i dettagli: Obbligatorio: Nome, Ambito, Gravità e Problema di sicurezza. Facoltativo: Descrizione, Correzione.

  5. Seleziona Avanti.

  6. Immettere una query KQL oppure selezionare Apri editor di query.

    Schermata del flusso di raccomandazione personalizzata con l'azione «Apri editor di query» utilizzata per avviare l'editor KQL.

  7. Seleziona Avanti.

  8. Selezionare gli standard pertinenti per la raccomandazione.

    Schermata del riquadro Dettagli raccomandazione di Microsoft Defender per il cloud che mostra i campi relativi a nome, gravità e standard assegnati.

  9. Seleziona Avanti.

  10. Selezionare gli standard personalizzati da assegnare.

  11. Seleziona Rivedi e crea.

  12. Esaminare i dettagli della raccomandazione.

  13. Fare clic su Crea.

    Schermata di Microsoft Defender per il cloud nella pagina

Usare l'editor di query

È consigliabile usare l'editor di query per creare una query di raccomandazione. È anche possibile usare i modelli di query e gli esempi forniti per visualizzare le query di esempio e imparare a creare le proprie.

  • L'uso dell'editor consente di compilare e testare la query prima di iniziare a usarla.
  • Seleziona How to per ricevere assistenza sulla strutturazione della query, oltre a istruzioni e collegamenti aggiuntivi.
  • L'editor contiene esempi di query di raccomandazione predefiniti che è possibile usare per creare una query personalizzata. I dati sono visualizzati nella stessa struttura dell'API.
  1. Selezionare Nuova query.

    Screenshot dell'editor di query con Nuova query selezionata per iniziare a scrivere una query di raccomandazione.

  2. Usare il modello di query di esempio con le relative istruzioni o selezionare una query di raccomandazione predefinita di esempio nella parte inferiore della pagina per iniziare.

  3. Selezionare Esegui query per testare la query creata.

  4. Quando la query è pronta, tagliarla e incollarla dall'editor nel riquadro Query di raccomandazione .

  5. Continuare con il passaggio 7 della sezione Creare una raccomandazione personalizzata.

Modelli di query ed esempi

L'editor di query include esempi predefiniti e i modelli di questa sezione illustrano come strutturare controlli di sicurezza comuni. Ogni modello restituisce le risorse che rientrano nell'ambito e contrassegna le risorse non conformi con UNHEALTHY. In questo modello modificare solo l'espressione condition e mantenere invariata la HealthStatus riga.

Note

I modelli in questa sezione utilizzano i tipi di risorsa di Azure. Per le risorse AWS e GCP, modificare Environment == 'Azure' in Environment == 'AWS' o Environment == 'GCP' e aggiornare Identifiers.Type in modo che corrisponda al tipo di risorsa nell'ambiente in uso.

Identificare le macchine virtuali senza tag di governance obbligatori, ad esempio le informazioni sul centro di costo o sul proprietario.

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

Colonne di output:Id, Name, Environment, IdentifiersAdditionalData, , RecordHealthStatus

Logica di valutazione: I computer con tag obbligatori mancanti sono HealthStatus impostati su UNHEALTHY e vengono visualizzati come risultati non conformi. Le macchine con entrambi i tag impostati hanno HealthStatus impostato su HEALTHY.

Requisiti dello schema di output KQL

Prima di scrivere la query, comprendere lo schema di output richiesto. Questo è il modo in cui Microsoft Defender per il cloud interpreta i risultati e esegue il mapping dei risultati alle risorse.

Colonne di output obbligatorie:

Column Type Purpose
Id Stringa (obbligatorio) Identificatore di risorsa usato da Defender per il cloud per fare riferimento alla risorsa.
Name Stringa (obbligatorio) Nome della risorsa leggibile visualizzato nei risultati.
Environment Stringa (obbligatorio) Ambiente cloud: Azure, AWS o GCP.
Identifiers Dinamico (obbligatorio) Tipi di risorsa e identificatori passati dal record di origine.
AdditionalData Dinamico (obbligatorio) Metadati supplementari della risorsa trasmessi dal record di origine.
Record Dinamico (obbligatorio) Record di risorse completo contenente tutte le proprietà.
HealthStatus Stringa (obbligatorio) Risultato della valutazione: UNHEALTHY (non conforme) o HEALTHY (conforme).

Termina sempre la query con: | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

Mappatura della valutazione:

Ogni query deve impostare il valore HealthStatus per ogni risorsa. Utilizzare la funzione iff() per valutare la condizione e assegnare lo stato:

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

In questo modello modificare solo l'espressione condition . Mantenere invariata la HealthStatus riga:

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

Le risorse in cui HealthStatus è UNHEALTHY vengono visualizzate come risultati non conformi in Defender per il cloud. Le risorse per cui HealthStatus è HEALTHY sono conformi e non vengono visualizzate nei risultati.

Importante

Impostare sempre HealthStatus su 'UNHEALTHY' o 'HEALTHY'. Restituisce tutte le risorse rientranti nell'ambito. Defender per il cloud usa la colonna HealthStatus per determinare la conformità. L'omissione delle risorse dal set di risultati è trattata come assenza di dati, non come indicazione di buono stato.

Errori comuni e correzioni:

  • Colonne obbligatorie mancanti: Se manca una delle sette colonne necessarie, la query non riesce. Terminare sempre con | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus.
  • Valori erratiHealthStatus: Solo 'UNHEALTHY' e 'HEALTHY' sono valori validi (con distinzione tra maiuscole e minuscole). Altri valori o null causano errori di analisi.
  • Percorsi delle proprietà non corretti: Le proprietà sono accessibili tramite Record.properties.*, non direttamente. Ad esempio, usare Record.properties.httpsOnly, non properties.httpsOnly.
  • Sensibilità alle maiuscole/minuscole del tipo di risorsa: Usare =~ (corrispondenza senza distinzione tra maiuscole e minuscole) per i confronti Identifiers.Type. Ad esempio: Identifiers.Type =~ 'Microsoft.Storage/storageAccounts'.
  • Proprietà nulle in più sottoscrizioni: Testa la query in più sottoscrizioni con configurazioni diverse. Usare i controlli isnull() quando le proprietà potrebbero essere assenti.

Usare raccomandazioni personalizzate su larga scala

La creazione di raccomandazioni personalizzate nel portale di Azure è ideale per la maggior parte degli utenti. L'interfaccia fornisce un pratico editor KQL e strumenti di convalida predefiniti. Un approccio programmatico può essere utile anche quando è necessario distribuire raccomandazioni in molti ambienti o sottoscrizioni.

Automatizzare tramite l'API

Se si prevalidano query KQL e si vuole automatizzare la creazione di raccomandazioni personalizzate, è possibile usare l'API Microsoft Defender per il cloud. Questo metodo consente di distribuire rapidamente le raccomandazioni, assicurandosi che siano coerenti e scalabili in ambienti cloud.

  • Vantaggi: è possibile automatizzare e ridimensionare la distribuzione di raccomandazioni personalizzate.
  • Quando usare: questo metodo è ideale per le implementazioni su larga scala in cui è necessario applicare le raccomandazioni in modo coerente in più ambienti.

Per altre informazioni sull'uso dell'API per gestire le raccomandazioni personalizzate, vedere le informazioni di riferimento sulle API composite Defender per il cloud.

Creare uno standard personalizzato

È possibile assegnare raccomandazioni personalizzate a uno o più standard personalizzati.

Per creare uno standard personalizzato:

  1. Accedi al portale di Azure.

  2. Passare a Microsoft Defender per il cloud>Invironment settings> la sottoscrizione pertinente.

  3. Selezionare Criteri di sicurezza>+ Crea>Standard.

  4. Selezionare le raccomandazioni da aggiungere allo standard personalizzato.

  5. (Facoltativo) Per le sottoscrizioni di Azure, controllare la colonna Origine.

    Pagina di creazione di standard personalizzato in Microsoft Defender per il cloud, che mostra l'elenco delle raccomandazioni disponibili per la selezione.

  6. Fare clic su Crea.

Creare e migliorare le raccomandazioni personalizzate con Criteri di Azure (legacy)

Per le sottoscrizioni di Azure, è possibile creare raccomandazioni e standard personalizzati e migliorarli usando Criteri di Azure. Si tratta di una funzionalità legacy e si consiglia di usare la nuova funzionalità di raccomandazioni personalizzate.

Crea una raccomandazione personalizzata e standard (versione legacy)

È possibile creare raccomandazioni e standard personalizzati in Defender per il cloud creando definizioni e iniziative di criteri in Criteri di Azure e caricandoli in Defender per il cloud.

Per creare una raccomandazione personalizzata o standard con Criteri di Azure (legacy):

  1. Creare una o più definizioni di criteri nel portale di Criteri di Azure o a livello di codice.
  2. Creare un'iniziativa di criteri contenente le definizioni di criteri personalizzate.

Integrare l'iniziativa come standard personalizzato (legacy)

Le assegnazioni dei criteri vengono utilizzate da Criteri di Azure per assegnare le risorse di Azure a un criterio o a un'iniziativa.

Per eseguire l'onboarding di un'iniziativa in uno standard di sicurezza personalizzato in Defender per il cloud, è necessario includere "ASC":"true" nel corpo della richiesta, come illustrato di seguito. Il campo ASC abilita l'onboarding dell'iniziativa in Microsoft Defender per il cloud.

Per eseguire l'onboarding di un'iniziativa personalizzata:

Esempio per integrare un'iniziativa personalizzata

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

Corpo della richiesta (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"
            }
          }
        }
      ]
    }
  }

Esempio per rimuovere un'assegnazione

Questo esempio illustra come rimuovere un'assegnazione:

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

Migliora i consigli personalizzati (versione precedente)

Le raccomandazioni predefinite fornite con Microsoft Defender per il cloud includono dettagli come i livelli di gravità e le istruzioni di correzione. Se si vuole aggiungere questo tipo di informazioni alle raccomandazioni personalizzate per Azure, usare l'API REST.

I due tipi di informazioni che è possibile aggiungere sono:

  • RemediationDescription - Stringa
  • Severity – Enumerazione [Basso, Medio, Alto]

I metadati devono essere aggiunti alla definizione dei criteri per un criterio che fa parte dell'iniziativa personalizzata. Deve trovarsi nella proprietà 'securityCenter', come illustrato di seguito:

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

Ecco un altro esempio di criteri personalizzati, tra cui la proprietà 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')]"
      }
    }
  }
}
}
}

Per un altro esempio di proprietà securityCenter, vedere Esempi di API REST per i metadati di valutazione.

Passaggi successivi

Per altre informazioni sulle query Kusto, è possibile usare i collegamenti seguenti: