Pular para o conteúdo principal

Authorization of Service Mesh through Envoy

Envoy-authz é um middleware para o Envoy que realiza autorização externa RBAC & ABAC através do casbin. Este middleware utiliza a API de autorização externa do Envoy via um servidor gRPC. Este proxy pode ser implantado em qualquer tipo de service mesh baseado em Envoy, como o Istio.

Requisitos

  • Envoy 1.17+
  • Istio ou qualquer outro tipo de service mesh
  • dependências grpc

As dependências são gerenciadas usando go.mod.

Funcionamento do Middleware

  • Um cliente faz uma solicitação HTTP.
  • O proxy Envoy envia a solicitação para o servidor gRPC.
  • O servidor gRPC autoriza a solicitação com base nas políticas do casbin.
  • Se autorizado, a solicitação é encaminhada; caso contrário, é negada.

O servidor gRPC é baseado no protocol buffer de external_auth.proto no Envoy.

// A generic interface for performing authorization checks on incoming
// requests to a networked service.
service Authorization {
// Performs an authorization check based on the attributes associated with the
// incoming request and returns a status of `OK` or not `OK`.
rpc Check(v2.CheckRequest) returns (v2.CheckResponse);
}

Do arquivo proto acima, precisamos usar o serviço Check() no servidor de autorização.

Uso

  • Defina as políticas Casbin nos arquivos de configuração seguindo este guia.

Você pode verificar/testar suas políticas usando o casbin-editor online.

  • Inicie o servidor de autenticação executando:
go build .
./authz
  • Carregue a configuração do Envoy:
envoy -c authz.yaml -l info

Uma vez que o Envoy é iniciado, ele interceptará solicitações para o processo de autorização.

Integrando com o Istio

Para fazer este middleware funcionar, você precisa enviar cabeçalhos personalizados contendo nomes de usuários no token JWT ou cabeçalhos. Você pode consultar a documentação oficial do Istio para mais informações sobre a modificação de Request Headers.