Entenda os CNAPPs com o nosso guia
Entenda os CNAPPs com o nosso guia
Os controladores de admissão funcionam como guardiões dos ambientes Kubernetes (K8s), aumentando a segurança ao executar varredura nas solicitações enviadas ao servidor de API. Ao impor conformidade crítica e proteger contra ameaças potenciais, esses controladores atuam como guardiões do seu cluster Kubernetes — uma necessidade à medida que novas ameaças a aplicações em containers evoluem.
Neste artigo, vamos nos aprofundar no mundo dos controladores de admissão do Kubernetes, discutindo sua importância, mecanismos internos, recursos de varredura de imagens e significância na postura de segurança dos clusters do Kubernetes.
O que é um controlador de admissão do Kubernetes?
Os controladores de admissão do Kubernetes monitoram e regulam solicitações direcionadas ao servidor da API do Kubernetes. Conforme mostrado abaixo, após a autenticação e a autorização terem sido concluídas, mas antes que um objeto seja armazenado persistentemente, esses plugins atuam como intermediários e interceptam solicitações:
Figura 1: Controladores de admissão (Fonte: Blog do Kubernetes)Os controladores de admissão podem admitir, rejeitar ou modificar solicitações com base em certas condições ou políticas predefinidas. Existem dois tipos principais de controladores de admissão:
- Validação de controladores de admissão: responsáveis por validar os objetos nas solicitações, esses controladores de admissão examinam cada solicitação e verificam se ela está em conformidade com os requisitos e regras específicas definidas no controlador.
- Controladores de admissão mutantes: capazes de modificar objetos mediante solicitação e alterar suas configurações antes de armazená-los, os controladores de admissão mutantes permitem o gerenciamento automático e permitem que você injete parâmetros do sistema de acordo com regras e políticas predefinidas.
Principais capacidades dos controladores de admissão
Os controladores de admissão são parte integrante da arquitetura do Kubernetes, operando silenciosamente em segundo plano e protegendo os sistemas aplicando as regras e políticas da sua organização. Ao gerenciar ambientes Kubernetes de grande escala, garantir a segurança e impor a conformidade pode se tornar complexo. Felizmente, os controladores de admissão do K8s podem ajudar das seguintes maneiras:
1. Melhorando a segurança em clusters Kubernetes
Os controladores podem aplicar políticas que limitam as operações realizadas em um cluster, reduzindo assim potenciais vetores de ataque. Por exemplo, eles podem impedir que usuários executem containers privilegiados ou usem redes de host e sistemas de arquivos, que são vetores comuns de ataques.
2. Aplicando a conformidade
Os controladores de admissão são um meio essencial de aplicar políticas em toda a organização: eles podem aplicar convenções de nomenclatura, limites de recursos e políticas de rede. Eles também podem impedir a implementação de pods que não estejam em conformidade com essas regras, garantindo consistência e adesão às melhores práticas.
3. Garantindo a gestão de recursos e a otimização da alocação
O gerenciamento de recursos é uma parte crucial do gerenciamento de um cluster Kubernetes. Os controladores de admissão podem impor cotas e limites na CPU, memória e armazenamento, evitando um cenário em que containers individuais utilizam mais recursos de cluster do que lhes é atribuído. Isso ajuda a manter a estabilidade e a confiabilidade do sistema e promove a utilização eficiente de recursos, o que também leva à otimização de custos.
4. Prevenindo potenciais exploits de escape de containers do Kubernetes
Um exploit de escape de container é um problema de segurança significativo em clusters do Kubernetes que ocorre quando um invasor invade um container e obtém acesso não autorizado ao sistema host. Os controladores de admissão podem ajudar a prevenir esses exploits aplicando contextos de segurança rigorosos e limitando os privilégios do container.
Saiba mais
Aprenda as melhores práticas para manter seu ambiente Kubernetes protegido contra adversários.
A mecânica dos controladores de admissão
Entender o funcionamento interno dos controladores de admissão é crucial para aproveitar todo o seu potencial. Vamos analisar as maneiras como os controladores de admissão interagem com outros componentes do Kubernetes:
Pedidos e respostas
Os controladores de admissão revisam as solicitações recebidas no servidor de API, inspecionando o objeto que a solicitação está tentando armazenar no sistema. Dependendo se o controlador é um controlador de validação ou mutação, ele validará a solicitação em relação a um conjunto de regras (validação) ou modificará o objeto na solicitação (mutação). O controlador então admite ou nega a solicitação, retornando uma resposta ao usuário. Se a solicitação for negada, o usuário receberá uma mensagem explicando o motivo da rejeição.
Cadeia de múltiplos controladores de admissão
Os controladores de admissão formam uma cadeia e são chamados em ordem. A ordem é crítica aqui, especialmente quando controladores de mutação e validação são configurados no mesmo cluster. Em geral, os controladores mutantes são chamados antes dos validadores. Dessa forma, uma solicitação pode ser modificada para atender aos critérios antes da validação. Caso um controlador nessa sequência negue a solicitação, toda a operação é interrompida e um erro é enviado ao usuário. Esse mecanismo garante que todas as regras definidas sejam verificadas antes que uma solicitação seja aceita.
Controladores de admissão integrados
O Kubernetes vem com vários controladores de admissão integrados. Por exemplo, o controlador NamespaceLifecycle rejeita todas as solicitações enviadas a objetos dentro de um namespace que estão passando por encerramento. Como o nome sugere, o controlador ResourceQuota aplica cotas que limitam o uso de recursos por namespace, e o controlador PodSecurityPolicy aplica restrições de segurança com base no contexto de segurança solicitado. Para uma compreensão mais completa dos controladores de admissão integrados, explore o que já é fornecido pronto para uso e como esses controladores automatizam as operações do Kubernetes.
Varredura de imagens com controladores de admissão
Imagens do container são os blocos de construção de qualquer aplicação em container, mas essas imagens podem conter vulnerabilidades no código da aplicação ou em suas bibliotecas de sistema subjacentes. Se não forem tratadas, essas vulnerabilidades podem ser exploradas, levando a acesso não autorizado, vazamento de dados ou até mesmo tomada de controle do sistema. É por isso que executar varredura nas imagens do container em busca de vulnerabilidades conhecidas não é apenas uma prática recomendada — é uma necessidade.
Ferramentas de varredura de imagens como Clair, Anchore e a plataforma CrowdStrike Falcon® podem ser integradas aos controladores de admissão do Kubernetes para aplicar políticas de varredura de imagens. Essas ferramentas podem executar varredura nas imagens de containers em bancos de dados de vulnerabilidades para identificar vulnerabilidades conhecidas. Um controlador de admissão pode ser configurado para integrar-se a essas ferramentas e impedir a implementação de imagens que tenham vulnerabilidades ou que não passaram por uma varredura.
Em outras palavras, o controlador de admissão rejeita a solicitação de implementação se a imagem não for segura e impede que o container vulnerável seja executado em um cluster. Isso fornece uma maneira automatizada e aplicada de garantir que todas as imagens do container implementadas no cluster sejam seguras e compatíveis com as políticas de segurança.
Desenvolvendo controladores de admissão personalizados
Embora o Kubernetes venha equipado com vários controladores de admissão integrados, pode haver cenários em que você precise aplicar regras exclusivas para sua organização, como convenções de nomenclatura específicas, políticas de uso de recursos ou políticas de segurança de pod. Nesses casos, o Kubernetes permite que você crie seu próprio controlador e o integre dinamicamente aos clusters em execução.
Melhores práticas para criar um controlador de admissão
Criar um controlador de admissão envolve escrever um servidor webhook que responde às solicitações do servidor de API. Os servidores webhook respondem especificamente às solicitações de admissão provenientes do servidor da API do Kubernetes. O servidor webhook pode ser encarregado de validação, mutação ou ambos. Ao escrever para o controlador de admissões, siga estas práticas recomendadas:
1. Defina regras claras
Certifique-se de que as regras aplicadas pelo controlador sejam claras, bem documentadas e compartilhadas com todos os membros da equipe que interagem com seu cluster Kubernetes.
2. Lide com os erros com elegância
Seu controlador de admissão deve lidar com erros com elegância e não bloquear as operações do servidor da API do Kubernetes. Além disso, ele deve retornar mensagens de erro significativas. Isso ajuda os usuários a entender por que sua solicitação foi negada.
3. Proteja seu webhook
Os webhooks recebem informações confidenciais do servidor de API, portanto, devem ser protegidos com TLS. Com um webhook seguro, o servidor de API deve verificar o certificado do webhook antes de enviar qualquer solicitação.
4. Projete para o desempenho
Chamadas de webhook adicionam latência às solicitações do servidor de API. Projete seu controlador de admissão para ter alto desempenho, minimizando o tempo que seu webhook leva para manipular uma solicitação.
5. Teste extensivamente
Teste o controlador de admissão com vários tipos de solicitações para garantir que ele se comporte conforme o esperado. O processo de teste também deve incluir a verificação de compatibilidade com as versões do Kubernetes que você está usando.
Monitoramento e registro para controladores de admissão
O monitoramento e o registro do Kubernetes fornecem visibilidade essencial, ajudando a esclarecer as decisões tomadas pelos seus controladores de admissão, identificar quaisquer problemas, melhorar a postura de segurança de um cluster e garantir que as políticas estejam sendo aplicadas de forma correta e consistente.
Embora o Kubernetes forneça registro integrado de decisões do controlador de admissão por meio de seu servidor de API, esses registros podem ser longos e difíceis de analisar. Felizmente, as ferramentas de gerenciamento de log podem dar sentido a esses logs coletando, filtrando e analisando-os. Por exemplo, ferramentas como Fluentd ou Logstash podem coletar logs de clusters do Kubernetes e encaminhá-los para uma solução centralizada de gerenciamento de logs, como o Elasticsearch ou um serviço de gerenciamento de logs baseado em nuvem. Então o Kibana, ou uma ferramenta similar, pode analisar e visualizar os dados do log.
Nos seus logs, procure por objetos AdmissionReview contendo informações sobre decisões do controlador de admissão. Fique de olho nos tempos de resposta do servidor da API para entender seu impacto no desempenho. Também é uma boa ideia procurar padrões de rejeições de solicitações, o que pode indicar um controlador de admissão mal configurado ou um mal-entendido das regras entre seus usuários. Fique atento a mudanças repentinas no volume ou na natureza das solicitações, pois elas podem sugerir um incidente de segurança.
Saiba mais
Explore a série completa de Guias de Logs do Kubernetes:
- Parte 1: Conceitos básicos
- Parte 2: Conceitos avançados
- Parte 3: Centralizando os logs do Kubernetes
- Parte 4: Logs centralizados em um cluster Kubernetes
Aproveitando ao máximo os controladores de admissão K8s
O poder dos controladores de admissão não está apenas na segurança e conformidade que eles fornecem imediatamente, mas em seu potencial de personalização e extensão. Incentivamos todos os proprietários de clusters do Kubernetes a se aprofundarem neste tópico e considerarem como aproveitar melhor os controladores de admissão em seus próprios ambientes.
O controlador de admissão CrowdStrike Kubernetes fornece políticas predefinidas e facilita o gerenciamento de containers, eliminando a necessidade de os usuários escreverem regras de registro brutas e evitando que containers mal configurados sejam implementados.
Proteja o ciclo de vida do container e gerencie a segurança do Kubernetes com a CrowdStrike
O CrowdStrike Falcon® Cloud Security for Containers reduz as complexidades da segurança do Kubernetes com uma única interface fácil de usar e oferece o único controlador de admissão do Kubernetes capaz de identificar e eliminar containers vulneráveis e impedir que sejam implementados novamente.
Melhore sua postura de segurança e a resiliência de seus clusters Kubernetes com o CrowdStrike Falcon® Cloud Security. Uma plataforma de segurança robusta, a plataforma CrowdStrike Falcon oferece detecção de vulnerabilidades e ameaças, resposta a incidentes (IR), proteção de identidade, observabilidade e segurança na nuvem. Use-o em conjunto com controladores de admissão para ajudar a proteger seus ambientes Kubernetes.