Kubernetes 1.29: a perspectiva da segurança
Kubernetes 1.29 será o último lançamento da equipe Kubernetes para 2023. A nova versão tem 49 melhorias, com uma infinidade de beta e estáveis, além de um grande número de correções de bugs.
Como profissionais de segurança do Kubernetes, exploramos o lançamento para encontrar os recursos e melhorias mais notáveis centrados na segurança. Este blog foi feito sob medida para aqueles que têm um olhar atento à segurança, com o objetivo de detalhar como essas mudanças impactarão e melhorarão a postura de segurança dos clusters Kubernetes.
Compreender o significado destas melhorias requer não apenas uma compreensão do que são, mas também das suas implicações. Cada um fornece uma peça diferente do quebra-cabeça, contribuindo para uma visão mais ampla de um Kubernetes mais seguro, eficiente e confiável.
Melhorias gerais
O Kubernetes 1.29 traz uma coleção de melhorias gerais que, embora não sejam exclusivamente focadas na segurança, contribuem significativamente para a postura de segurança dos clusters Kubernetes, melhorando a confiabilidade, o gerenciamento de recursos e a eficiência operacional.
Ponto final de métricas de recursos ( estável )
Expor métricas de recursos de nós sobre recursos de primeira classe permite um gerenciamento de recursos mais eficiente. A segurança é reforçada, pois permite que os operadores detectem e evitem a escassez de recursos, o que pode ser um vetor para certos tipos de ataques. Ao garantir que os clusters operem de forma eficiente e que os recursos sejam alocados de forma adequada, as operadoras podem evitar cenários em que as cargas de trabalho críticas tenham poucos recursos e sejam potencialmente vulneráveis.
Ação do sono do ciclo de vida do pod ( Alfa )
A introdução de uma ação de suspensão para atrasar o encerramento dos pods é crucial para a depuração e pode ser benéfica para o encerramento normal dos serviços. Esse recurso permite que os administradores investiguem e capturem o estado dos pods antes de serem encerrados, o que pode ser útil para identificar e resolver problemas de segurança.
Com o novo recurso, você pode adicioná-lo à especificação do seu pod para atrasar o encerramento do pod:apiVersion: v1 kind: Pod metadata: name: my-debug-pod spec: containers: – name: my-container image: my-image ciclo de vida: preStop: sleep: duração: “60s” # Atraso o término em 60 segundos
Contêineres Sidecar ( Beta )
Sidecars são contêineres auxiliares que adicionam funcionalidade a um contêiner primário. Um melhor tratamento dos eventos do ciclo de vida dos contêineres secundários significa que o registro, o monitoramento e os agentes de segurança executados como sidecars podem ser gerenciados de maneira mais confiável; isto, por sua vez, garante que estes serviços críticos permaneçam operacionais durante todo o ciclo de vida da aplicação principal, aumentando a fiabilidade destes serviços de segurança.
Os contêineres secundários são definidos como parte dos contêineres init na especificação do pod com uma política de reinicialização específica de Always:apiVersion: v1 kind: Pod metadata: name: my-pod spec: initContainers: – name: proxy image: envoy:latest # Diferente de outros contêineres init, este contêiner init estará sempre em execução: restartPolicy: Always…
Nesta versão os contêineres do carro lateral agora estão desabilitados. Além disso, agora você pode encerrar sidecars na ordem inversa de sua inicialização.
Transição SPDY para WebSockets ( Alfa )
Esta mudança visa descontinuar o SPDY em favor dos WebSockets para comunicações do servidor API Kubernetes. WebSockets fornecem um protocolo mais moderno e escalonável que pode melhorar a confiabilidade geral e a capacidade de manutenção das comunicações do Kubernetes. Isso pode aumentar a segurança, garantindo que os protocolos de comunicação usados pelo Kubernetes sejam robustos e bem suportados.
Essas melhorias gerais contribuem para um ambiente Kubernetes mais seguro e eficiente. Ao melhorar a confiabilidade, o desempenho e o controle operacional subjacentes do Kubernetes, os recursos acima estabelecem as bases para uma plataforma de infraestrutura mais segura, capaz de hospedar cargas de trabalho sensíveis e críticas.
Melhorias de segurança
Com uma base sólida de melhorias gerais no Kubernetes 1.29, agora podemos nos concentrar nos recursos explicitamente projetados para aumentar a segurança do ecossistema Kubernetes. Essas melhorias abordam alguns dos aspectos mais críticos da segurança nativa da nuvem, como autenticação, autorização e gerenciamento seguro de carga de trabalho.
Configuração de autorização estruturada ( alfa )
A autorização no Kubernetes tem sido tradicionalmente gerenciada por meio de RBAC (controle de acesso baseado em funções), que pode se tornar complicado à medida que o número de funções e políticas aumenta. Essa mudança propõe um modelo de configuração mais estruturado, que melhora a gerenciabilidade e a rastreabilidade. Com uma configuração de autorização mais clara, as auditorias de segurança são simplificadas, facilitando a aplicação e verificação de políticas de acesso.
Com a configuração a seguir, é possível proteger CRDs no namespace kube-system contra exclusão:apiVersion: apiserver.config.k8s.io/v1alpha1 kind: AuthorizationConfiguration autorizadores: – type: Webhook name: crd-protector webhook:… failedPolicy: Negar… matchConditions: – expressão: has (request.resourceAttributes) – expressão: request.resourceAttributes.namespace == ‘kube-system’ – expressão: request.resourceAttributes.verb em [ ‘update’ , ‘delete’ , ‘deletecollection’ ] – tipo: Nó – tipo: RBAC
Melhorias no token da conta de serviço vinculada ( alfa )
Os tokens de conta de serviço representam um aspecto significativo da segurança do Kubernetes e são usados para autenticar cargas de trabalho no cluster. O Kubernetes 1.29 aumenta a segurança desses tokens vinculando-os a instâncias de pod específicas, evitando seu uso indevido em caso de exfiltração. Isso vincula o uso de um token de conta de serviço ao ciclo de vida do pod, reduzindo a janela de oportunidade para um invasor explorar um token roubado.
Redução de tokens de conta de serviço baseados em segredo ( beta )
Além do aprimoramento das “Melhorias no token de conta de serviço vinculado” e da redução do escopo dos tokens de conta de serviço, essa melhoria busca reduzir a dependência de tokens de conta de serviço baseados em segredo de longa duração. Ao limitar o uso desses tokens, a superfície de ataque potencial é significativamente diminuída.
Essa mudança se alinha com a tendência mais ampla do setor de credenciais just-in-time de curta duração que minimizam as chances de vazamento de tokens levando ao acesso não autorizado.
Garanta imagens secretas extraídas ( alfa )
As imagens de contêiner geralmente contêm componentes confidenciais, tornando crítica a segurança das operações de extração de imagens. O novo recurso alfa garante que as imagens sejam sempre extraídas usando os segredos do Kubernetes do pod que as utiliza. Isso é importante quando o Kubelet extrai uma imagem para um pod e outro pod está apontando para a mesma imagem. Até agora, a solicitação de imagem do segundo pod não precisava de autenticação, pois ainda usava as credenciais do primeiro. Isso pode levar a acesso não autorizado. Ao proteger o processo de extração de imagens, esse aprimoramento evita que invasores interceptem ou adulterem imagens de contêineres, o que é vital para manter a integridade das cargas de trabalho.
Suporte para Namespaces de Usuário ( Alfa )
Namespaces no Linux atuam como uma forma de virtualização, fornecendo isolamento entre vários aspectos do kernel. Este aprimoramento alfa oferece suporte a namespaces de usuário e melhora a segurança do Kubernetes, permitindo um controle mais granular sobre processos em contêineres. Isso significa melhor isolamento e separação de cargas de trabalho, o que, por sua vez, reduzirá o risco de ataques de escalonamento de privilégios . Você pode ativar um namespace de usuário para um pod definindo o hostUsers
campo:apiVersion: v1 kind: Pod metadata: name: my-pod especificação: hostUsers: contêineres falsos: – nome: comando shell: [“sleep”, “infinity”] imagem: debian
Configuração de autenticação estruturada ( alfa )
Semelhante à contraparte de autorização, o Kubernetes 1.29 fornece outro recurso alfa para configuração estruturada para mecanismos de autenticação. Esse aprimoramento oferece aos usuários uma abordagem mais sustentável e segura para gerenciar a autenticação, permitindo que os administradores implementem esquemas de autenticação complexos de forma mais eficiente e com menos espaço para erros.
Com a nova melhoria, agora é possível configurar vários provedores OIDC, clientes e regras de validação:apiVersion: apiserver.config.k8s.io/v1alpha1 kind: AuthenticationConfiguration jwt: – issuer: ClaimValidationRules: … – expression: ‘ claims.exp – Claims.nbf <= 86400′ mensagem: a vida útil total do token não deve exceder 24 horas ClaimMappings: nome de usuário: expressão: ‘claims.username + “:external-user”’ groups: expressão: ‘claims.roles.split(“,” )’ … userValidationRules: – expressão: “!user.username.startsWith(‘system:’)” mensagem: nome de usuário não pode ser usado sistema reservado: prefixo – expressão: “user.groups.all(group, !group.startsWith(‘system :’))” mensagem: grupos não podem usar sistema reservado: prefixo
Melhorias no KMS v2 ( estável )
O Kubernetes Key Management Service (KMS) é fundamental para o gerenciamento seguro e criptografia de segredos. Com a nova versão do Kubernetes, este se tornou um recurso estável que se concentra em melhorar a estrutura do plugin KMS, que é fundamental para o gerenciamento seguro de segredos. Essas melhorias garantem que os segredos do Kubernetes continuem sendo um método robusto e seguro para armazenar informações confidenciais.
Conclusão
A versão 1.29 do Kubernetes representa o compromisso da comunidade com a melhoria contínua, com diversas atualizações que melhoram a estabilidade e a eficiência. Do ponto de vista da segurança, destacamos como o lançamento contribui para o fortalecimento do Kubernetes, abordando ameaças emergentes no cenário.
Nossa exploração ressalta a natureza evolutiva do Kubernetes: cada versão é um avanço em termos de confiabilidade e desempenho para as diversas necessidades de sua base global de usuários. Para uma visão geral abrangente dos novos recursos da v1.29 e seu impacto, visite o blog oficial do projeto Kubernetes e o repositório GitHub .
Artigo originalmente publicado em Blog CNCF