Le plug-in serveur grantforge-plugin-zookeeper définit le type de service zookeeper, ses ressources et la configuration de connexion. L’application des politiques demande un second élément, qui tourne dans ZooKeeper lui-même : l’agent, qui participe aux décisions d’ACL des serveurs comme fournisseur d’authentification SASL. Il se trouve dans agents/grantforge-agent-zookeeper ; la commande mvn -pl agents/grantforge-agent-zookeeper -am package produit un unique JAR shaded compatible Java 8, avec ses dépendances, que la distribution fournit sous agents/zookeeper/grantforge-agent-zookeeper-<version>.jar. L’implémentation cible les API ZooKeeper 3.6–3.9 ; la compatibilité avec les versions réelles reste à valider. Cela ne signifie ni que toute la matrice de versions a été validée, ni que la recette pour la production est terminée.
Déploiement
-
Installez le JAR dans le répertoire
libde chaque serveur ZooKeeper, y compris tous les nœuds pouvant recevoir des requêtes clientes. Créez des identifiants Agent dans le service de donnéeszookeepercorrespondant de GrantForge. Stockez le jeton dans un fichier séparé, lisible uniquement par le compte exécutant ZooKeeper ; n’inscrivez pas le jeton lui-même danszoo.cfg. -
Ajoutez ces paramètres au
zoo.cfgde chaque serveur, en remplaçant l’adresse, les chemins et l’identifiant d’instance de l’exemple.grantforge.server.url(http[s]://GrantForge),grantforge.token.file, ungrantforge.cache.dirlocal etgrantforge.instancesont obligatoires. Le compte exécutant ZooKeeper doit pouvoir écrire dans le répertoire de cache.authProvider.1=org.devlive.grantforge.zookeeper.agent.GrantForgeSaslAuthenticationProvider enableEagerACLCheck=false grantforge.server.url=https://GrantForge grantforge.token.file=/etc/zookeeper/grantforge.token grantforge.cache.dir=/var/lib/zookeeper/grantforge-cache grantforge.instance=zk-1 grantforge.principal.mapping=short -
Ce fournisseur remplace le fournisseur SASL natif ; ne conservez aucun autre fournisseur enregistré pour le même schéma
sasldans une autre entréeauthProvider.N.enableEagerACLCheck=falseest impératif : lorsque cette vérification est activée, l’enregistrement du fournisseur est refusé et le marqueur n’autorise aucun accès. Conservez et vérifiez l’authentification normale de ZooKeeper avec SASL, JAAS et Kerberos ; l’agent ne remplace pas l’authentification. Redémarrez les serveurs selon la procédure de maintenance de l’ensemble. -
Le paramètre facultatif
grantforge.signing.key.filedésigne le fichier contenant la clé publique de signature épinglée comme clé de confiance.grantforge.principal.mapping=shortest la valeur par défaut et transformekafka/host@REALMenkafka;fullconserve le principal complet. Les utilisateurs des politiques doivent correspondre aux identités ainsi obtenues.
ACL et limites
- Seule l’ACL de marquage
sasl:grantforgedélègue la décision aux politiques GrantForge, par exemplesasl:grantforge:cdrwa, oùc=create,d=delete,r=read,w=writeeta=admin. Les autres ACL natives, y compris les autres identités SASL, gardent leur comportement habituel. - Le marqueur refuse l’accès si l’agent ne fonctionne pas, si aucun instantané de politiques utilisable n’est disponible, si son
serviceTypen’est paszookeeperou si aucune politique ne correspond/n’autorise l’accès. Ce n’est pas un refus global : d’autres ACL,world:anyoneou une identitésuperpeuvent encore autoriser la requête. - Les politiques comparent le chemin cible absolu côté serveur. Pour
create/delete, il s’agit du znode à créer/supprimer, et non du parent dont l’ACL est vérifiée. Avec un chroot, le chemin de la politique doit inclure le préfixe chroot réel :/brokerssous le chroot/kafkacorrespond à/kafka/brokers. Uncreateséquentiel vérifie le préfixe absolu de la requête côté serveur avant l’ajout du numéro de séquence ; lesread/deleteultérieurs vérifient le nom complet du nœud généré. - Les ACL natives ne sont pas migrées automatiquement et les ACL ne sont pas héritées récursivement ; les nouveaux znodes nécessitent une ACL de marquage explicite. Avant d’utiliser
setACL, vérifiez les autorisations et les refus sur un périmètre limité et conservez un canal d’administration indépendant. N’appliquez pas le marqueur au nœud racine sans validation soigneuse, sous peine de bloquer l’accès. - Un serveur sans agent traite
sasl:grantforgecomme l’identité SASL nativegrantforgeau lieu d’évaluer les politiques. Le déploiement sur tous les nœuds est donc obligatoire ; un déploiement partiel ne protège pas l’ensemble. - Les écritures transmises d’un follower/observer au leader peuvent ne pas avoir de connexion cliente à cette interface du fournisseur ; le contexte
clientAddresspeut donc être vide. Les politiques de bout en bout dans l’ensemble fondées sur l’IP du client ne sont pas garanties. - Ce fournisseur ne peut pas connaître le résultat final d’une requête. Il n’envoie donc pas d’événements d’audit finaux
AccessEventet ne fournit pas un audit complet des accès.
