Authorization of Kubernetes
K8s-authz é um middleware de autorização do Kubernetes (k8s) baseado no Casbin que utiliza RBAC (Controle de Acesso Baseado em Funções) e ABAC (Controle de Acesso Baseado em Atributos) para aplicação de políticas. Este middleware integra-se com o webhook de validação de admissão do K8s para validar as políticas definidas pelo Casbin para cada solicitação feita aos recursos do K8s. Controladores de admissão personalizados são registrados com o Kubernetes usando o ValidatingAdmissionWebhook
para realizar validações em objetos de solicitação encaminhados pelo servidor de API e fornecer uma resposta indicando se a solicitação deve ser permitida ou rejeitada.
Para determinar quando enviar solicitações de entrada para o controlador de admissão, um webhook de validação foi implementado. Este webhook encaminha solicitações para qualquer tipo de recurso ou sub-recurso do K8s e realiza a verificação de políticas. Os usuários só têm permissão para realizar operações nesses recursos se forem autorizados pelo executor do Casbin. O executor verifica as funções do usuário conforme definido nas políticas. O cluster K8s é o alvo de implantação para este middleware.
Requisitos
Antes de prosseguir, certifique-se de que você tem o seguinte:
- Um cluster Kubernetes em execução. Você pode configurar um cluster local usando o Docker ou configurar um ecossistema Kubernetes completo no seu servidor. Para instruções detalhadas, consulte este guia para configurar um cluster Kubernetes local no Windows ou este guia para configurar um cluster no Linux.
- Kubectl CLI. Instruções para instalar o Kubectl no Windows podem ser encontradas aqui, e para Linux aqui.
- OpenSSL
Uso
Siga estes passos para usar o K8s-authz:
Gere certificados e chaves para cada usuário usando o OpenSSL. Execute o script abaixo:
./gen_cert.sh
Construa a imagem Docker a partir do Dockerfile manualmente executando o seguinte comando. Lembre-se de alterar a versão de construção no comando e no arquivo de implantação file de acordo.
docker build -t casbin/k8s_authz:0.1 .
Defina as políticas do Casbin nos arquivos model.conf e policy.csv. Para mais informações sobre como essas políticas funcionam, consulte a documentação.
Antes de implantar, você pode modificar as portas no arquivo main.go, bem como na configuração do webhook de validação file, com base em suas necessidades específicas.
Implante o controlador de validação e o webhook no cluster Kubernetes executando o seguinte comando:
kubectl apply -f deployment.yaml
Para um servidor de produção, é recomendado criar um
secret
do Kubernetes para proteger os certificados:kubectl create secret generic casbin -n default \
--from-file=key.pem=certs/casbin-key.pem \
--from-file=cert.pem=certs/casbin-crt.pemApós completar os passos acima, você precisa atualizar o diretório do certificado no main.go e nos manifestos com o diretório do
secret
criado.
Agora, o servidor deve estar funcionando e pronto para validar solicitações feitas aos recursos do K8s e aplicar políticas de acordo.