Proteger o endurecimento do plano de dados do Kubernetes

Esta página descreve como usar o conjunto de recomendações de segurança do Microsoft Defender para a Cloud dedicado ao endurecimento do plano de dados Kubernetes.

Gorjeta

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

Configura a proteção do seu workload

Microsoft Defender para a Cloud inclui um conjunto de recomendações que estão disponíveis depois de instalares o Azure Policy para Kubernetes.

Pré-requisitos

Habilitar o endurecimento do plano de dados do Kubernetes

Pode ativar o Azure Policy for Kubernetes de duas formas:

Ative o Azure Policy for Kubernetes para todos os clusters atuais e futuros usando as definições plan/connector

Nota

Quando ativas esta definição, os pods do Azure Policy for Kubernetes estão instalados no cluster. Isso aloca uma pequena quantidade de CPU e memória para uso dos pods. Esta alocação pode atingir a capacidade máxima, mas não afeta o resto da CPU e da memória no recurso.

Nota

A ativação para a AWS por meio do conector não é suportada devido a uma limitação no EKS que exige que o administrador do cluster adicione permissões para uma nova função do IAM no próprio cluster.

Ativar para subscrições do Azure ou on-premises

Quando ativas o Microsoft Defender for Containers, a definição "Azure Policy for Kubernetes" está ativada por padrão para o Azure Kubernetes Service e para clusters Kubernetes com Azure Arc na subscrição relevante. Se você desativar a configuração na configuração inicial, poderá ativá-la posteriormente manualmente.

Se desativou as definições "Azure Policy for Kubernetes" no plano de contentores, pode seguir os passos abaixo para a ativar em todos os clusters da sua subscrição:

  1. Inicie sessão no portal Azure.

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

  3. Selecione a subscrição relevante.

  4. Na página de planos do Defender, certifique-se de que Containers está definido em On.

  5. Selecione Definições.

    Captura de ecrã a mostrar o botão de definições no plano Defender.

  6. Na página Definições e Monitorização, alterne a Política da Azure para Kubernetes para Ativado.

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

Habilitar para projetos GCP

Quando ativa o Microsoft Defender for Containers num conector GCP, a definição "Azure Policy Extension for Azure Arc" é ativada automaticamente para o Google Kubernetes Engine no projeto em questão. Se você desativar a configuração na configuração inicial, poderá ativá-la posteriormente manualmente.

Se desativaste as definições da "Extensão de Política Azure para o Azure Arc" no conector GCP, poderás seguir os passos abaixo para ativá-lo no teu conector GCP.

Implementar Políticas do Azure para Kubernetes em clusters existentes

Pode configurar manualmente a Azure Policy for Kubernetes em clusters Kubernetes existentes através da página de Recomendações. Uma vez habilitadas, as recomendações de proteção ficam disponíveis (algumas das recomendações exigem outra configuração para funcionar).

Nota

Para a AWS, a integração em larga escala usando o conector não é suportada. No entanto, 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 implementar o Azure Policy do Kubernetes em clusters especificados:

  1. Inicie sessão no portal Azure.

  2. Vá a Microsoft Defender para a Cloud>Geral>Recomendações.

  3. Procure a recomendação relevante:

    • Azure -"Azure Kubernetes Service clusters should have the Azure Policy add-on for Kubernetes installed"
    • GCP - "GKE clusters should have the Azure Policy extension".
    • AWS e On-premises - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed".

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

  4. Escolha uma recomendação encontrada.

  5. Selecione Corrigir.

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

  6. Repita para cada recomendação adicional.

Visualizar e configurar o pacote de recomendações

Cerca de 30 minutos após a conclusão da instalação da Azure Policy for Kubernetes, o Defender para a Cloud apresenta o estado de saúde dos clusters para as seguintes recomendações, cada uma no respetivo controlo de segurança, conforme mostrado:

Nota

Se está a instalar a Azure Policy para Kubernetes pela primeira vez, estas recomendações aparecem como novas adições na lista de recomendações.

Gorjeta

Algumas recomendações têm parâmetros que devem ser personalizados via Azure Policy para serem usados de forma eficaz. Por exemplo, para se beneficiar da recomendação As imagens de contêiner devem ser implantadas somente a partir de registros confiáveis, você precisa definir seus registros confiáveis. Se não introduzires os parâmetros necessários para as recomendações que exigem configuração, as tuas cargas de trabalho serão mostradas como não saudáveis.

Nota

Componentes da Microsoft, como o sensor Defender, são implementados por defeito no namespace do sistema kube. Essa configuração garante que eles não sejam marcados como não compatíveis nas recomendações do plano de dados. No entanto, ferramentas de fornecedores de terceiros instaladas em um namespace diferente podem ser sinalizadas como não compatíveis. Para excluir fornecedores de terceiros dessas recomendações, você pode adicionar seu namespace à lista de exclusão.

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 contêiner devem ser implantadas somente a partir de registros 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 de Kubernetes não devem conceder capacidades de segurança CAPSYSADMIN 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

Para recomendações com parâmetros que precisam ser personalizados, você precisa definir os parâmetros:

Para definir os parâmetros:

  1. Inicie sessão no portal Azure.

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

  3. Selecione a subscrição relevante.

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

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

  5. Na aba Normas, pesquisa o padrão de segurança apropriado.

  6. Selecione o menu de 3 pontos do padrão de segurança e selecione Gerir.

    Captura de ecrã ao selecionar Gerir no menu de três pontos da recomendação.

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

  8. Modificar os valores conforme necessário.

    Captura de ecrã do painel de parâmetros.

  9. Selecione Guardar.

Para fazer cumprir qualquer uma das recomendações:

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

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

    O painel para definir o escopo abre-se.

  2. Defina o escopo e selecione Alterar para negar.

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

  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ços Kubernetes e selecione Aplicar.

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

  4. Selecione um cluster para investigar.

  5. Veja as recomendações disponíveis para isso. Quando você visualiza uma recomendação do conjunto de proteção de carga de trabalho, o número de pods afetados ("componentes do Kubernetes") é listado ao lado do cluster.

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

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

  7. e depois seleciona Executar ação.

Captura de tela mostrando onde visualizar os pods afetados para uma recomendação do Kubernetes.

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

  • Uma delas é uma implantação saudável, compatível com o conjunto de recomendações de proteção da carga de trabalho.

  • A outra é para uma implantação não íntegra, não compatível com qualquer uma 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 de exemplo .yaml de implantação saudável

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 arquivo .yaml de implementação insalubre

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óximos passos

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

Para material relacionado, consulte as seguintes páginas: