Tworzenie niestandardowych standardów i zaleceń w Microsoft Defender dla Chmury

Zalecenia dotyczące zabezpieczeń w Microsoft Defender dla Chmury pomagają poprawić poziom zabezpieczeń i zwiększyć poziom zabezpieczeń. Zalecenia opierają się na ocenach względem standardów zabezpieczeń zdefiniowanych dla subskrypcji Azure, kont Amazon Web Services (AWS) oraz projektów Google Cloud Platform (GCP), w których włączono usługę Defender dla Chmury.

W tym artykule opisano, jak:

  • Tworzenie niestandardowych zaleceń dla wszystkich chmur (Azure, AWS i GCP) przy użyciu zapytania języka Kusto Query Language (KQL).
  • Przypisywanie niestandardowych zaleceń do niestandardowego standardu zabezpieczeń.

Wymagania wstępne

Zanim stworzysz niestandardowe rekomendacje lub standardy, upewnij się, że spełniasz następujące wymagania:

  • Aby utworzyć nowy standard zabezpieczeń, musisz mieć uprawnienia właściciela subskrypcji.
  • Aby utworzyć zalecenia niestandardowe, musisz mieć uprawnienia administratora zabezpieczeń.
  • Aby utworzyć niestandardowe zalecenia oparte na języku Kusto Query Language (KQL), musisz mieć włączony plan Defender Cloud Security Posture Management (CSPM). Wszyscy klienci mogą tworzyć niestandardowe rekomendacje na podstawie Azure Policy.
  • Zapoznaj się z obsługą w chmurach Azure dotyczącą niestandardowych zaleceń.

Zalecamy obejrzenie tego odcinka Defender dla Chmury in the field, aby dowiedzieć się więcej o zaleceniach niestandardowych i o tym, jak pisać zapytania KQL.

Tworzenie rekomendacji niestandardowej

Utwórz niestandardowe zalecenia, w tym kroki naprawcze, poziom istotności oraz standardy, do których należy przypisać zalecenia. Dodasz logikę rekomendacji za pomocą języka KQL. Możesz użyć prostego edytora zapytań z wbudowanymi szablonami zapytań, które można dostosować zgodnie z potrzebami, lub napisać zapytanie KQL od podstaw.

Aby utworzyć zalecenie niestandardowe:

  1. Zaloguj się do portalu Azure.

  2. Przejdź do Microsoft Defender dla Chmury>Ustawienia środowiska> odpowiedniej subskrypcji.

  3. Wybierz Zasady zabezpieczeń>+ Utwórz rekomendację niestandardową.

    Zrzut ekranu przedstawiający stronę zasad zabezpieczeń w usłudze Microsoft Defender dla Chmury z wyróżnioną akcją „Utwórz zalecenie niestandardowe”.

  4. Wprowadź szczegóły: Wymagane: Nazwa, Zakres, Poziom ważności i problem dotyczący zabezpieczeń. Opcjonalnie: Opis, Korygowanie.

  5. Wybierz Dalej.

  6. Wprowadź zapytanie KQL lub wybierz pozycję Otwórz edytor zapytań.

    Zrzut ekranu przedstawiający niestandardowy przepływ rekomendacji z akcją Otwórz edytor zapytań, używaną do uruchamiania edytora KQL.

  7. Wybierz Dalej.

  8. Wybierz odpowiednie standardy dla zalecenia.

    Zrzut ekranu przedstawiający panel szczegółów zalecenia Microsoft Defender dla Chmury z polami nazwy, ważności i przypisanych standardów.

  9. Wybierz Dalej.

  10. Wybierz niestandardowe standardy do przypisania.

  11. Wybierz opcję Przejrzyj i utwórz.

  12. Przejrzyj szczegóły rekomendacji.

  13. Wybierz Utwórz.

    Zrzut ekranu strony „Przeglądanie i tworzenie” w Microsoft Defender dla Chmury, pokazujący podsumowanie zaleceń przed przesłaniem.

Korzystanie z edytora zapytań

Zalecamy użycie edytora zapytań do utworzenia zapytania rekomendacyjnego. Możesz również użyć podanych szablonów zapytań i przykładów , aby wyświetlić przykładowe zapytania i dowiedzieć się, jak tworzyć własne.

  • Użycie edytora ułatwia kompilowanie i testowanie zapytania przed rozpoczęciem korzystania z niego.
  • Wybierz How to, aby uzyskać pomoc dotyczącą tworzenia struktury zapytania oraz dodatkowe instrukcje i linki.
  • Edytor zawiera wbudowane przykłady zapytań rekomendacji, których można użyć, aby ułatwić tworzenie własnego zapytania. Dane są wyświetlane w tej samej strukturze co w interfejsie API.
  1. Wybierz pozycję Nowe zapytanie.

    Zrzut ekranu edytora zapytań z wybraną pozycją Nowe zapytanie, aby rozpocząć pisanie zapytania rekomendacji.

  2. Użyj przykładowego szablonu zapytania z instrukcjami lub wybierz przykładowe wbudowane zapytanie rekomendacji z dolnej części strony, aby rozpocząć pracę.

  3. Wybierz pozycję Uruchom zapytanie , aby przetestować utworzone zapytanie.

  4. Gdy zapytanie będzie gotowe, wytnij je z edytora i wklej do panelu Zapytanie rekomendacji.

  5. Wybierz Następne, wybierz odpowiednie standardy dla rekomendacji, wybierz niestandardowe standardy do przypisania, a następnie wybierz Przeglądaj i tworzyć.

  6. Zapoznaj się z szczegółami rekomendacji i wybierz Create.

Szablony zapytań i przykłady

Edytor zapytań zawiera wbudowane przykłady, a szablony w tej sekcji pokazują, jak organizować typowe kontrole zabezpieczeń. Każdy szablon zwraca zasoby objęte zakresem i oznacza zasoby niezgodne jako UNHEALTHY. W tym szablonie edytuj tylko wyrażenie condition i pozostaw wiersz HealthStatus bez zmian.

Note

Szablony w tej sekcji używają typów zasobów platformy Azure. W przypadku zasobów platform AWS i GCP zmień Environment == 'Azure' na Environment == 'AWS' lub Environment == 'GCP' i zaktualizuj Identifiers.Type, aby był zgodny z typem zasobu w danym środowisku.

Zidentyfikuj maszyny wirtualne bez obowiązkowych tagów nadzoru, takich jak centrum kosztów lub informacje o właścicielu.

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

Kolumny wyjściowe:Id, Name, Environment, IdentifiersAdditionalData, , RecordHealthStatus

Logika oceny: Maszyny bez wymaganych tagów mają wartość HealthStatus ustawioną na UNHEALTHY i są wyświetlane jako wyniki niezgodności. Maszyny z obiema ustawionymi etykietami mają parametr HealthStatus ustawiony na HEALTHY.

Wymagania dotyczące schematu wyjściowego języka KQL

Przed napisaniem zapytania zapoznaj się z wymaganym schematem danych wyjściowych. W ten sposób Microsoft Defender dla Chmury interpretuje wyniki i mapuje ustalenia do zasobów.

Wymagane kolumny wyjściowe:

Column Typ Purpose
Id Ciąg (wymagany) Identyfikator zasobu używany przez Defender dla Chmury do odwołowania się do zasobu.
Name Ciąg (wymagany) Nazwa zasobu czytelna dla człowieka wyświetlana w wynikach.
Environment Ciąg (wymagany) Środowisko chmury: Azure, AWS lub GCP.
Identifiers Dynamiczny (wymagany) Typ zasobu i identyfikatory przekazywane z rekordu źródłowego.
AdditionalData Dynamiczny (wymagany) Dodatkowe metadane zasobów przekazywane z rekordu źródłowego.
Record Dynamiczny (wymagany) Pełny rekord zasobu zawierający wszystkie właściwości.
HealthStatus Ciąg (wymagany) Wynik oceny: UNHEALTHY (niezgodny) lub HEALTHY (zgodny).

Zawsze kończ zapytanie przy użyciu: | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

Mapowanie oceny:

Każde zapytanie musi ustawić HealthStatus wartość dla każdego zasobu. Użyj poniższego wzorca jako podstawowej logiki oceny stanu zdrowia w swoim niestandardowym zapytaniu rekomendacyjnym, zastępując warunek tymczasowy własnym testem:

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

W tym wzorcu edytuj tylko wyrażenie condition. Zachowaj HealthStatus następujące wyrażenie bez zmian w swoim zapytaniu, aby Defender dla Chmury mógł klasyfikować dopasowane zasoby jako zgodne lub niezgodne:

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

Zasoby, w których HealthStatus jest UNHEALTHY są wyświetlane jako niezgodne wyniki w Defender dla Chmury. Zasoby, w przypadku których wartość HealthStatus to HEALTHY, są zgodne i nie pojawiają się w wynikach.

Ważna

Zawsze ustaw HealthStatus na 'UNHEALTHY' lub 'HEALTHY'. Zwróć wszystkie zasoby objęte zakresem. Defender dla Chmury używa kolumny HealthStatus w celu określenia zgodności. Pominięcie zasobów w zbiorze wyników jest traktowane jako brak danych, a nie jako stan prawidłowy.

Typowe błędy i poprawki:

  • Brak wymaganych kolumn: Jeśli brakuje dowolnej z siedmiu wymaganych kolumn, zapytanie zakończy się niepowodzeniem. Zawsze kończ na | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus.
  • Nieprawidłowe HealthStatus wartości: Tylko 'UNHEALTHY' i 'HEALTHY' są poprawnymi wartościami (z uwzględnieniem wielkości liter). Inne wartości lub wartości null powodują błędy analizowania.
  • Nieprawidłowe ścieżki właściwości: Dostęp do właściwości jest uzyskiwany za pośrednictwem metody Record.properties.*, a nie bezpośrednio. Na przykład użyj Record.properties.httpsOnly, a nie properties.httpsOnly.
  • Rozróżnianie wielkości liter w typie zasobu: Użyj =~ (dopasowanie bez uwzględniania wielkości liter) w porównaniach Identifiers.Type. Na przykład Identifiers.Type =~ 'Microsoft.Storage/storageAccounts'.
  • Właściwości o wartości null w różnych subskrypcjach: Przetestuj zapytanie w subskrypcjach o różnych konfiguracjach. Użyj sprawdzeń isnull() w miejscach, w których właściwości mogą nie występować.

Stosuj niestandardowe zalecenia na skalę masową

Tworzenie niestandardowych zaleceń w portalu Azure jest najlepsze dla większości użytkowników. Interfejs udostępnia wygodny edytor KQL i wbudowane narzędzia do walidacji. Podejście programowe może być również przydatne, gdy trzeba wdrożyć zalecenia w wielu środowiskach lub subskrypcjach.

Automatyzowanie za pośrednictwem interfejsu API

Jeśli masz już wstępnie zweryfikowane zapytania KQL i chcesz zautomatyzować tworzenie niestandardowych zaleceń, możesz użyć interfejsu API usługi Microsoft Defender dla Chmury. Ta metoda umożliwia szybkie wdrażanie zaleceń, zapewniając ich spójność i skalowalność w środowiskach chmury.

  • Zalety: możesz zautomatyzować i skalować wdrożenie niestandardowych zaleceń.
  • Kiedy należy używać: Ta metoda jest idealna w przypadku implementacji na dużą skalę, w których należy konsekwentnie stosować rekomendacje w wielu środowiskach.

Aby uzyskać więcej informacji o korzystaniu z interfejsu API do zarządzania rekomendacjami niestandardowymi, zobacz dokumentację interfejsu API złożonego Defender dla Chmury.

Tworzenie dostosowanych standardów

Zalecenia niestandardowe można przypisać do jednego lub większej liczby standardów niestandardowych.

Aby utworzyć niestandardowy standard:

  1. Zaloguj się do portalu Azure.

  2. Przejdź do Microsoft Defender dla Chmury>Ustawienia środowiska> odpowiedniej subskrypcji.

  3. Wybierz pozycję Zasady zabezpieczeń>+ Utwórz>Standardowe.

  4. Wybierz zalecenia, które chcesz dodać do standardu niestandardowego.

  5. (Opcjonalnie) W przypadku subskrypcji Azure przejrzyj kolumnę Źródło.

    Strona tworzenia niestandardowego standardu w Microsoft Defender dla Chmury, przedstawiająca listę dostępnych do wyboru zaleceń.

  6. Wybierz Utwórz.

Tworzenie i ulepszanie niestandardowych zaleceń za pomocą usługi Azure Policy (starsza wersja)

W przypadku subskrypcji platformy Azure można tworzyć niestandardowe rekomendacje i standardy oraz ulepszać je przy użyciu usługi Azure Policy. Jest to starsza funkcja i zalecamy użycie nowej funkcji rekomendacji niestandardowych.

Tworzenie niestandardowego zalecenia i standardu (starsza wersja)

W Defender dla Chmury można tworzyć niestandardowe rekomendacje i standardy, tworząc definicje zasad i inicjatywy w Azure Policy oraz dołączając je w Defender dla Chmury.

Aby utworzyć rekomendację niestandardową lub standard z Azure Policy (starsza wersja):

  1. Stwórz jedną lub więcej definicji polityk w portalu Azure Policy lub stwórz definicje polityk programowo.
  2. Utwórz inicjatywę zasad, która zawiera niestandardowe definicje zasad.

Dołączanie inicjatywy jako niestandardowego standardu (starsza wersja)

Przypisania zasad służą w Azure Policy do przypisywania zasobów platformy Azure do zasad lub inicjatyw.

Aby dołączyć inicjatywę do niestandardowego standardu zabezpieczeń w Defender dla Chmury, należy uwzględnić "ASC":"true" w treści żądania, jak pokazano tutaj. Pole ASC wdraża inicjatywę w Microsoft Defender dla Chmury.

Aby dołączyć inicjatywę niestandardową:

Przykład wdrożenia inicjatywy niestandardowej

Użyj poniższego żądania REST, aby utworzyć lub zaktualizować inicjatywę Azure Policy, która wspiera Twój niestandardowy standard Defender dla Chmury:

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

Treść żądania (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"
            }
          }
        }
      ]
    }
  }

Przykład usunięcia przypisania

Aby usunąć starszy niestandardowy standard z subskrypcji, użyj następującego żądania REST, aby usunąć przypisanie polityki:

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

Ulepszanie niestandardowych zaleceń (starsza wersja)

Wbudowane zalecenia dostarczane z Microsoft Defender dla Chmury zawierają szczegółowe informacje, takie jak poziomy ważności i instrukcje korygowania. Jeśli chcesz dodać informacje tego typu do niestandardowych zaleceń dotyczących platformy Azure, użyj interfejsu API REST.

Dwa typy informacji, które można dodać, to:

  • RemediationDescription — ciąg
  • Ważność – Enum [Niskie, Średnie, Wysokie]

Metadane należy dodać do definicji zasad dla zasad wchodzących w skład inicjatywy niestandardowej. Metadane powinny znajdować się we własności 'securityCenter', jak pokazano:

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

Poniższy przykład przedstawia kompletną, niestandardową definicję polityki, która zawiera właściwość securityCenter metadanych wraz ze szczegółami dotyczącymi naprawy i powagi:

{
"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')]"
      }
    }
  }
}
}
}

Aby zapoznać się z innym przykładem właściwości securityCenter, zobacz Przykłady interfejsu API REST dotyczące metadanych ocen.

Następne kroki

Skorzystaj z poniższych linków, aby dowiedzieć się więcej na temat zapytań Kusto: