Pular para o conteúdo principal

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:

  1. Gere certificados e chaves para cada usuário usando o OpenSSL. Execute o script abaixo:

    ./gen_cert.sh
  2. 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 .
  3. 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.

  4. 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.

  5. Implante o controlador de validação e o webhook no cluster Kubernetes executando o seguinte comando:

    kubectl apply -f deployment.yaml
  6. 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.pem
  7. Apó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.