Como começar com o RBAC Kubernetes

O controle de acesso baseado em função (RBAC) é um mecanismo para definir as ações que as contas de usuário podem executar em seu cluster Kubernetes. Habilitar o RBAC reduz o risco associado ao roubo de credenciais e controle de contas. Dar a cada usuário o conjunto mínimo de permissões necessárias evita que as contas adquiram privilégios excessivos.

As distribuições mais populares do Kubernetes começam com uma única conta de usuário que recebe acesso de superusuário ao cluster. Autenticar como esta conta permite que você execute qualquer ação, mas pode representar um risco de segurança substancial.

Neste artigo, mostraremos como habilitar e configurar a API RBAC do Kubernetes para que você possa ajustar os recursos do usuário. é comum que alguns usuários criem e listem apenas Pods, enquanto os administradores também podem excluir itens. Você pode configurar e aplicar essas políticas por meio do sistema RBAC.

índice

  1. Habilitando o RBAC no Kubernetes
  2. Objetos RBAC do Kubernetes
  3. Como criar uma conta de serviço
  4. Adicionar uma função
  5. Vinculando funções a usuários e contas de serviço
  6. Teste sua regra RBAC
  7. Resumo

Habilitando o RBAC no Kubernetes

O RBAC é um recurso opcional do Kubernetes, mas a maioria das principais distribuições vem com ele ativado por padrão, incluindo os de provedores de nuvem gerenciados. Você pode verificar se o RBAC está disponível em seu cluster executando o seguinte comando com Kubectl:

 $ kubectl api-versions | grep rbac.authorization.k8s rbac.authorization.k8s.io/v1

O comando deve emitir rbac.authorization.k8s.io/v1 como sua saída se o RBAC estiver habilitado. O RBAC é desativado se o comando não produzir nenhum resultado. Você pode habilitá-lo iniciando o servidor da API Kubernetes com o --authorization-mode=RBAC :

 $ kube-apiserver --authorization-mode=RBAC

Consulte a documentação da sua distribuição do Kubernetes se não tiver certeza de como personalizar os argumentos de inicialização do servidor de API.

Objetos RBAC do Kubernetes

A implementação do Kubernetes RBAC gira em torno de quatro tipos de objetos diferentes. Você pode gerenciar esses objetos com o Kubectl, semelhante a outros recursos do Kubernetes, como Pods, Deployments e ConfigMaps.

  • Função – Uma função é um conjunto de regras de controle de acesso que definem as ações que os usuários podem executar.
  • Ligação de função – Uma "ligação" é um link entre uma função e um ou mais assuntos, que podem ser usuários ou contas de serviço. O link permite que os sujeitos executem qualquer uma das ações incluídas na função de destino.

Roles e RoleBindings são objetos com namespace. Eles devem existir em um namespace específico e controlar o acesso a outros objetos dentro dele. O RBAC é aplicado a recursos de nível de cluster, como os próprios nós e namespaces, usando ClusterRoles e ClusterRoleBindings . Eles funcionam de maneira semelhante a Roles e RoleBindings, mas visam objetos sem namespace.

Como criar uma conta de serviço

Uma conta de serviço do Kubernetes é um tipo de usuário gerenciado pela API do Kubernetes. Cada conta de serviço tem um token exclusivo que é usado como credenciais. Você não pode adicionar usuários regulares por meio da API do Kubernetes, então usaremos uma conta de serviço para este tutorial.

Use o Kubectl para criar uma nova conta de serviço:

 $ kubectl criar demonstração de conta de serviço

Isso produz uma nova conta chamada demo . Em seguida, você deve recuperar o token que usará para autenticar como esta conta. Primeiro encontre o nome do segredo que armazena o token:

 $ kubectl describe serviceaccount demo Nome: demo Namespace: default Rótulos: <none> Anotações: <none> Segredos de extração de imagem: <none> Segredos montáveis: demo-token-w543b Tokens: demo-token-w543b Eventos: <none>

O token dessa conta de serviço é armazenado no segredo denominado demo-token-w543b . Você pode recuperar o token obtendo o valor do segredo com este comando:

 $ TOKEN=$(kubectl describe secret demo-token-w543b | grep token: | awk '{print $2}')

O token agora está armazenado na variável TOKEN em seu shell. Você pode usar essa variável para adicionar um novo contexto Kubectl que permitirá a autenticação como sua conta de serviço:

 $ kubectl config set-credentials demo --token=$TOKEN Usuário "demo" definido. $ kubectl config set-context demo --cluster=default --user=demo Contexto "demo" criado.

Você deve alterar o valor do --cluster para corresponder ao nome de sua conexão de cluster Kubectl ativa. isso geralmente é o default ou o nome do contexto selecionado no momento. Você pode verificar o contexto selecionado executando kubectl config current-context .

Alterne para seu novo contexto para autenticar como sua conta de serviço de demo Anote primeiro o nome do seu contexto atualmente selecionado, para que você possa voltar para sua conta de superusuário mais tarde.

 $ kubectl config current-context default $ kubectl config use-context demo Alterado para o contexto "demo".

Os comandos do Kubectl agora serão autenticados como a conta de serviço de demo Tente recuperar a lista de pods em seu cluster:

 $ kubectl get pods Erro do servidor (Proibido): pods é proibido: O usuário "system:serviceaccount:default:demo" não pode listar o recurso "pods" no grupo de API "" no namespace "default"

A operação foi proibida porque a conta de serviço de demo não possui uma função que permita acessar os pods.

Adicionar uma função

As funções são criadas da mesma forma que qualquer outro objeto do Kubernetes. Escreva um arquivo YAML que defina a função e as permissões que ela fornece. Cada função contém uma ou mais regras que permitem que ações específicas sejam executadas em um conjunto de recursos. Aqui está uma função simples que permite que um usuário recupere detalhes de pods existentes:

 apiVersion : rbac.authorization.k8s.io/v1 kind : Role metadata : namespace : default name : demo-role rules : - apiGroups : [ "" ] resources : [ "pods" ] verbs : [ "get", "list" ]

os verbos get e list aplicados ao recurso pods significam que você poderá executar comandos como get pod e describe pod . A tentativa de criar um novo Pod ou excluir um existente será proibida porque os verbos create e delete são omitidos da função.

Volte para o contexto original do Kubectl para adicionar a função ao cluster usando sua conta administrativa:

 $ kubectl config use-context default Alterado para o contexto "default".

Agora adicione a função:

 $ kubectl apply -f role.yaml role.rbac.authorization.k8s.io/demo-role criado

Vinculando funções a usuários e contas de serviço

Agora você pode associar sua função à sua conta de serviço de demo criando uma nova RoleBinding. Crie o seguinte arquivo YAML para definir seu link:

 apiVersion : rbac.authorization.k8s.io/v1 kind : RoleBinding metadata : namespace : default name : demo-role-binding subject : - kind : ServiceAccount name : demo apiGroup : "" roleRef : kind : Role name : demo-role apiGroup : ""

RoleBindings deve incluir um ou mais assuntos que identificam os usuários e contas de serviço visados ​​pela associação. O campo roleRef faz referência à função que você deseja atribuir a cada um desses usuários.

Role e RoleBinding devem existir no mesmo namespace. Use um ClusterRole e um ClusterRoleBinding para recursos sem namespaces.

a seguir execute kubectl apply para adicionar RoleBinding ao seu cluster. Entre em vigor imediatamente, concedendo à conta de serviço de demo os recursos declarados na função demo-role :

 $ kubectl apply -f role-binding.yaml rolebinding.rbac.authorization.k8s.io/demo-role-binding criado

Teste sua regra RBAC

Teste sua implementação simples do RBAC voltando ao novo contexto Kubectl que você criou para a conta demo :

 $ kubectl config use-context demo Alterado para o contexto "demo".

Agora repita o comando get pods de antes:

 $ kubectl get pods Nenhum recurso encontrado no namespace padrão.

Desta vez o comando foi bem sucedido. A conta de serviço de demo agora pode recuperar listas de pods porque está vinculada à função demo-role . Você ainda verá um erro Forbidden se tentar criar um novo Pod porque essa operação não está incluída em nenhuma função vinculada à conta:

 $ kubectl run nginx --image=nginx Erro do servidor (Proibido): pods é proibido: O usuário "system:serviceaccount:default:demo" não pode criar recursos "pods" no grupo API "" no namespace "default"

Você pode resolver isso atribuindo ao usuário outra função que inclua o verbo create para o recurso de pods . Como alternativa, você pode editar o arquivo YAML da função existente e aplicar a versão modificada ao cluster:

 apiVersion : rbac.authorization.k8s.io/v1 kind : Role metadata : namespace : default name : demo-role rules : - apiGroups : [ "" ] resources : [ "pods" ] verbs : [ "create", "get" , "Lista" ]

Você também pode adicionar regras adicionais à sua função para criar diferentes combinações de grupos de recursos e ações permitidas.

Resumo

O RBAC permite definir os recursos de software disponíveis para contas de usuários individuais. O sistema Kubernetes RBAC fornece controles detalhados para limitar os tipos de recursos que as contas podem acessar e as ações que podem realizar.

A adoção do RBAC fortalece a segurança em seu cluster e cria um ambiente operacional menos arriscado. No entanto, você ainda deve considerar as práticas recomendadas para evitar a introdução de novos problemas. Você deve auditar regularmente seu cluster para identificar contas com privilégios excessivos e limpar funções redundantes. Isso ajudará a evitar confusão e permitirá que você tenha uma visão clara de quais ações cada conta pode realizar.

Implementações eficazes de RBAC devem ser baseadas no menor número possível de funções, e cada função deve ter o conjunto mínimo de ações necessárias para sua área específica de funcionalidade. A atribuição de muitos privilégios a cada conta nega os benefícios do RBAC, portanto, vale a pena gastar tempo planejando os requisitos para cada usuário antes de começar a criar funções e associações.

  • O modelo econômico que não carece (a maioria) de funções
  • O novo hardware Wi-Fi da Eero está pronto para roubar o trovão da Ubiquiti

descubra mais conteúdo

O que é um amplificador integrado?

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

Ir arriba