Configurar o endurecimento do plano de dados do Kubernetes no Defender para a Cloud

O endurecimento do plano de dados Kubernetes ajuda a impor configurações seguras para cargas de trabalho a correr no seu cluster, como restringir containers privilegiados, impor limites de recursos e limitar o acesso à rede.

Em Microsoft Defender para a Cloud, o endurecimento do plano de dados é implementado usando Azure Policy para Kubernetes avaliar e aplicar estas configurações. O Azure Policy é implementado como parte do Defender for Containers quando o provisionamento automático está ativado.

Se a Azure Policy for Kubernetes estiver desativada nas definições do plano do Defender for Containers, pode implementá-la corrigindo a recomendação relevante. Também pode implementar Azure Policy manualmente usando CLI do Azure ou Helm se desativou o provisionamento automático durante a ativação ou excluiu clusters específicos do provisionamento automático.

Após a implementação do Azure Policy for Kubernetes, o Defender para a Cloud gera recomendações de reforço do plano de dados com base na configuração do seu cluster. Esta página mostra como rever estas recomendações, configurar parâmetros de políticas e aplicá-las aos seus clusters.

Pré-requisitos

Para começar, certifique-se de que:

Ativar a Política do Azure para Kubernetes corrigindo recomendações

Se o Azure Policy for Kubernetes não estiver implementado ou desligado nas definições do plano Defender for Containers, pode instalá-lo corrigindo a recomendação relevante no Defender para a Cloud.

  1. Inicie sessão no portal Azure.

  2. Vá para Microsoft Defender para Nuvem>Recomendações.

  3. Procure a recomendação relevante:

    • Azure: Os clusters do Azure Kubernetes Service devem ter o complemento Azure Policy para Kubernetes instalado.
    • GCP: Os clusters GKE devem ter a extensão Azure Policy instalada
    • Clusters Kubernetes habilitados pelo Azure Arc devem ter a extensão Azure Policy instalada.

    Captura de ecrã a mostrar a recomendação dos clusters de serviços Azure Kubernetes.

  4. Selecione uma recomendação.

  5. No separador Tomar Ação , selecione Corrigir.

    Captura de ecrã de uma recomendação com o botão Corrigir destacado.

  6. Selecione Corrigir para remediar os recursos selecionados.

  7. Repita para cada recomendação.

Recomendações de fortalecimento do plano de dados

Depois de implementar o Azure Policy for Kubernetes, o Defender para a Cloud avalia a configuração do seu cluster e gera recomendações de endurecimento do plano de dados. Este processo pode demorar até 30 minutos a concluir.

Nota

Componentes Microsoft, como o sensor Defender, são implementados por padrão no espaço de nomes kube-system e não são considerados não conformes. Componentes de terceiros instalados noutros namespaces podem ser sinalizados. Para excluir namespaces específicos, configure exclusões de políticas do Azure.

A tabela seguinte lista recomendações comuns de endurecimento do plano de dados:

Nome da recomendação Controlo de segurança Configuração necessária
Os limites de CPU e memória do contêiner devem ser impostos Proteja os aplicativos contra ataques DDoS Sim
As imagens de contenedor devem ser desplegadas apenas a partir de registos confiáveis Remediar vulnerabilidades Sim
Capacidades Linux menos privilegiadas devem ser impostas a contenedores Gerenciar acesso e permissões Sim
Os contêineres só devem usar perfis AppArmor permitidos Remediar configurações de segurança Sim
Os serviços devem escutar apenas nas portas permitidas Restringir o acesso não autorizado à rede Sim
O uso de rede de anfitrião e portas deve ser restrito Restringir o acesso não autorizado à rede Sim
O uso de montagens de volume do pod HostPath deve ser restrito a uma lista conhecida Gerenciar acesso e permissões Sim
Contêiner com escalonamento de privilégios deve ser evitado Gerenciar acesso e permissões Não
Contêineres que compartilham namespaces de host confidenciais devem ser evitados Gerenciar acesso e permissões Não
O sistema de arquivos raiz imutável (somente leitura) deve ser imposto para contêineres Gerenciar acesso e permissões Não
Os clusters Kubernetes devem ser acessíveis somente por HTTPS Criptografar dados em trânsito Não
Os clusters Kubernetes devem desativar a montagem automática das credenciais da API Gerenciar acesso e permissões Não
Os clusters Kubernetes não devem usar o namespace padrão Implementação de melhores práticas de segurança Não
Os clusters do Kubernetes não deveriam conceder capacidades CAP_SYS_ADMIN Gerenciar acesso e permissões Não
Contentores privilegiados devem ser evitados Gerenciar acesso e permissões Não
A execução de contêineres como usuário raiz deve ser evitada Gerenciar acesso e permissões Não

Consulte recomendações para um cluster

Para ver as recomendações de endurecimento do plano de dados para um cluster específico:

  1. Inicie sessão no portal Azure.

  2. Vai ao Defender para a Cloud>Inventory.

  3. Defina o filtro de tipo de recurso para serviço Kubernetes e selecione Aplicar.

    Captura de ecrã de usar o filtro de tipo de recurso para selecionar o serviço Kubernetes.

  4. Selecione o cluster relevante.

  5. Consulte as recomendações disponíveis. As recomendações de endurecimento do plano de dados mostram o número de componentes Kubernetes afetados.

  6. Selecione uma recomendação para visualizar os recursos afetados.

    Captura de ecrã da seleção de uma recomendação na página de Saúde de Recursos.

  7. Selecione o separador Agir para rever as opções de remediação.

    Captura de ecrã do separador Tomar ação, usado para ver os passos de remediação para obter uma recomendação.

Configurar parâmetros de política

Algumas recomendações exigem que a configuração dos parâmetros seja eficaz. Por exemplo, a recomendação Imagens de contentores apenas devem ser implementadas a partir de registos confiáveis requer que defina uma lista de registos confiáveis.

Se os parâmetros necessários não forem configurados, os recursos são mostrados como pouco saudáveis.

Para configurar parâmetros de política:

  1. Inicie sessão no portal Azure.

  2. Vai a Microsoft Defender para Cloud>Definições de ambiente.

  3. Selecione a subscrição relevante.

  4. Selecione Políticas de segurança.

    Captura de ecrã da página de políticas de segurança.

  5. No separador Padrões, selecione o padrão de segurança relevante.

  6. Selecione o menu de 3 pontos da atribuição de políticas relevante e selecione Gerir efeito e parâmetros.

    Captura de ecrã de selecionar o menu de três pontos e depois selecionar Gerir efeitos e parâmetros.

  7. Atualize os valores dos parâmetros necessários.

    Captura de ecrã do painel de parâmetros.

  8. Selecione Guardar.

Aplicar políticas de endurecimento do plano de dados

Por defeito, as políticas avaliam os recursos em modo de auditoria. Para fazer cumprir uma política, defina o seu efeito para Deny.

Para fazer cumprir uma recomendação:

  1. Inicie sessão no portal Azure.

  2. Vá para Microsoft Defender para Nuvem>Recomendações.

  3. Pesquise e selecione a recomendação relevante de endurecimento de plano de dados.

  4. No separador Tomar Ação , selecione Negar.

    Captura de ecrã a mostrar a opção Negar para Azure Policy parâmetro.

  5. Defina o escopo.

  6. Selecione Alterar para recusar.

Aplicação da política de testes

Pode validar políticas de endurecimento de planos de dados implementando cargas de trabalho de teste.

  • Uma implementação compatível que cumpra os requisitos de fortalecimento do plano de dados
  • Uma implementação não conforme que viola múltiplas políticas

Implemente os seguintes ficheiros YAML de exemplo para verificar se cargas de trabalho compatíveis são implementadas com sucesso e se cargas de trabalho não compatíveis são sinalizadas ou bloqueadas, dependendo das definições de aplicação de políticas.

Exemplo de implementação conforme

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-healthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        container.apparmor.security.beta.kubernetes.io/redis: runtime/default
    spec:
      containers:
      - name: redis
        image: <customer-registry>.azurecr.io/redis:latest
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 100m
            memory: 250Mi
        securityContext:
          privileged: false
          readOnlyRootFilesystem: true
          allowPrivilegeEscalation: false
          runAsNonRoot: true
          runAsUser: 1000
---
apiVersion: v1
kind: Service
metadata:
  name: redis-healthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 80
    targetPort: 80

Exemplo de implementação não conforme

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-unhealthy-deployment
  labels:
    app: redis
spec:
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:      
      labels:
        app: redis
    spec:
      hostNetwork: true
      hostPID: true 
      hostIPC: true
      containers:
      - name: redis
        image: redis:latest
        ports:
        - containerPort: 9001
          hostPort: 9001
        securityContext:
          privileged: true
          readOnlyRootFilesystem: false
          allowPrivilegeEscalation: true
          runAsUser: 0
          capabilities:
            add:
              - NET_ADMIN
        volumeMounts:
        - mountPath: /test-pd
          name: test-volume
          readOnly: true
      volumes:
      - name: test-volume
        hostPath:
          # directory location on host
          path: /tmp
---
apiVersion: v1
kind: Service
metadata:
  name: redis-unhealthy-service
spec:
  type: LoadBalancer
  selector:
    app: redis
  ports:
  - port: 6001
    targetPort: 9001