Passer au contenu principal

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.