Autorisation de maillage de service par l'envoyé
Envoy-authz est un middleware d'Envoyé qui effectue une autorisation externe RBAC & ABAC via casbin. Ce middleware utilise l'API d'autorisation externe Envoyé via un serveur gRPC. Ce proxy serait déployé sur n'importe quel type de mailles de service basées sur l'envoi comme Istio.
Exigences
- Envoyé 1.17+
- Istio ou tout type de maillage de service
- Dépendances grpc
Les dépendances sont gérées via go.mod
.
Travail de Middleware
- Un client ferait une requête http.
- Envoy proxy enverrait cette requête au serveur grpc.
- Le serveur grpc autoriserait alors la requête en se basant sur les règles de casbin.
- Si elle est autorisée, la demande sera envoyée par le biais ou autrement, elle sera refusée.
Le serveur grpc est basé sur le tampon de protocole de external_auth.proto d'Envoy.
// Une interface générique pour effectuer la vérification d'autorisation sur les requêtes entrantes
// à un service en réseau.
service Authorization {
// Effectue une vérification d'autorisation basée sur les attributs associés à la requête entrante
// et retourne le statut `OK` ou pas `OK`.
rpc Check(v2.CheckRequest) retourne (v2.CheckResponse);
}
À partir du profil ci-dessus, nous devons utiliser le service Check()
dans le serveur d'autorisation.
Usage
- Define the Casbin policies under config files by following this guide.
You can verify/test your policies on online casbin-editor.
- Démarrez le serveur d'autorisation en cours d'exécution :-
$ go build .
$ ./authz
- Charger la configuration de l'envoyé :-
$ envoyé -c authz.yaml -l info
Une fois que l'envoyé aura démarré, il commencera à intercepter les demandes d'autorisation.
Intégration à Istio
Vous devez envoyer des en-têtes personnalisés, qui contiendraient des noms d'utilisateur dans les en-têtes JWT pour que ce middleware fonctionne. Vous pouvez consulter les docs officiels Istio pour obtenir plus d'informations sur la modification des en-têtes de requête
.