Ir al contenido principal

Authorization of Service Mesh through Envoy

Envoy-authz es un middleware para Envoy que realiza autorización externa RBAC & ABAC a través de casbin. Este middleware utiliza la API de autorización externa de Envoy a través de un servidor gRPC. Este proxy puede ser desplegado en cualquier tipo de malla de servicios basada en Envoy, como Istio.

Requisitos

  • Envoy 1.17+
  • Istio o cualquier otro tipo de malla de servicios
  • dependencias grpc

Las dependencias se gestionan utilizando go.mod.

Funcionamiento del Middleware

  • Un cliente realiza una solicitud HTTP.
  • El proxy Envoy envía la solicitud al servidor gRPC.
  • El servidor gRPC autoriza la solicitud basándose en las políticas de casbin.
  • Si se autoriza, la solicitud se reenvía; de lo contrario, se deniega.

El servidor gRPC se basa en el protocol buffer de external_auth.proto en 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);
}

Del archivo proto anterior, necesitamos utilizar el servicio Check() en el servidor de autorización.

Uso

  • Defina las políticas de Casbin en los archivos de configuración siguiendo esta guía.

Puede verificar/probar sus políticas utilizando el casbin-editor en línea.

  • Inicie el servidor de autenticación ejecutando:
go build .
./authz
  • Cargue la configuración de Envoy:
envoy -c authz.yaml -l info

Una vez que Envoy se inicia, interceptará las solicitudes para el proceso de autorización.

Integración con Istio

Para que este middleware funcione, necesita enviar encabezados personalizados que contengan nombres de usuario en el token JWT o encabezados. Puede consultar la documentación oficial de Istio para obtener más información sobre la modificación de Request Headers.