Authorization of Service Mesh through Envoy
Envoy-authz est un middleware pour Envoy qui effectue une autorisation RBAC & ABAC externe via casbin. Ce middleware utilise l'API d'autorisation externe d'Envoy via un serveur gRPC. Ce proxy peut ĂȘtre dĂ©ployĂ© sur n'importe quel type de service mesh basĂ© sur Envoy, comme Istio.
Exigencesâ
- Envoy 1.17+
- Istio ou tout autre type de service mesh
- dépendances grpc
Les dépendances sont gérées en utilisant go.mod
.
Fonctionnement du Middlewareâ
- Un client fait une requĂȘte HTTP.
- Le proxy Envoy envoie la requĂȘte au serveur gRPC.
- Le serveur gRPC autorise la requĂȘte en fonction des politiques casbin.
- Si elle est autorisĂ©e, la requĂȘte est transmise ; sinon, elle est refusĂ©e.
Le serveur gRPC est basé sur le tampon de protocole de external_auth.proto dans 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);
}
Ă partir du fichier proto ci-dessus, nous devons utiliser le service Check()
dans le serveur d'autorisation.
Utilisationâ
- DĂ©finissez les politiques Casbin dans les fichiers de configuration en suivant ce guide.
Vous pouvez vérifier/tester vos politiques en utilisant le casbin-editor en ligne.
- Démarrez le serveur d'authentification en exécutant :
go build .
./authz
- Chargez la configuration d'Envoy :
envoy -c authz.yaml -l info
Une fois qu'Envoy démarre, il interceptera les demandes pour le processus d'autorisation.
IntĂ©gration avec Istioâ
Pour faire fonctionner ce middleware, vous devez envoyer des en-tĂȘtes personnalisĂ©s contenant des noms d'utilisateur dans le jeton JWT ou les en-tĂȘtes. Vous pouvez vous rĂ©fĂ©rer Ă la documentation officielle d'Istio pour plus d'informations sur la modification des En-tĂȘtes de requĂȘte
.