Configurar o endurecimento do plano de dados do Kubernetes no Defender para Nuvem

A proteção do plano de dados do Kubernetes ajuda a impor configurações seguras para cargas de trabalho em execução em seu cluster, como restringir contêineres privilegiados, impor limites de recursos e limitar o acesso à rede.

No Microsoft Defender para Nuvem, o endurecimento do plano de dados é implementado usando o Azure Policy for Kubernetes para avaliar e aplicar essas configurações. Azure Policy é implantado como parte de Defender para contêineres quando o provisionamento automático está habilitado.

Se o Azure Policy para Kubernetes estiver desativado nas configurações do plano Defender para Contêineres, você poderá implantá-la corrigindo a recomendação relevante. Você também pode implantar o Azure Policy manualmente usando o CLI do Azure para implantar componentes do Defender para Containers ou o Helm para implantar componentes do Defender para Containers se você desativou o provisionamento automático durante a habilitação ou excluiu clusters específicos do provisionamento automático.

Depois que o Azure Policy para Kubernetes for implantado, o Defender para Nuvem gerará recomendações de fortalecimento do plano de dados com base na configuração do cluster. Esta página mostra como examinar essas recomendações, configurar parâmetros de política e aplicá-las em seus clusters.

Pré-requisitos

Para começar, verifique se:

Habilitar Azure Policy para Kubernetes corrigindo recomendações

Se o Azure Policy for Kubernetes não estiver implantado ou desativado nas configurações do plano Defender for Containers, você pode instalá-lo corrigindo a recomendação que corresponde ao seu tipo de cluster no Defender para Nuvem.

  1. Entre no portal do Azure.

  2. Vá para Microsoft Defender para Nuvem>Recommendations.

  3. Pesquise a recomendação relevante:

    • Azure: Serviço de Kubernetes do Azure clusters devem ter o complemento Azure Policy para Kubernetes instalado
    • GCP: os clusters GKE devem ter a extensão Azure Policy instalada
    • Kubernetes habilitados para AWS/Arc: os clusters de Kubernetes habilitados para Azure Arc devem ter a extensão do Azure Policy instalada

    Screenshot mostrando a recomendação de clusters de serviço do Kubernetes Azure.

  4. Selecione uma recomendação.

  5. Na guia Executar ação , selecione Corrigir.

    Captura de tela de uma recomendação com o botão Corrigir realçado.

  6. Selecione Correção para corrigir os recursos selecionados.

  7. Repita para cada recomendação.

Recomendações de endurecimento do plano de dados

Depois de implantar Azure Policy para Kubernetes, Defender para Nuvem avalia a configuração do cluster e gera recomendações de proteção do plano de dados. Esse processo pode levar até 30 minutos.

Note

Microsoft componentes, como o sensor Defender, são implantados no namespace kube-system por padrão e não são marcados como não compatíveis. Componentes de terceiros instalados em outros namespaces podem ser sinalizados. Para excluir namespaces específicos, configure Azure exclusões de política.

A tabela a seguir lista as recomendações comuns de proteção do plano de dados:

Nome da recomendação Controle de segurança Configuração necessária
Deverão ser aplicados limites de memória e CPU ao contêiner Proteger aplicativos contra ataques de DDoS Yes
As imagens de contêiner deverão ser implantadas somente se forem de registros confiáveis Correção de vulnerabilidades Yes
Deverão ser aplicadas aos contêineres funcionalidades do Linux com privilégios mínimos Gerenciar acesso e permissões Yes
Os contêineres só devem usar perfis AppArmor permitidos Corrigir as configurações de segurança Yes
Os serviços devem escutar somente em portas permitidas Restringir acesso não autorizado à rede Yes
Usar redes e portas do host deverá ser restrito Restringir acesso não autorizado à rede Yes
O uso de volumes HostPath em pods deve ser restrito a uma lista conhecida Gerenciar acesso e permissões Yes
Contêiner com escalonamento de privilégios deve ser evitado Gerenciar acesso e permissões No
Os contêineres que compartilham namespaces de host confidenciais deverão ser evitados Gerenciar acesso e permissões No
Um sistema de arquivos raiz imutável (somente leitura) deverá ser aplicado aos contêineres Gerenciar acesso e permissões No
Os clusters do Kubernetes devem ser acessíveis somente via HTTPS Criptografar dados em trânsito No
Os clusters do Kubernetes devem desabilitar a montagem automática de credenciais da API Gerenciar acesso e permissões No
Os clusters do Kubernetes não devem usar o namespace padrão Implementar melhores práticas de segurança No
Os clusters do Kubernetes não devem conceder recursos de CAP_SYS_ADMIN Gerenciar acesso e permissões No
Os contêineres com privilégios deverão ser evitados Gerenciar acesso e permissões No
Executar contêineres como usuário raiz deverá ser evitado Gerenciar acesso e permissões No

Exibir recomendações para um cluster

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

  1. Entre no portal do Azure.

  2. Vá para Defender para Nuvem>Inventory.

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

    Captura de tela do uso do filtro de tipo de recurso para selecionar o serviço kubernetes.

  4. Selecione o cluster relevante.

  5. Examine as recomendações disponíveis. As recomendações de fortalecimento do plano de dados indicam o número de componentes do Kubernetes afetados.

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

    Captura de tela da seleção de uma recomendação na página Saúde do recurso.

  7. Selecione a guia Executar ação para examinar as opções de correção.

    Captura de tela da guia Executar ação, usada para exibir as etapas de correção de uma recomendação.

Configurar parâmetros de política

Algumas recomendações incluem parâmetros que limitam os recursos Kubernetes avaliados pela Azure Policy subjacente. Por exemplo, a política para o sistema de arquivos raiz Imutável (somente leitura) deve ser aplicada para contêineres que inclui os excludedContainersparâmetros, excludedImages, , e excludedNamespaces . Exclusões de contêineres correspondem aos nomes de contêineres. Exclusões de imagem suportam correspondência de prefixos quando o valor termina em *, como myregistry.azurecr.io/istio:*. Use um nome de imagem totalmente qualificado para evitar excluir involuntariamente uma imagem de um registro não confiável.

Outras recomendações exigem que a configuração dos parâmetros seja eficaz. Por exemplo, a recomendação de que imagens de contêiner devem ser implantadas apenas de registros confiáveis requer que você defina uma lista de registros confiáveis.

Se os parâmetros necessários não estiverem configurados, os recursos serão mostrados como com problemas.

Para configurar parâmetros de política:

  1. Entre no portal do Azure.

  2. Vá para Microsoft Defender para Nuvem>Environment settings.

  3. Selecione a assinatura relevante.

  4. Selecione políticas de segurança.

    Captura de tela da página Políticas de segurança.

  5. Na guia Padrões , selecione o padrão de segurança relevante.

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

    Captura de tela da seleção do menu de três ponto e, em seguida, selecionar Gerenciar efeito e parâmetros.

  7. Atualize os valores de parâmetro necessários.

    Captura de tela do painel de parâmetros.

  8. Selecione Salvar.

Aplicar políticas de endurecimento do plano de dados

Por padrão, as políticas avaliam os recursos no modo de auditoria. Para impor uma política, defina seu efeito como Negar.

Para impor uma recomendação:

  1. Entre no portal do Azure.

  2. Vá para Microsoft Defender para Nuvem>Recommendations.

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

  4. Na guia Executar ação , selecione Negar.

    Screenshot mostrando a opção Negar para Azure Policy parameter.

  5. Defina o escopo.

  6. Selecione Alterar para negar.

Testar a aplicação de política

Você pode validar as políticas de proteção do plano de dados implantando cargas de trabalho de teste.

  • Uma implantação em conformidade que atende aos requisitos de endurecimento do plano de dados
  • Uma implantação não compatível que viola várias políticas

Implante os seguintes arquivos YAML de exemplo para verificar se as cargas de trabalho em conformidade são implantadas com êxito e as cargas de trabalho não compatíveis são sinalizadas ou bloqueadas, dependendo das configurações de imposição de política.

Exemplo de implantação em conformidade

A implantação seguinte utiliza um registro de contêineres confiável, aplica limites de CPU e memória, e aplica um contexto de segurança restritivo que desabilita a escalonação de privilégios e roda como um usuário não root.

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 implantação não compatível

A implantação seguinte viola intencionalmente múltiplas políticas de endurecimento do plano de dados, incluindo a execução de um container privilegiado como root, habilitar a rede de host e namespaces compartilhados, e montar um volume de caminho de host.

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

Próxima etapa