Criar padrões e recomendações personalizados no Microsoft Defender para Nuvem

Recomendações de segurança no Microsoft Defender para Nuvem ajudam a melhorar e fortalecer sua postura de segurança. As recomendações são baseadas em avaliações com base nos padrões de segurança definidos para assinaturas do Azure, contas do Amazon Web Services (AWS) e projetos do Google Cloud Platform (GCP) que têm o Defender para Nuvem habilitado.

Este artigo descreve como:

  • Crie recomendações personalizadas para todas as nuvens (Azure, AWS e GCP) com uma consulta KQL (Kusto Query Language).
  • Atribua recomendações personalizadas a um padrão de segurança personalizado.

Antes de começar

  • Você precisa de permissões de Proprietário na assinatura para criar um novo padrão de segurança.
  • Você precisa de permissões de administrador de segurança para criar recomendações personalizadas.
  • Para criar recomendações personalizadas com base no KQL (Linguagem de Consulta Kusto), você deve ter o plano Defender CSPM (Cloud Security Posture Management) habilitado. Todos os clientes podem criar recomendações personalizadas com base no Azure Policy.
  • Examine o suporte em nuvens do Azure para recomendações personalizadas.

É recomendável assistir a este episódio de Defender para Nuvem no campo para saber mais sobre recomendações personalizadas e como escrever consultas KQL.

Criar uma recomendação personalizada

Crie recomendações personalizadas, incluindo etapas para correção, gravidade e os padrões aos quais a recomendação deve ser atribuída. Adicione lógica de recomendação com KQL. Você pode usar um editor de consultas simples com modelos de consulta internos que você pode ajustar conforme necessário ou pode escrever sua consulta KQL do zero.

Para criar uma recomendação personalizada:

  1. Entre no portal do Azure.

  2. Vá para Microsoft Defender para Nuvem>Configurações do ambiente> da assinatura relevante.

  3. Selecione Políticas> de segurança+ Criar recomendação personalizada.

    Screenshot da página de políticas de segurança Microsoft Defender para Nuvem com a ação Criar recomendação personalizada realçada.

  4. Insira os detalhes: Obrigatório: Nome, Escopo, Gravidade e Problema de Segurança. Opcional: Descrição, Correção.

  5. Selecione Avançar.

  6. Insira uma consulta KQL ou selecione Abrir editor de consultas.

    Captura de tela do fluxo de recomendação personalizado com a ação abrir editor de consultas usada para iniciar o editor KQL.

  7. Selecione Avançar.

  8. Selecione os padrões relevantes para a recomendação.

    Captura de tela do painel de detalhes da recomendação do Microsoft Defender para Nuvem, mostrando campos para nome, gravidade e padrões atribuídos.

  9. Selecione Avançar.

  10. Selecione os padrões personalizados a serem atribuídos.

  11. Selecione Examinar e criar.

  12. Examine os detalhes da recomendação.

  13. Selecione Criar.

    Captura de tela da página Revisar e criar do Microsoft Defender para Nuvem mostrando o resumo da recomendação antes do envio.

Use o editor de consulta

É recomendável usar o editor de consultas para criar uma consulta de recomendação. Você também pode usar os modelos de consulta e exemplos fornecidos para exibir consultas de exemplo e aprender a criar suas próprias.

  • O uso do editor ajuda você a criar e testar sua consulta antes de começar a usá-la.
  • Selecione Como para obter ajuda na estruturação da consulta e instruções e links adicionais.
  • O editor contém exemplos de consulta de recomendação internos que você pode usar para ajudar a criar sua própria consulta. Os dados aparecem na mesma estrutura em que aparecem na API.
  1. Selecione Nova consulta.

    Captura de tela do editor de consultas com nova consulta selecionada para começar a escrever uma consulta de recomendação.

  2. Use o modelo de consulta de exemplo com suas instruções ou selecione um exemplo de consulta de recomendação interna na parte inferior da página para começar.

  3. Selecione Executar consulta para testar a consulta que você criou.

  4. Quando a consulta estiver pronta, corte-a e cole-a do editor no painel Consulta de recomendação .

  5. Continue com a etapa 7 da seção Criar uma recomendação personalizada.

Modelos e exemplos de consulta

O editor de consultas inclui exemplos internos e os modelos nesta seção mostram como estruturar verificações de segurança comuns. Cada modelo retorna os recursos no escopo e marca os recursos não compatíveis como UNHEALTHY. Neste padrão de modelo, edite apenas a condition expressão e mantenha a HealthStatus linha inalterada.

Note

Os modelos nesta seção usam tipos de recurso do Azure. Para recursos AWS e GCP, altere Environment == 'Azure' para Environment == 'AWS' ou Environment == 'GCP' e atualize Identifiers.Type para corresponder ao tipo de recurso em seu ambiente.

Identifique as máquinas virtuais sem tags de governança obrigatórias, como centro de custo ou informações do proprietário.

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

Colunas de saída:Id, Name, , Environment, Identifiers, AdditionalData, , Record, HealthStatus

Lógica de avaliação: As máquinas sem as tags obrigatórias têm HealthStatus definido como UNHEALTHY e aparecem como constatações de não conformidade. As máquinas com ambas as tags definidas têm HealthStatus definido como HEALTHY.

Requisitos do esquema de saída KQL

Antes de escrever sua consulta, entenda o esquema de saída necessário. É assim que o Microsoft Defender para Nuvem interpreta seus resultados e associa as descobertas aos recursos.

Colunas de saída necessárias:

Coluna Tipo Purpose
Id String (obrigatório) Identificador de recurso usado por Defender para Nuvem para fazer referência ao recurso.
Name String (obrigatório) Nome do recurso legível por pessoas exibido nos resultados.
Environment String (obrigatório) Ambiente de nuvem: Azure, AWS ou GCP.
Identifiers Dinâmico (obrigatório) Tipo de recurso e identificadores transferidos do registro de origem.
AdditionalData Dinâmico (obrigatório) Metadados complementares do recurso transferidos a partir do registro de origem.
Record Dinâmico (obrigatório) Registro de recurso completo contendo todas as propriedades.
HealthStatus String (obrigatório) Resultado da avaliação: UNHEALTHY (não compatível) ou HEALTHY (em conformidade).

Sempre termine sua consulta com: | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus

Mapeamento de avaliação:

Cada consulta deve definir um HealthStatus valor para cada recurso. Use a iff() função para avaliar sua condição e atribuir o status:

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

Nesse padrão, edite apenas a condition expressão. Mantenha a HealthStatus linha inalterada:

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

Os recursos em que HealthStatus é UNHEALTHY aparecem como descobertas não compatíveis em Defender para Nuvem. Os recursos em que HealthStatus está HEALTHY estão em conformidade e não aparecem nos resultados.

Importante

Sempre defina HealthStatus como 'UNHEALTHY' ou 'HEALTHY'. Devolva todos os recursos dentro do escopo. Defender para Nuvem usa a coluna HealthStatus para determinar a conformidade. Omitir recursos do conjunto de resultados é tratado como ausência de dados, não como saudável.

Erros e correções comuns:

  • Colunas necessárias ausentes: Se alguma das sete colunas necessárias estiver ausente, a consulta falhará. Sempre termine com | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus.
  • Valores incorretosHealthStatus: Somente 'UNHEALTHY' e 'HEALTHY' são valores válidos (sensível a maiúsculas e minúsculas). Outros valores ou nulos causam erros de análise.
  • Caminhos de propriedade incorretos: As propriedades são acessadas por meio de Record.properties.*, não diretamente. Por exemplo, use Record.properties.httpsOnly, e não properties.httpsOnly.
  • Diferenciação entre maiúsculas e minúsculas no tipo de recurso: use =~ (correspondência que não diferencia maiúsculas de minúsculas) para comparações de Identifiers.Type. Por exemplo, Identifiers.Type =~ 'Microsoft.Storage/storageAccounts'.
  • Propriedades nulas em várias assinaturas: Teste sua consulta em assinaturas com configurações variadas. Use as verificações isnull() quando as propriedades talvez estejam ausentes.

Use recomendações personalizadas em escala

Criar recomendações personalizadas no portal Azure é melhor para a maioria dos usuários. A interface fornece um editor de KQL conveniente e ferramentas de validação internas. Uma abordagem programática também pode ser útil quando você precisa implantar recomendações em vários ambientes ou assinaturas.

Automatizar por meio da API

Se você prevalidar consultas KQL e quiser automatizar a criação de recomendações personalizadas, poderá usar a API Microsoft Defender para Nuvem. Esse método permite implantar recomendações rapidamente, garantindo que elas sejam consistentes e escalonáveis em seus ambientes de nuvem.

  • Vantagens: você pode automatizar e dimensionar a implantação de recomendações personalizadas.
  • Quando usar: esse método é ideal para implementações em larga escala em que você precisa aplicar recomendações consistentemente em vários ambientes.

Para obter mais informações sobre como usar a API para gerenciar recomendações personalizadas, consulte a referência da API composta Defender para Nuvem.

Criar um padrão personalizado

Recomendações personalizadas podem ser atribuídas a um ou mais padrões personalizados.

Para criar um padrão personalizado:

  1. Entre no portal do Azure.

  2. Vá para Microsoft Defender para Nuvem>Configurações do ambiente> da assinatura relevante.

  3. Selecione Políticas de segurança>+ Criar>Standard.

  4. Selecione as recomendações que você deseja adicionar ao padrão personalizado.

  5. (Opcional) Para Azure assinaturas, examine a coluna Origem.

    Página de criação de padrão personalizado no Microsoft Defender para Nuvem, que mostra a lista de recomendações disponíveis para seleção.

  6. Selecione Criar.

Criar e aprimorar recomendações personalizadas com o Azure Policy (herdado)

Para assinaturas do Azure, você pode criar recomendações e padrões personalizados e aprimorá-los usando o Azure Policy. Este é um recurso herdado e é recomendável usar o novo recurso de recomendações personalizadas.

Criar uma recomendação personalizada e padrão (herdado)

Você pode criar recomendações e padrões personalizados em Defender para Nuvem criando definições de política e iniciativas em Azure Policy e integrando-as em Defender para Nuvem.

Para criar uma recomendação personalizada ou padrão com Azure Policy (herdado):

  1. Crie uma ou mais definições de política no portal do Azure Policyou programaticamente.
  2. Crie uma iniciativa de política que contenha as definições de política personalizadas.

Integrar a iniciativa como um padrão personalizado (herdado)

Atribuições de política são usadas pelo Azure Policy para atribuir recursos do Azure a uma política ou iniciativa.

Para integrar uma iniciativa a um padrão de segurança personalizado em Defender para Nuvem, você precisa incluir "ASC":"true" no corpo da solicitação, conforme mostrado aqui. O campo ASC adiciona a iniciativa ao Microsoft Defender para Nuvem.

Para integrar uma iniciativa personalizada:

Exemplo para integrar uma iniciativa personalizada

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

Corpo da solicitação (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"
            }
          }
        }
      ]
    }
  }

Exemplo para remover uma atribuição

Este exemplo mostra como remover uma atribuição:

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

Aprimorar recomendações personalizadas (herdado)

As recomendações internas fornecidas com o Microsoft Defender para Nuvem incluem detalhes como níveis de severidade e instruções de correção. Se você quiser adicionar esse tipo de informação às recomendações personalizadas do Azure, use a API REST.

Os dois tipos de informações que você pode adicionar são:

  • RemediationDescription – cadeia de caracteres
  • Severidade – Enum [Baixa, Média, Alta]

Os metadados devem ser adicionados à definição de política para uma política que faz parte da iniciativa personalizada. Ela deve estar na propriedade "securityCenter", conforme mostrado:

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

Este é outro exemplo de política personalizada, incluindo a propriedade 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')]"
      }
    }
  }
}
}
}

Para outro exemplo de propriedade securityCenter, consulte exemplos de API REST para metadados de avaliações.

Próximas Etapas 

Use os seguintes links para saber mais sobre as consultas Kusto: