Aller au contenu principal

Envoy (Autorisation Service Mesh)

envoy-authz est un service d'autorisation externe Envoy qui utilise Casbin pour RBAC/ABAC. Il implémente l'API gRPC d'authentification externe d'Envoy et fonctionne avec Istio ou tout autre maillage basé sur Envoy.

Prérequis​

  • Envoy 1.17 ou version ultérieure
  • Istio ou un autre service mesh basé sur Envoy
  • Dépendances gRPC

Les dépendances sont gérées via go.mod.

Fonctionnement​

  • Un client initie une requête HTTP
  • Envoy intercepte la requête et la transmet au serveur d'autorisation gRPC
  • Le serveur évalue la requête par rapport aux politiques Casbin
  • Les requêtes autorisées sont traitées ; les requêtes non autorisées sont bloquées

Le serveur gRPC implémente la définition protobuf de l'external_auth.proto d'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);
}

Le serveur d'autorisation doit implémenter la méthode Check() définie ci-dessus.

Utilisation​

  • Configurez vos politiques Casbin dans les fichiers de configuration en suivant la documentation Casbin.

Vous pouvez tester vos politiques à l'aide de l'éditeur Casbin en ligne.

  • Lancez le serveur d'autorisation :
go build .
./authz
  • Appliquez la configuration Envoy :
envoy -c authz.yaml -l info

Une fois qu'Envoy démarre, il routera les requêtes entrantes via le middleware d'autorisation.

Intégration avec Istio​

Pour activer ce middleware, configurez votre système afin de transmettre les informations d'identité utilisateur via des en-têtes personnalisés dans les jetons JWT ou les en-têtes de requête. Pour obtenir des instructions sur la modification des en-têtes de requête, consultez la documentation officielle Istio.

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.