Passer au contenu principal

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

  • Définissez les politiques de Casbin sous les fichiers de configuration en suivant ce 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.