Partilhar via


Proteger o plano de dados do Kubernetes

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

Gorjeta

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

Configurar a proteção da carga de trabalho

O Microsoft Defender for Cloud inclui um pacote de recomendações que estão disponíveis depois de instalar a Política do Azure para Kubernetes.

Pré-requisitos

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

Você pode habilitar a Política do Azure para Kubernetes de duas maneiras:

Habilite a Política do Azure para Kubernetes para todos os clusters atuais e futuros usando as configurações de plano/conector

Nota

Quando ativa esta definição, os pods do Azure Policy para Kubernetes são instalados no cluster. Isso aloca uma pequena quantidade de CPU e memória para os pods usarem. 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.

Habilitando para assinaturas do Azure ou locais

Quando você habilita o Microsoft Defender for Containers, a configuração "Política do Azure para Kubernetes" é habilitada por padrão para o Serviço Kubernetes do Azure e para clusters Kubernetes habilitados para Azure Arc na assinatura relevante. Se você desativar a configuração na configuração inicial, poderá ativá-la posteriormente manualmente.

Se você desabilitou as configurações da "Política do Azure para Kubernetes" no plano de contêineres, pode seguir as etapas abaixo para habilitá-la em todos os clusters em sua assinatura:

  1. Inicie sessão no portal do Azure.

  2. Navegue até as configurações do Microsoft Defender for Cloud>Environment.

  3. Selecione a subscrição relevante.

  4. Na página Planos do Defender, verifique se Contêineres está alternado para Ativado.

  5. Selecione Definições.

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

  6. Na página Configurações e Monitoramento, alterne a "Política do Azure para Kubernetes" para Ativado.

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

Habilitação para projetos GCP

Quando você habilita o Microsoft Defender for Containers em um conector GCP, a configuração "Azure Policy Extension for Azure Arc" é habilitada por padrão para o Google Kubernetes Engine no projeto relevante. Se você desativar a configuração na configuração inicial, poderá ativá-la posteriormente manualmente.

Se você desabilitou as configurações de "Extensão de Política do Azure para Azure Arc" no conector GCP, siga as etapas abaixo para habilitá-lo em seu conector GCP.

Implantar a Política do Azure para Kubernetes em clusters existentes

Você pode configurar manualmente a Política do Azure para Kubernetes em clusters Kubernetes existentes por meio da página 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, não é possível fazer integração em escala usando o conector, mas ele pode ser instalado em todos os clusters existentes ou em clusters específicos usando a recomendação Os clusters Kubernetes habilitados para Azure Arc devem ter a extensão de política do Azure para a extensão Kubernetes instalada.

Para implantar a Política do Azure para Kubernetes em clusters especificados:

  1. Na página de recomendações, 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 no local - "Azure Arc-enabled Kubernetes clusters should have the Azure policy extension for Kubernetes extension installed". Captura de tela mostrando a recomendação de clusters de serviço do Kubernetes do Azure.

      Gorjeta

      A recomendação está incluída em diferentes controles de segurança e não importa qual você selecionar na próxima etapa.

  2. Em qualquer um dos controles de segurança, selecione a recomendação para ver os recursos nos quais você pode instalar o complemento.

  3. Selecione o cluster relevante e selecione Corrigir.

    Captura de tela que mostra como selecionar o cluster a ser corrigido.

Visualizar e configurar o pacote de recomendações

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

Nota

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

Gorjeta

Algumas recomendações têm parâmetros que devem ser personalizados por meio da Política do Azure para usá-los de forma eficaz. Por exemplo, para se beneficiar da recomendação As imagens de contêiner devem ser implantadas apenas a partir de registros confiáveis, você terá que definir seus registros confiáveis. Se você não inserir os parâmetros necessários para as recomendações que exigem configuração, suas cargas de trabalho serão mostradas como não íntegras.

Nota

Os componentes da Microsoft, como o sensor Defender e o Azure Monitor Agent (AMA), são implantados no namespace kube-system por padrão. 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
Recursos Linux menos privilegiados devem ser aplicados para contêineres 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 portas e rede de host 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 as credenciais de API de montagem automática 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 Kubernetes não devem conceder recursos de segurança CAPSYSADMIN Gerenciar acesso e permissões Não
Devem ser evitados contentores privilegiados 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 do Azure.

  2. Navegue até as configurações do Microsoft Defender for Cloud>Environment.

  3. Selecione a subscrição relevante.

  4. No menu do Defender for Cloud, selecione Política de segurança.

  5. Selecione o trabalho relevante. A atribuição padrão é ASC default.

  6. Abra a guia Parâmetros e modifique os valores conforme necessário.

    Captura de tela mostrando onde modificar os parâmetros de uma das recomendações no pacote de proteção de proteção de proteção do plano de dados do Kubernetes.

  7. Selecione Rever + guardar.

  8. 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 o parâmetro Azure Policy.

    O painel para definir o escopo é aberto.

  2. Defina o escopo e selecione Alterar para negar.

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

  1. Abra a página de inventário de ativos do Defender for Cloud e defina o filtro de tipo de recurso como serviços do Kubernetes.

  2. Selecione um cluster para investigar e revisar as recomendações disponíveis para ele.

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. Para obter uma lista dos pods específicos, selecione o cluster e, em seguida, selecione Executar ação.

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

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

  • Uma delas é uma implantação saudável, compatível com o pacote 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 .yaml de exemplo de implantação íntegro

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 íntegro

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: