Authorization of Service Mesh through Envoy
Envoy-authz ist eine Middleware für Envoy, die externe RBAC & ABAC Autorisierung durch Casbin durchführt. Diese Middleware verwendet Envoy's externe Autorisierungs-API über einen gRPC-Server. Dieser Proxy kann auf jedem Typ von Envoy-basiertem Service Mesh, wie z.B. Istio, eingesetzt werden.
Anforderungen
- Envoy 1.17+
- Istio oder jede andere Art von Service Mesh
- gRPC-Abhängigkeiten
Abhängigkeiten werden mit go.mod
verwaltet.
Funktionsweise der Middleware
- Ein Client stellt eine HTTP-Anfrage.
- Der Envoy-Proxy sendet die Anfrage an den gRPC-Server.
- Der gRPC-Server autorisiert die Anfrage basierend auf Casbin-Richtlinien.
- Wenn die Anfrage autorisiert ist, wird sie weitergeleitet; andernfalls wird sie abgelehnt.
Der gRPC-Server basiert auf dem Protokollpuffer von 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);
}
Aus der obigen Proto-Datei müssen wir den Check()
-Dienst im Autorisierungsserver verwenden.
Verwendung
- Definieren Sie die Casbin-Richtlinien in den Konfigurationsdateien gemäß diesem Leitfaden.
Sie können Ihre Richtlinien mit dem Online-casbin-editor überprüfen/testen.
- Starten Sie den Authentifizierungsserver durch Ausführen von:
go build .
./authz
- Laden Sie die Envoy-Konfiguration:
envoy -c authz.yaml -l info
Sobald Envoy startet, wird es Anfragen für den Autorisierungsprozess abfangen.
Integration mit Istio
Um diese Middleware zum Laufen zu bringen, müssen Sie benutzerdefinierte Header senden, die Benutzernamen im JWT-Token oder Header enthalten. Sie können sich auf die offizielle Istio-Dokumentation beziehen, um mehr Informationen über die Änderung von Request Headers
zu erhalten.