Zum Hauptinhalt springen

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.