Nota perev. : Este não é o primeiro artigo com recomendações gerais de segurança sobre o Kubernetes que traduzimos em nosso blog. No entanto, sua relevância - pelo menos como um lembrete de coisas simples e importantes que não deveriam ser ignoradas por falta de tempo - só é confirmada pelos eventos recentes mencionados pelo autor no início do material. A propósito, o autor é Connor Gilbert, gerente de produto da StackRox, uma plataforma pronta para proteger aplicativos implantados nos clusters Kubernetes. Então, aqui está o que ele aconselha os leitores do blog do CNCF ...
Nota : Para tornar o artigo mais informativo, para alguns dos termos / métodos mencionados pelo autor, adicionamos links à documentação relevante.
No mês passado, o Kubernetes, o sistema de orquestração de contêineres mais popular do mundo,
descobriu a primeira grande vulnerabilidade de segurança que atingiu o ecossistema do projeto. Vulnerabilidade
CVE-2018-1002105 permite que invasores comprometam clusters por meio do servidor da API Kubernetes, que permite que códigos maliciosos sejam executados para instalar malware, etc.
No início do ano, a configuração incorreta do painel de controle do Kubernetes levou ao fato de que os recursos da Tesla
tinham um software de mineração de criptomoeda
instalado . Em seguida, os atacantes aproveitaram o fato de que um dos painéis do Kubernetes não estava protegido por senha, o que lhes permitiu acessar um dos pods com uma conta para acessar a infraestrutura maior da Tesla na AWS.
As organizações que aceleram a implementação de contêineres e sua orquestração também precisam tomar medidas obrigatórias para proteger uma parte tão crítica de sua infraestrutura. Abaixo estão nove das melhores práticas de segurança do Kubernetes com base nos dados do cliente: siga-as para proteger melhor sua infraestrutura.
1. Atualize para a versão mais recente
Em cada versão trimestral do [Kubernetes], existem não apenas correções de bugs, mas também novos recursos de segurança: para tirar proveito deles, recomendamos trabalhar com a versão estável mais recente.
O uso da versão mais recente com as correções mais recentes será especialmente relevante à luz da recente descoberta do CVE-2018-1002105. As atualizações e o suporte podem ser mais difíceis do que os novos recursos oferecidos nas versões, portanto, planeje suas atualizações pelo menos uma vez por trimestre.
Atualizações significativamente simplificadas podem usar os provedores de soluções Kubernetes gerenciadas.
2. Habilite o controle de acesso baseado em função (RBAC)
Use o
RBAC (Controle de Acesso Baseado em Função) para controlar quem pode acessar a API do Kubernetes e quais direitos eles têm. Normalmente, o RBAC é ativado por padrão no Kubernetes versão 1.6 e superior (ou posterior para alguns provedores), mas se você foi atualizado desde então e não alterou a configuração, verifique novamente suas configurações. Devido ao mecanismo pelo qual o trabalho dos controladores de autorização no Kubernetes é combinado
(para a sequência geral de operações, leia o artigo " O que acontece no Kubernetes quando a execução do kubectl é iniciada? Parte 1 " - tradução aproximada ) , você deve ter o RBAC e o ABAC herdado ativados (Controle de acesso baseado em atributos).
No entanto, ativar o RBAC não é suficiente - ele ainda precisa ser usado com eficiência. No caso geral, os direitos de todo o cluster
(em todo o cluster
) devem ser evitados, dando preferência aos direitos em determinados namespaces. Evite conceder privilégios de administrador de cluster a alguém, mesmo para depuração - é muito mais seguro conceder direitos somente quando necessário e de tempos em tempos.
Você pode ver funções de cluster e simplesmente funções com os
kubectl get clusterrolebinding
ou
kubectl get rolebinding --all-namespaces
. E, assim, você pode verificar rapidamente a quem a função de
cluster-admin
está
cluster-admin
(neste exemplo, é apenas para o grupo de
masters
):
$ kubectl describe clusterrolebinding cluster-admin Name: cluster-admin Labels: kubernetes.io/boostrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate=true Role: Kind: ClusterRole Name: cluster-admin Subjects: Kind Name ---- ---- Group system:masters Namespace ---------
Se o aplicativo exigir acesso à API do Kubernetes, crie contas de serviço separadas
(leia mais sobre elas neste material - aprox. Transl. ) E conceda a elas o conjunto mínimo de direitos exigidos para cada caso de uso. Essa abordagem é muito melhor do que conceder muitos privilégios à conta padrão no espaço para nome.
A maioria dos aplicativos não precisa acessar a API:
você pode configurar automountServiceAccountToken
como
false
para eles.
3. Use namespaces para definir limites de segurança
Criar espaços para nome separados é importante como o primeiro nível de isolamento de componentes. É muito mais fácil ajustar as configurações de segurança - por exemplo, políticas de rede - quando diferentes tipos de cargas de trabalho são implantados em espaços para nome separados.
Sua equipe usa espaços de nome com eficiência? Verifique a lista deles para não-padrão (não criado por padrão):
$ kubectl get ns NAME STATUS AGE default Active 16m kube-public Active 16m kube-system Active 16m
4. Separe cargas de trabalho confidenciais.
Uma boa prática para limitar as conseqüências potenciais do comprometimento é executar cargas de trabalho com dados confidenciais em um conjunto dedicado de máquinas. Essa abordagem reduz o risco de um aplicativo menos seguro acessar o aplicativo com dados confidenciais em execução no mesmo ambiente executável de contêiner ou no mesmo host. Por exemplo, um kubelet de um nó comprometido geralmente tem acesso ao conteúdo de segredos apenas se eles estiverem montados em pods que estão programados para serem executados no mesmo nó. Se segredos importantes puderem ser encontrados em vários nós do cluster, o invasor terá mais oportunidades de obtê-los.
A separação pode ser feita usando
conjuntos de nós -
conjuntos de nós (na nuvem ou no local) - bem como mecanismos de controle do Kubernetes, como espaços para nome,
manchas, tolerâncias e outros.
5. Proteger o acesso aos metadados do serviço em nuvem
Metadados sensíveis - por exemplo, credenciais administrativas do kubelet - podem ser roubados ou usados com intenção maliciosa para escalar privilégios em um cluster. Por exemplo, uma
descoberta recente na recompensa de bugs do Shopify mostrou em detalhes como um usuário pode exceder a autoridade ao receber metadados de um provedor de nuvem usando dados gerados especialmente para um dos microsserviços.
No GKE, a função de
ocultação de metadados ,
ocultação de metadados , altera o mecanismo para implantar o cluster de maneira a evitar esse problema, e recomendamos usá-lo até que uma solução permanente seja implementada.
Contramedidas semelhantes podem ser necessárias em outros ambientes.
6. Crie e defina políticas de rede de cluster
Diretivas de Rede - Diretivas de
Rede - permitem controlar o acesso à rede de e para aplicativos em contêiner. Para usá-los, você deve ter um provedor de rede com suporte para esse recurso; para provedores de soluções Kubernetes gerenciados como o Google Kubernetes Engine (GKE), o suporte precisará estar ativado. (A ativação de políticas de rede para clusters existentes no GKE exigirá uma breve atualização contínua.)
Quando tudo estiver pronto, comece com políticas de rede padrão simples - por exemplo, bloqueando (por padrão) o tráfego de outros namespaces.
Se você estiver usando o Google Container Engine, poderá verificar se o suporte a políticas está ativado nos clusters em funcionamento:
$ gcloud container clusters list \ --format='table[box] (name,addonsConfig.networkPolicyConfig)'

7. Defina a Política de Segurança do Pod para o cluster.
Política de Segurança do Pod -
Política de Segurança do Pod - define os valores padrão usados para iniciar cargas de trabalho no cluster. Considere definir uma política e ativar o
controlador de admissão da Política de Segurança do Pod: as instruções para essas etapas variam dependendo do provedor de nuvem ou do modelo de implantação usado.
Para iniciantes, convém
NET_RAW
recurso NET_RAW
em contêineres para se proteger de certos tipos de ataques de falsificação.
8. Trabalhe na segurança do nó
Para melhorar a segurança do host, você pode seguir estas etapas:
- Verifique se o host está configurado de forma segura e correta . Uma maneira é o CIS Benchmarks ; Muitos produtos possuem um verificador automático que verifica automaticamente o sistema quanto à conformidade com esses padrões.
- Monitore a disponibilidade da rede de portas importantes . Verifique se a rede está bloqueando o acesso às portas usadas pelo kubelet, incluindo 10250 e 10255. Considere restringir o acesso ao servidor da API do Kubernetes - com exceção das redes confiáveis. Nos clusters que não exigiam autenticação e autorização na API do kubelet, os invasores usavam o acesso a essas portas para iniciar os mineradores de criptomoedas.
- Minimize o acesso administrativo aos hosts Kubernetes . O acesso aos nós do cluster deve, em princípio, ser limitado: para depurar e resolver outros problemas, como regra, você pode fazer isso sem acesso direto ao nó.
9. Habilite o log de auditoria
Verifique se os
logs de auditoria estão ativados e se você está monitorando a ocorrência de chamadas de API incomuns ou indesejadas, principalmente no contexto de falhas de autorização - essas entradas terão uma mensagem com o status "Proibido". Falhas na autorização podem significar que um invasor está tentando tirar proveito das credenciais obtidas.
Os provedores de soluções gerenciadas (incluindo o GKE) fornecem acesso a esses dados em suas interfaces e podem ajudá-lo a configurar notificações em caso de falhas na autorização.
Olhando para o futuro
Siga estas diretrizes para um cluster Kubernetes mais seguro. Lembre-se de que, mesmo após a configuração segura do cluster, você deve garantir a segurança em outros aspectos da configuração e operação dos contêineres. Para melhorar a segurança da pilha de tecnologia, explore as ferramentas que fornecem um sistema central para gerenciar contêineres implantados, monitorando e protegendo constantemente contêineres e aplicativos nativos da nuvem.
PS do tradutor
Leia também em nosso blog: