Proteger a proteção do plano de dados do Kubernetes

Esta página descreve como usar o conjunto de recomendações de segurança do Microsoft Defender para Nuvem dedicado à proteção do plano de dados do Kubernetes.

Dica

Para obter uma lista das recomendações de segurança que podem aparecer para clusters e nós do Kubernetes, examine as recomendações de container.

Configurar a proteção de cargas de trabalho

Microsoft Defender para Nuvem inclui um pacote de recomendações que estão disponíveis depois de instalar o Azure Policy para Kubernetes.

Pré-requisitos

Habilitar a proteção do plano de dados do Kubernetes

Você pode habilitar o Azure Policy para Kubernetes de duas maneiras:

Habilitar Azure Policy para Kubernetes para todos os clusters atuais e futuros usando configurações de plano/conector

Observação

Quando você habilita essa configuração, as políticas do Azure para pods do Kubernetes são instaladas no cluster. Isso aloca uma pequena quantidade de CPU e memória para os pods usarem. Essa alocação pode atingir a capacidade máxima, mas não afeta o restante da CPU e da memória no recurso.

Observação

Não há suporte para habilitação para AWS por meio do conector devido a uma limitação no EKS que exige que o administrador do cluster adicione permissões para uma nova função IAM no próprio cluster.

Habilitar para assinaturas do Azure ou locais

Quando você habilita o Microsoft Defender para contêineres, a configuração "Azure Policy para Kubernetes" é habilitada por padrão para o Serviço de Kubernetes do Azure e para clusters do Kubernetes habilitados para o Azure Arc na assinatura relevante. Se você desabilitar a configuração inicial, poderá habilitá-la manualmente.

Se você desabilitou as configurações de "Azure Policy para Kubernetes" no plano de contêineres, siga as etapas abaixo para habilitá-lo em todos os clusters em sua assinatura:

  1. Entre no portal Azure.

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

  3. Selecione a assinatura relevante.

  4. Na página planos do Defender, verifique se a opção Contêineres está definida como Ativado.

  5. Escolha a opção Configurações.

    Screenshot mostrando o botão de configurações no plano Defender.

  6. Na página Configurações e Monitoramento, alterne a Azure Policy para Kubernetes para Ativado.

    Captura de tela que mostra as alternâncias usadas para habilitar ou desabilitar as extensões.

Habilitar para projetos GCP

Quando você ativa o Microsoft Defender para Contêineres em um conector GCP, a configuração "Extensão Azure Policy para Azure Arc" é habilitada por padrão para o Google Kubernetes Engine no projeto relevante. Se você desabilitar a configuração inicial, poderá habilitá-la manualmente.

Se você desabilitou as configurações de "Extensão Azure Policy para Azure Arc" no conector GCP, poderá seguir as etapas abaixo para abilizá-la no conector GCP.

Implantar Azure Policy para Kubernetes em clusters existentes

Você pode configurar manualmente o Azure Policy para Kubernetes em clusters Kubernetes existentes através da página de Recomendações. Depois de habilitadas, as recomendações de proteção ficam disponíveis (algumas das recomendações exigem que outra configuração funcione).

Observação

Para a AWS, não há suporte para integração em escala usando o conector. No entanto, você pode instalar Azure Policy para Kubernetes em todos os clusters existentes ou em clusters específicos usando a recomendação Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed.

Para implantar o Azure Policy do Kubernetes em clusters especificados:

  1. Entre no portal Azure.

  2. Acesse Microsoft Defender para Nuvem>General>Recommendations.

  3. Pesquise a recomendação relevante:

    • Azure -"Serviço de Kubernetes do Azure clusters should have the Azure Policy add-on for Kubernetes installed"
    • GCP - "GKE clusters should have the Azure Policy extension".
    • AWS e no local - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed".

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

  4. Selecione uma recomendação encontrada.

  5. Selecione Corrigir.

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

  6. Repita para cada recomendação adicional.

Exibir e configurar o pacote de recomendações

Aproximadamente 30 minutos após a conclusão da instalação do Azure Policy para o Kubernetes, o Defender para Nuvem mostra o status de integridade dos clusters para as seguintes recomendações, cada uma no controle de segurança relevante, conforme mostrado.

Observação

Se você estiver instalando o Azure Policy para Kubernetes pela primeira vez, essas recomendações aparecerão como novas adições na lista de recomendações.

Dica

Algumas recomendações têm parâmetros que devem ser personalizados por meio de Azure Policy para usá-los efetivamente. Por exemplo, para se beneficiar da recomendação imagens de contêiner devem ser implantadas somente de registros confiáveis, você precisa definir seus registros confiáveis. Se você não inserir os parâmetros necessários para as recomendações que exigem configuração, as cargas de trabalho serão indicadas como não íntegras.

Observação

Componentes da Microsoft, como o sensor do Defender, são implantados no namespace kube-system por padrão. Essa configuração garante que eles não estejam marcados como não compatíveis nas recomendações do plano de dados. No entanto, as ferramentas de fornecedor de terceiros instaladas em um namespace diferente podem ser sinalizadas como não compatíveis. Para excluir fornecedores terceirizados dessas recomendações, você pode adicionar seus namespaces à lista de exclusão.

Nome da recomendação Controle de segurança Configuração necessária
Os limites de memória e de CPU dos contêineres devem ser impostos Proteger aplicativos contra ataques de DDoS Sim
As imagens de contêiner devem ser implantadas apenas de registros confiáveis Corrigir vulnerabilidades Sim
Deverão ser aplicadas aos contêineres as funcionalidades do Linux com privilégios mínimos Gerenciar acesso e permissões Sim
Os contêineres só devem usar perfis AppArmor permitidos Corrigir as configurações de segurança Sim
Os serviços deverão escutar somente nas portas permitidas Restringir acesso não autorizado à rede Sim
O uso de rede e portas do host deve ser restrito Restringir acesso não autorizado à rede Sim
O uso de volumes HostPath em pods deve ser restrito a uma lista conhecida Gerenciar acesso e permissões Sim
Os contêineres com elevação de privilégio devem ser evitados Gerenciar acesso e permissões Não
Os contêineres que compartilharem namespaces de host confidenciais devem ser evitados Gerenciar acesso e permissões Não
Um sistema de arquivo raiz imutável (somente leitura) deve ser aplicado aos contêineres Gerenciar acesso e permissões Não
Os clusters do Kubernetes devem ser acessíveis somente via HTTPS Criptografar dados em trânsito Não
Os clusters do Kubernetes devem desabilitar as credenciais de API montagem automática Gerenciar acesso e permissões Não
Os clusters do Kubernetes não devem usar o namespace padrão Implementar melhores práticas de segurança Não
Os clusters Kubernetes não devem conceder funcionalidades de segurança CAPSYSADMIN Gerenciar acesso e permissões Não
Os contêineres com privilégios 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

Para recomendações com parâmetros que precisam ser personalizados, defina os parâmetros:

Para definir os parâmetros:

  1. Entre no portal Azure.

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

  3. Selecione a assinatura relevante.

  4. No menu de navegação, selecione Políticas de segurança.

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

  5. Na guia Padrões , pesquise o padrão de segurança apropriado.

  6. Selecione o menu de três ponto do padrão de segurança e selecione Gerenciar.

    Captura de tela da seleção da opção Gerenciar no menu de três pontos da recomendação.

  7. 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.

  8. Modifique os valores conforme necessário.

    Captura de tela do painel de parâmetros.

  9. Clique em Salvar.

Para impor uma das recomendações:

  1. Abra a página de detalhes da recomendação e selecione Negar:

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

    O painel para definir o escopo abrirá.

  2. Defina o escopo e selecione Alterar para negar.

Para ver quais recomendações se aplicam aos seus clusters:

  1. Entre no portal Azure.

  2. Vá para Defender para Nuvem>Inventory.

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

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

  4. Selecione um cluster para investigar.

  5. Examine as recomendações disponíveis para ele. Ao exibir uma recomendação do conjunto de proteção de cargas de trabalho, o número de pods afetados ("Componentes Kubernetes") será listado ao lado do cluster.

  6. Opcional: para ver uma lista dos pods específicos, selecione a recomendação.

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

  7. e, em seguida, selecione Executar ação.

Captura de tela que mostra onde exibir os pods afetados para uma recomendação do Kubernetes.

Para testar a imposição, use as duas implantações do Kubernetes abaixo:

  • Uma é para uma implantação íntegra, em conformidade com o pacote de recomendações de proteção de cargas de trabalho.

  • A outra é para uma implantação não íntegra, que não está em conformidade com nenhuma das recomendações.

Implante os arquivos .yaml de exemplo no estado em que se encontram ou use-os como referência para corrigir sua própria carga de trabalho.

Arquivo .yaml de exemplo de implantação íntegra

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

Arquivo .yaml de exemplo de implantação não íntegra

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óximas etapas

Neste artigo, você aprendeu a configurar a proteção do plano de dados do Kubernetes.

Para ver materiais relacionados, confira as seguintes páginas: