Verificando o RBAC no Kubernetes

Proteger o cluster Kubernetes é uma coisa, mas manter a segurança ainda é um desafio. No entanto, novas ferramentas foram adicionadas ao Kubernetes: agora é muito mais fácil fazer as duas coisas.


imagem


O Kubernetes (desde a versão 1.6) introduziu o conceito de controle de acesso baseado em função (RBAC), que permite aos administradores definir políticas de restrição para usuários de cluster. Ou seja, você cria um usuário com acesso limitado: limite o acesso do usuário a recursos como segredos ou a determinados namespaces.


Neste post, não entenderemos como implementar o RBAC. Existem fontes decentes suficientes para discutir este tópico de e para:



É melhor focar em como garantir que os requisitos de sua empresa sejam atendidos e verificar se os objetos RBAC em execução precisam ser verificados para verificar se eles desempenham suas funções.


Nosso roteiro


Algumas organizações aceitam vários grupos para trabalhar com o novo cluster Kubernetes. Há um requisito: você não pode interferir na implantação de um grupo vizinho, para que não haja problemas imprevisíveis entre grupos ou paradas.


E, assim, o proprietário do cluster implantou o RBAC no cluster, limitando assim o acesso a um espaço para nome específico. A primeira verificação mostrou: os grupos não podem visualizar os pods uns dos outros no espaço para nome.


Uma semana se passou. O proprietário do cluster notou que um usuário de um espaço para nome isolado está lendo segredos de outro espaço para nome. Como assim? Ele usou RBAC!


Eu o apliquei, mas, como no trabalho com código, o sistema deve ser testado quanto à conformidade com o resultado desejado. É bom que a kubectl kubectl CLI Kubernetes forneça um conjunto de ferramentas para verificar a configuração do RBAC. kubectl auth can-i


Posso? ("Posso?")
can-i usando a API, apenas verifica se uma determinada ação pode ser executada. Ele usa os seguintes parâmetros: kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] . Agora, o usuário atual pode verificar se uma ação específica está disponível para ele. Vamos lá:


 kubectl auth can-i create pods 

Isso deve retornar uma resposta "sim" ou "não" com o código de saída apropriado.


No entanto, ao tentar verificar os direitos de outro usuário, encontramos um problema: o usuário sob o qual estamos autorizados no cluster é especificado no arquivo de configuração ./kube/config e é inconveniente ter configurações separadas para testar usuários individuais. Felizmente, o Kubernetes volta a resgatar: é capaz de simular usuários usando os rótulos --as= e --as-group= .


Atualize o comando, use a simulação de outro usuário:


 kubectl auth can-i create pods --as=me 

Devemos ver que, com o código de saída 1 , a resposta "não" é retornada.


E isso é ótimo, porque agora temos um conjunto de comandos que permitem verificar se um usuário ou grupo de usuários tem acesso a algum recurso do Kubernetes - desde a visualização de pods até a exclusão de segredos.


Automação


No entanto, é muito cedo para parar: agora podemos implementar uma sequência de testes que descreverá a lista de requisitos e executará como parte do pipeline do CD. Para a causa!


Há muito por onde escolher, há linguagens suficientes para implementar: começando com Ava e Mocha em JavaScript e terminando com Rspec. Nesse caso, implementei a estrutura de teste puramente Bash Bats .


Abaixo está um exemplo de execução de um teste. Ele verifica a operação das regras RBAC que permitem que um usuário de um grupo altere o número de lares em execução no espaço para nome. É executado se o atributo "executável" tiver sido definido. Ou - usando o bats filename .


 #!/usr/bin/env bats @test "Team namespaces can scale deployments within their own namespace" { run kubectl auth can-i update deployments.apps --subresource="scale" --as-group="$group" --as="$user" -n $ns [ "$status" -eq 0 ] [ "$output" == "yes" ] done } 

Os --as-group --as e --as-group requerem o uso das seguintes regras RBAC:


 rules: - apiGroups: - authorization.k8s.io resources: - selfsubjectaccessreviews - selfsubjectrulesreviews verbs: - create 

Aqui está um método simples para você implementar verificações em suas regras RBAC no Kubernetes. Ao fazer parte do pipeline de Kubernetes, fortaleceremos significativamente a política de RBAC. O método foi testado na prática: capturar alterações que violam as políticas de acesso é muito mais rápido!


Obrigado por ler este post!

Source: https://habr.com/ru/post/pt434374/


All Articles