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
.