Vai al contenuto principale

Authorization of Service Mesh through Envoy

Envoy-authz è un middleware per Envoy che esegue l'autorizzazione esterna RBAC & ABAC tramite casbin. Questo middleware utilizza l'API di autorizzazione esterna di Envoy tramite un server gRPC. Questo proxy può essere distribuito su qualsiasi tipo di service mesh basato su Envoy, come Istio.

Requisiti

  • Envoy 1.17+
  • Istio o qualsiasi altro tipo di service mesh
  • dipendenze grpc

Le dipendenze sono gestite utilizzando go.mod.

Funzionamento del Middleware

  • Un client effettua una richiesta HTTP.
  • Il proxy Envoy invia la richiesta al server gRPC.
  • Il server gRPC autorizza la richiesta in base ai criteri di casbin.
  • Se autorizzata, la richiesta viene inoltrata; in caso contrario, viene negata.

Il server gRPC si basa sul protocol buffer da external_auth.proto in 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);
}

Dal file proto sopra, dobbiamo utilizzare il servizio Check() nel server di autorizzazione.

Utilizzo

  • Definisci le politiche di Casbin nei file di configurazione seguendo questa guida.

Puoi verificare/testare le tue politiche utilizzando l'editor online casbin-editor.

  • Avvia il server di autenticazione eseguendo:
go build .
./authz
  • Carica la configurazione di Envoy:
envoy -c authz.yaml -l info

Una volta che Envoy si avvia, intercetterà le richieste per il processo di autorizzazione.

Integrazione con Istio

Per far funzionare questo middleware, devi inviare intestazioni personalizzate contenenti i nomi utente nel token JWT o nelle intestazioni. Puoi fare riferimento alla documentazione ufficiale di Istio per ulteriori informazioni sulla modifica delle Intestazioni delle Richieste.