Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
kviklet — Flux de révision/approbation similaire à une Pull Request pour les requêtes de base de données. Pour un accès Engineering conforme mais fluide à la production. | Kitploit
Outils/GitHubGitHub/kviklet/kviklet
Authentification et AutorisationSécurité CloudGestion des Identités et des Accès (IAM)Sécurité des Bases de Données
GitHubkviklet/kviklet

kviklet

Flux de révision/approbation similaire à une Pull Request pour les requêtes de base de données. Pour un accès Engineering conforme mais fluide à la production.

Voir le dépôtSite web
62243il y a 1 jourVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Kviklet

Kviklet.dev | Notes de version | Discord

Accès sécurisé aux environnements de production sans nuire à la productivité des développeurs.

Kviklet Kviklet

Kviklet (prononcé Quick-let) adopte le principe des quatre yeux et un haut niveau de configurabilité pour permettre un flux de révision et d'approbation de type Pull Request pour des instructions SQL individuelles ou des sessions de base de données. Cela permet aux équipes d'ingénierie de s'autoréguler sur qui accède à quelles données et quand, permettant aux organisations de rester sécurisées et conformes tout en adoptant des workflows modernes, responsabilisants et véritablement « DevOps ».

Kviklet est un conteneur Docker auto-hébergé qui vous fournit une application Web à page unique. Connectez-vous pour créer des requêtes SQL ou approuver celles des autres. Une licence entreprise optionnelle débloque des fonctionnalités avancées comme l'authentification SAML, des exigences de révision basées sur les rôles, la synchronisation des rôles et les clés API. Vous pouvez demander une licence entreprise sur kviklet.dev.

Nous supportons actuellement Postgres, MySQL, MS SQL Server et MongoDB.

Fonctionnalités

Kviklet est livré avec une variété de fonctionnalités dont une équipe d'ingénierie a besoin pour gérer l'accès à sa base de données de production de manière :

simple mais sécurisée
  • SSO (OIDC, Google, Keycloak, etc.) : Connectez-vous à Kviklet sans avoir besoin d'un nom d'utilisateur ou d'un mot de passe. Fini les identifiants partagés pour l'accès à la base de données.
  • Support LDAP : Connectez-vous à Kviklet avec vos identifiants LDAP.
  • Support SAML : Connectez-vous à Kviklet avec vos identifiants SAML. (Entreprise uniquement)
  • Flux de révision/approbation : Laissez des commentaires et des suggestions sur les demandes de données des autres développeurs.
  • Accès temporaire (1h) : Exécutez toute instruction sur une base de données pendant 1h après avoir été approuvé.
  • Requête unique : Exécutez une instruction unique. Permet au réviseur de vérifier votre requête avant exécution.
  • Journal d'audit : Plan unique qui enregistre toutes les instructions exécutées avec l'auteur, la raison de l'exécution, etc.
  • RBAC : Configurez quelle équipe a accès à quelle base de données/table, avec une granularité aussi fine que le permet le moteur de base de données.
  • Proxy Postgres : Démarrez un serveur proxy pour utiliser le client DB de votre choix, mais tout sera stocké dans le journal d'audit de Kviklet.
  • Kubernetes Exec : Exécutez une instruction sur un pod dans votre cluster Kubernetes. (Pour l'instant ne supporte que l'exécution d'une seule commande, pas encore de session en direct)
  • Portes de révision basées sur les rôles : Exigez des approbations de rôles spécifiques avant exécution. (Entreprise uniquement)
  • Synchronisation des rôles : Synchronisez automatiquement les rôles utilisateur à partir des groupes de votre fournisseur d'identité. (Entreprise uniquement)
  • Clés API : Accès programmatique à l'API Kviklet. (Entreprise uniquement)

Fonctionnalités par type de base de données/connexion

La plupart des fonctionnalités sont disponibles pour toutes les bases de données (SSO, LDAP, RBAC, flux de révision/approbation, journal d'audit, etc.). Mais certaines fonctionnalités sont restreintes, soit parce qu'elles n'ont tout simplement pas encore été construites, soit parce qu'elles n'ont pas de sens pour cet usage spécifique. Le tableau suivant montre quelles fonctionnalités sont disponibles pour quel type de base de données :

Base de donnéesRévision des instructionsAccès temporaireProxy (Beta)Plan d'explication
Postgres✓✓✓✓
MySQL✓✓✗✓
MariaDB✓✓✗✓
SQL Server✓✓✗✓
MongoDB✓✓✗✗
Kubernetes✓✗✗✗

Configuration

Kviklet est livré sous forme d'un simple conteneur Docker. Vous pouvez trouver les versions disponibles sous Releases. Nous vous recommandons de mettre à jour régulièrement la version que vous utilisez car nous continuons à ajouter de nouvelles fonctionnalités.
La dernière version actuelle est ghcr.io/kviklet/kviklet:0.7.0, vous pouvez également utiliser :main mais il peut arriver que nous fusionnions accidentellement quelque chose de bogué. Nous essayons d'éviter cela.

Démarrage rapide

Si vous voulez simplement essayer son fonctionnement :

  1. Voici un docker-compose.yaml minimal :

    Cliquez pour dérouler le contenu du compose ``` services: postgres: image: postgres:16 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres ports: - "5432:5432" volumes: - ./postgres-data:/var/lib/postgresql/data # - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sql

    kviklet-postgres: image: postgres:16 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: kviklet ports: - "5433:5432" volumes: - ./kviklet-postgres-data:/var/lib/postgresql/data

    kviklet: image: ghcr.io/kviklet/kviklet:main ports: - "80:8080" environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://kviklet-postgres:5432/kviklet - SPRING_DATASOURCE_USERNAME=postgres - SPRING_DATASOURCE_PASSWORD=postgres - INITIAL_USER_EMAIL=[email protected] - INITIAL_USER_PASSWORD=admin depends_on: - kviklet-postgres

    root@kitploit:~
  1. Exécutez le docker-compose.yml via docker-compose up -d. Kviklet démarrera sur le port 80, allez sur localhost et explorez. L'identifiant admin est [email protected] avec admin comme mot de passe.

  2. Le docker-compose contient une base de données postgres supplémentaire pour laquelle vous pouvez configurer une connexion dans Kviklet. Pour que cette base de données contienne des données, décommentez cette ligne : ``` - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sql

    root@kitploit:~

Et créez un fichier sample_data.sql :

Cliquez pour développer le contenu de sample_data.sql ```sql CREATE TABLE Locations ( Name VARCHAR(100) NOT NULL, Address VARCHAR(255) NOT NULL, City VARCHAR(100) NOT NULL, Country VARCHAR(100) NOT NULL, PostalCode VARCHAR(20) NOT NULL );

alter table public.Locations owner to postgres;

INSERT INTO public.Locations (Name, Address, City, Country, PostalCode) VALUES ('Central Park', '59th to 110th St', 'New York', 'USA', '10022'), ('Eiffel Tower', 'Champ de Mars, 5 Avenue Anatole', 'Paris', 'France', '75007'), ('Colosseum', 'Piazza del Colosseo, 1', 'Rome', 'Italy', '00184'), ('Sydney Opera House', 'Bennelong Point', 'Sydney', 'Australia', '2000'), ('Great Wall of China', 'Huairou District', 'Beijing', 'China', '101405');

root@kitploit:~
</details>

### Configuration de la base de données

Kviklet a besoin de sa propre base de données postgres (ou au moins d'un schéma) pour enregistrer les métadonnées sur les requêtes, les connexions, les approbations, etc.
Vous pouvez trouver leur image officielle ici : https://hub.docker.com/_/postgres, ou utiliser une version hébergée dans le cloud par votre fournisseur de cloud de votre choix.

Lors du démarrage du conteneur kviklet, vous devrez ensuite définir ces trois variables d'environnement en conséquence :```
SPRING_DATASOURCE_PASSWORD = password
SPRING_DATASOURCE_USERNAME = username
SPRING_DATASOURCE_URL = jdbc:postgresql://[host]:[port]/[database]?currentSchema=[schema]

Méthodes d'authentification alternatives

  • IAM Auth: Il est possible d'utiliser l'authentification AWS IAM pour la connexion à la base de données, auquel cas vous omettez simplement le mot de passe et définissez uniquement le nom d'utilisateur. Vous devez également définir la variable d'environnement : ``` SPRING_DATASOURCE_IAMAUTH=true
    root@kitploit:~

Kviklet chargera les identifiants depuis les endroits habituels (variables d'environnement, rôles d'instance, etc.) et générera un jeton pour la connexion.

  • Certificats : Vous pouvez également utiliser des certificats pour la connexion à la base de données, voir ici pour un exemple.

Utilisateur initial

Vous aurez besoin d'un utilisateur administrateur initial à des fins de configuration. Pour cela, définissez les 2 variables d'environnement : INITIAL_USER_EMAIL et INITIAL_USER_PASSWORD afin de pouvoir vous connecter à l'interface web. Vous pouvez changer le mot de passe ultérieurement via l'interface utilisateur.
Exemple :``` INITIAL_USER_EMAIL=[email protected] INITIAL_USER_PASSWORD=someverysecurepassword

root@kitploit:~
Nous publions nos conteneurs sur GitHub packages pour l'instant, donc avec tout cela configuré, vous pouvez exécuter `ghcr.io/kviklet/kviklet:main` n'oubliez pas de mapper le port `8080` qui est le port par défaut sur lequel Kviklet démarre.

Un exemple d'exécution docker run pourrait ressembler à ceci :```
docker run \
-e SPRING_DATASOURCE_PASSWORD=postgres \
-e SPRING_DATASOURCE_USERNAME=postgres \
-e SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/Kviklet \
-e [email protected] \
-e INITIAL_USER_PASSWORD=someverysecurepassword \
--network host \
ghcr.io/kviklet/kviklet:main

SSO via OIDC / OAuth2

Google

Si vous souhaitez configurer le SSO pour votre instance Kviklet (ce qui est très logique car sinon vous devez gérer à nouveau les mots de passe). Vous devez configurer ces 3 variables d'environnement :``` KVIKLET_IDENTITYPROVIDER_CLIENTID KVIKLET_IDENTITYPROVIDER_CLIENTSECRET KVIKLET_IDENTITYPROVIDER_TYPE=google

root@kitploit:~
L'identifiant client et le secret Google peuvent être facilement obtenus en suivant les instructions de Google ici :
https://developers.google.com/identity/gsi/web/guides/get-google-api-clientid

Pour les URIs de redirection valides, vous devez configurer : https://[kviklet_host]/api/login/oauth2/code/google
Pour les origines autorisées, simplement l'URL de votre kviklet hébergé.

Après avoir défini ces variables d'environnement, tous les membres de votre organisation peuvent se connecter avec le bouton « Se connecter avec Google ». Mais ils n'auront aucune permission par défaut, vous devrez leur attribuer un rôle après leur première connexion.

#### Keycloak

Si vous souhaitez plutôt configurer le SSO avec Keycloak, vous devez définir ces 4 variables d'environnement :```
KVIKLET_IDENTITYPROVIDER_CLIENTID
KVIKLET_IDENTITYPROVIDER_CLIENTSECRET
KVIKLET_IDENTITYPROVIDER_TYPE=keycloak
KVIKLET_IDENTITYPROVIDER_ISSUERURI=http://[host]:[port]/realms/[realm]

Vous obtenez l'identifiant client et le secret lorsque vous créez une application dans Keycloak. Pour les URI de redirection valides, vous devez configurer : https://[kviklet_host]/api/login/oauth2/code/keycloak Pour les origines autorisées, mettez simplement l'URL de votre instance kviklet.

Après avoir défini ces variables d'environnement, la page de connexion devrait afficher un bouton Connexion avec Keycloak qui redirige vers votre instance Keycloak. Dans l'édition entreprise, vous pouvez activer la synchronisation des rôles pour synchroniser automatiquement les rôles de votre instance Keycloak vers Kviklet. Consultez la section Synchronisation des rôles pour plus de détails.

GitHub (Beta)

Beta : L'authentification GitHub est nouvelle et ne prend pas encore en charge la synchronisation des rôles — chaque nouvel utilisateur arrive avec le rôle par défaut et doit se voir attribuer des rôles manuellement.

GitHub n'est pas conforme à OIDC (c'est un OAuth 2.0 pur), il bénéficie donc d'un support dédié dans Kviklet. Définissez ces variables d'environnement :``` KVIKLET_IDENTITYPROVIDER_CLIENTID KVIKLET_IDENTITYPROVIDER_CLIENTSECRET KVIKLET_IDENTITYPROVIDER_TYPE=github KVIKLET_IDENTITYPROVIDER_GITHUB_ALLOWEDORGS=your-org,another-org

root@kitploit:~
Créez une application OAuth GitHub sur https://github.com/settings/developers et configurez :

- URL de rappel d'autorisation : `https://[kviklet_host]/api/login/oauth2/code/github`
- URL de la page d'accueil : l'URL de votre Kviklet hébergé

`KVIKLET_IDENTITYPROVIDER_GITHUB_ALLOWEDORGS` est **obligatoire** (Kviklet refuse de démarrer sans cela). Les applications OAuth GitHub ne peuvent pas restreindre qui termine le flux OAuth, donc Kviklet appelle `/user/orgs` après l'authentification et rejette les utilisateurs qui ne sont pas membres d'au moins une organisation autorisée (insensible à la casse, seules les 100 premières organisations sont vérifiées).

Pour que la vérification d'organisation voie l'appartenance d'un utilisateur, celui-ci doit cliquer sur **Accorder** (ou **Demander**) à côté de chaque organisation autorisée sur l'écran de consentement OAuth. Si l'organisation a activé « Restreindre les applications OAuth tierces », un propriétaire de l'organisation doit également approuver l'application OAuth une fois avant que l'appartenance d'un membre devienne visible.

Kviklet demande les portées `read:user`, `user:email` et `read:org`. Les adresses e-mail sont toujours lues depuis `/user/emails` et seule une entrée `primary && verified` est acceptée, donc les utilisateurs avec des adresses e-mail privées se connectent toujours avec succès.

#### Autres fournisseurs OIDC

D'autres fournisseurs compatibles OIDC (GitLab, Auth0, Okta, etc.) devraient fonctionner de manière similaire à Keycloak. Notez que l'`URL de redirection` changera selon le type que vous choisissez, donc si vous choisissez `gitlab`, ce sera `https://[kviklet_host]/api/login/oauth2/code/gitlab`. Si vous rencontrez des problèmes, n'hésitez pas à créer une issue, nous n'avons pas encore testé tous les fournisseurs OIDC existants et il pourrait y avoir de légères différences dans l'implémentation qui pourraient nécessiter des mises à jour du côté de Kviklet.

### LDAP

Kviklet prend en charge l'authentification LDAP. Pour activer et configurer LDAP, vous pouvez remplacer les variables d'environnement suivantes :```
LDAP_ENABLED=true
LDAP_URL=ldap://your-ldap-server:389
LDAP_BASE=dc=your,dc=domain,dc=com
LDAP_PRINCIPAL=cn=admin,dc=your,dc=domain,dc=com
LDAP_PASSWORD=your-admin-password
LDAP_UNIQUE_IDENTIFIER_ATTRIBUTE=uid
LDAP_EMAIL_ATTRIBUTE=mail
LDAP_FULL_NAME_ATTRIBUTE=cn
LDAP_USER_OU=people
LDAP_SEARCH_BASE=ou=people

Voici la signification de chaque paramètre :

  • LDAP_ENABLED : Définir sur true pour activer l'authentification LDAP.
  • LDAP_URL : L'URL de votre serveur LDAP.
  • LDAP_BASE : Le DN de base pour les recherches LDAP.
  • LDAP_PRINCIPAL : Le DN de l'utilisateur admin pour la liaison au serveur LDAP.
  • LDAP_PASSWORD : Le mot de passe de l'utilisateur admin.
  • LDAP_UNIQUE_IDENTIFIER_ATTRIBUTE : L'attribut LDAP utilisé comme identifiant unique pour les utilisateurs (par défaut : "uid").
  • LDAP_EMAIL_ATTRIBUTE : L'attribut LDAP contenant l'adresse e-mail de l'utilisateur (par défaut : "mail").
  • LDAP_FULL_NAME_ATTRIBUTE : L'attribut LDAP contenant le nom complet de l'utilisateur (par défaut : "cn").
  • LDAP_USER_OU : L'unité d'organisation (OU) où les comptes utilisateurs sont stockés (par défaut : "people").
  • LDAP_SEARCH_BASE : Permet de remplacer le DN de base pour les recherches d'utilisateurs (par défaut : "ou=people"). Si vous utilisez FreeIPA, vous devrez peut-être le définir sur, par exemple, . S'il est défini, LDAP_USER_OU est ignoré.

Vous pouvez personnaliser ces attributs pour correspondre à votre schéma LDAP. Après avoir configuré LDAP, les utilisateurs pourront se connecter en utilisant leurs informations d'identification LDAP. La première fois qu'un utilisateur LDAP se connecte, un compte utilisateur correspondant sera créé dans Kviklet avec des autorisations par défaut. Un administrateur devra attribuer les rôles appropriés à ces utilisateurs après leur première connexion.

SAML (Enterprise uniquement)

Kviklet prend en charge l'authentification SAML 2.0. Pour activer SAML, définissez les variables d'environnement suivantes :``` SAML_ENABLED=true SAML_ENTITYID=https://your-identity-provider.com SAML_SSOSERVICELOCATION=https://your-identity-provider.com/sso SAML_VERIFICATIONCERTIFICATE=-----BEGIN CERTIFICATE-----\nMIICmzCCAYMCBgF4...\n-----END CERTIFICATE-----

root@kitploit:~
Détails de configuration :

- `SAML_ENABLED` : Définissez sur `true` pour activer l'authentification SAML
- `SAML_ENTITYID` : L'ID d'entité de votre fournisseur d'identité SAML
- `SAML_SSOSERVICELOCATION` : L'URL du service SSO de votre fournisseur d'identité
- `SAML_VERIFICATIONCERTIFICATE` : Le certificat X.509 utilisé pour vérifier les réponses SAML (incluez les lignes BEGIN/END CERTIFICATE)

Vous pouvez éventuellement personnaliser les correspondances d'attributs SAML :```
SAML_USERATTRIBUTES_EMAILATTRIBUTE=email
SAML_USERATTRIBUTES_NAMEATTRIBUTE=name
SAML_USERATTRIBUTES_IDATTRIBUTE=nameID

Votre fournisseur d'identité doit être configuré avec :

  • Entity ID : https://[kviklet_host]/api/saml2/service-provider-metadata/saml
  • Redirect Uri : https://[kviklet_host]/api/login/saml2/sso/saml

Après avoir configuré SAML, les utilisateurs peuvent se connecter via le fournisseur d'identité. Lors de la première connexion, un compte utilisateur est créé avec les autorisations par défaut.

Si vous êtes correctement redirigé vers l'IDP mais obtenez une erreur CORS, vous pouvez ajouter l'hôte de votre IDP aux origines autorisées dans Kviklet via :``` CORS_ALLOWEDORIGINS=https://[idp_host]

root@kitploit:~
## Configuration

### Connexions

Après avoir démarré Kviklet, vous devez d'abord configurer une connexion à une base de données. Allez dans Paramètres -> Bases de données -> Ajouter une connexion.

![Ajouter une connexion](https://assets.kitploit.com/production/public/readmes/7140/3ded2a0b23e5d2f02feb21a854263c91dedea25a789fb75ab8342384c4e39b52.png)
![Ajouter une connexion](https://assets.kitploit.com/production/public/readmes/7140/585238c9eddad8ed4e2440096ce0616445a6696e1042f58676a1d0b038edde7f.png)

Vous pouvez ici configurer les exigences de révision et les limites d'exécution pour chaque connexion. Voir [Portes de révision](#review-gates) pour plus de détails.

#### AWS IAM AUTH

Kviklet prend en charge l'utilisation de IAM Auth pour les connexions aux bases de données Postgres et MySQL. Pour cela, choisissez IAM Auth lors de la création d'une nouvelle connexion.

![IAM Auth](https://assets.kitploit.com/production/public/readmes/7140/14ed42bd639eb9b0ba81b22850e277703f2da9495dd101f68066f95fc51f291c.png)
![IAM Auth](https://assets.kitploit.com/production/public/readmes/7140/5a60a3a9ae527e11679f3c33c787caba4c80b379ddc463db1f871288408517e1.png)

Cela supprime l'option de définir un mot de passe et utilise à la place les identifiants AWS pour se connecter à la base de données.

Kviklet utilise `DefaultCredentialsProvider` d'AWS pour trouver les identifiants et générer le jeton pour la connexion. Cela signifie que tous les emplacements typiques devraient fonctionner (variables d'environnement ou rôles d'instance associés) l'ordre exact est documenté ici : https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/DefaultCredentialsProvider.html

De plus, vous pouvez fournir un ARN de rôle AWS que Kviklet assumera, et utiliser ces identifiants pour créer le jeton DB temporaire. Ceci est particulièrement utile pour se connecter à des bases de données qui ne sont pas dans le même compte AWS que Kviklet. Pour utiliser cette fonctionnalité, saisissez simplement l'ARN du rôle dans le champ désigné lors de la création ou de l'édition d'une connexion IAM Auth. Laisser le champ vide utilisera le fournisseur d'identifiants par défaut (aucune assumption de rôle).

La région AWS à utiliser lors de la génération du jeton est déduite de votre URL de connexion, il n'y a donc pas d'option pour la définir.

Pour apprendre à configurer IAM Auth pour votre base de données, suivez la documentation officielle AWS : https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html
Les deux points principaux sont :

- Créer un utilisateur DB avec l'option IAM auth et les permissions correctes
- Créer une politique IAM qui permet à l'entité AWS de générer des jetons pour cet utilisateur

### Portes de révision

Par défaut, Kviklet permet une configuration simple du nombre de révisions. Vous pouvez configurer le nombre d'approbations nécessaires pour une demande sur une connexion spécifique avant qu'elle ne puisse être exécutée.

Le statut d'approbation d'une demande est calculé en fonction de la dernière action de chaque réviseur. Si un réviseur approuve puis demande des modifications, seule la demande de modification compte — son approbation précédente est supprimée. La modification d'une demande réinitialise toujours toutes les approbations antérieures, garantissant qu'aucune modification ne peut être exécutée sans être d'abord révisée. De même, si une exécution échoue (par exemple en raison d'une erreur de syntaxe SQL), les approbations sont réinitialisées afin que la demande puisse être corrigée et ré-approuvée sans avoir à en créer une nouvelle.

Vous pouvez également configurer une limite de **nombre maximal d'exécutions** par connexion pour contrôler la fréquence à laquelle une demande approuvée peut être exécutée. La valeur par défaut est 1. Mettre cette valeur à 0 permet des exécutions illimitées. Les exécutions échouées ne comptent pas dans cette limite.

#### Exigences de révision basées sur les rôles (Entreprise)

Avec une licence Kviklet Enterprise, vous pouvez configurer des connexions individuelles pour exiger des approbations provenant d'utilisateurs avec des rôles spécifiques. Cela vous permet par exemple d'exiger l'approbation de l'équipe qui maintient une base de données donnée ou de verrouiller des connexions sensibles derrière des approbations DBA ou de direction.

**Comment cela fonctionne :**

Chaque connexion a un nombre **total de révisions requises** (`numTotalRequired`) qui agit comme un seuil minimal — le nombre minimum d'approbations distinctes nécessaires, indépendamment des rôles. En plus de cela, vous pouvez ajouter des **exigences de rôle** qui spécifient combien d'approbations doivent provenir d'utilisateurs avec un rôle particulier (par exemple, « 1 du DBA, 1 de la Sécurité »).

Une demande n'est approuvée que lorsque **les deux** conditions sont remplies :
- Le nombre total d'approbations distinctes atteint `numTotalRequired`
- Chaque exigence de rôle est individuellement satisfaite

Si un utilisateur appartient à plusieurs rôles, une seule approbation de cet utilisateur compte pour toutes les exigences de rôle correspondantes. Cependant, elle ne compte toujours que pour une seule approbation dans le total.

**Exemple :** Une connexion nécessite 3 approbations totales, dont 1 d'un DBA et 1 de la Sécurité. Un utilisateur qui a à la fois le rôle DBA et Sécurité approuve — cela satisfait les deux exigences de rôle mais ne compte que pour 1 des 3 approbations totales nécessaires. Deux autres approbations de n'importe quels utilisateurs sont toujours nécessaires.

Si votre licence entreprise expire, les exigences de révision basées sur les rôles existantes restent appliquées mais ne peuvent plus être modifiées. Vous pouvez uniquement les supprimer pour revenir à la simple configuration du nombre total de révisions.

### Rôles

Kviklet est livré avec 3 rôles : Par défaut, Administrateurs et Développeurs.

- Le rôle Par défaut donne un accès en lecture à toutes les connexions et demandes. Ce rôle est attribué à chaque utilisateur et ne peut pas être supprimé. Vous pouvez cependant modifier ses permissions comme vous le souhaitez.
- Les Administrateurs ont la permission de créer et modifier des connexions, ainsi que d'ajouter de nouveaux utilisateurs et de définir leurs permissions.
- Les Développeurs peuvent créer des demandes, les approuver, les commenter et bien sûr exécuter les instructions réelles.

Vous pouvez personnaliser les rôles et, par exemple, donner à un rôle l'accès uniquement à une connexion spécifique ou à un groupe de connexions de base de données.
Ceci est utile par exemple si vous avez différentes équipes avec différentes bases de données et souhaitez contrôler l'accès de manière plus granulaire.

#### Créer un nouveau rôle

La création d'un nouveau rôle se fait comme suit. Allez dans Paramètres -> Rôles -> Ajouter un rôle.

![Ajouter un rôle](https://assets.kitploit.com/production/public/readmes/7140/a91b79287c0b3130b83bdde1c059f49b89c5d43a1c0deae33b211ea427956f8e.png)
![Ajouter un rôle](https://assets.kitploit.com/production/public/readmes/7140/c535ac152759bb21bea04a0968ce43fa7bf946c7699feca23c71f9eaba41ceaf.png)

Les paramètres par défaut ne sont pas très pertinents pour la plupart des rôles et vous pouvez simplement donner à l'utilisateur l'accès Lecture et Affichage des rôles et laisser ainsi.
Ce qui est plus intéressant, c'est l'ajout de permissions individuelles pour les connexions. Ici, vous ajoutez d'abord un sélecteur pour sélectionner des connexions spécifiques. Cela peut être un identifiant spécifique ou vous pouvez utiliser des jokers avec `*` pour correspondre à plusieurs connexions. Par exemple, si vous voulez un rôle qui a accès à toutes les bases de données de développement (au cas où vous gérez aussi l'accès à celles-ci avec Kviklet), vous utiliseriez un sélecteur comme `dev-*` et vous assureriez que les identifiants des connexions sont définis correctement.

Vous pouvez bien sûr aussi inventer un système que vous utilisez pour vos différentes équipes au sein de votre organisation.

### Synchronisation des rôles (Entreprise)

Synchronisez automatiquement les rôles des utilisateurs à partir des groupes de votre fournisseur d'identité. Cette fonctionnalité nécessite une licence entreprise.

**La configuration** se fait dans Paramètres > Synchronisation des rôles :

- **Activer la synchronisation des rôles** : Activer/désactiver la synchronisation
- **Mode de synchronisation** :
  - **Synchronisation complète** - Les rôles des utilisateurs correspondent exactement à leurs correspondances de groupes IdP (plus le rôle par défaut)
  - **Additif** - Les groupes IdP ajoutent des rôles mais ne suppriment pas les existants
  - **Première connexion uniquement** - Les rôles ne se synchronisent que lors de la première connexion, les modifications manuelles sont conservées par la suite
- **Attribut de groupes** : L'attribut IdP contenant les appartenances aux groupes (par défaut : `groups`)
- **Correspondances de rôles** : Mappez les noms de groupes IdP (par exemple, `engineering`) aux rôles Kviklet

#### Configuration OIDC

Configurez votre fournisseur OIDC pour inclure une revendication `groups` dans le jeton d'identité :

- **Keycloak** :

  Keycloak n'inclut pas les groupes dans les jetons par défaut, vous devrez donc ajouter un mappeur au client.

  1. Naviguez vers **Clients** dans le menu de gauche
  2. Sélectionnez votre client Kviklet
  3. Allez dans l'onglet **Client scopes**
  4. Cliquez sur le scope dédié (par exemple, `kviklet-dedicated`)
  5. Allez dans l'onglet **Mappers**
  6. Cliquez sur **Add mapper** → **By configuration**
  7. Sélectionnez **Group Membership**
  8. Configurez le mappeur :

  | Paramètre | Valeur |
  |-----------|--------|
  | Nom | `groups` |
  | Nom de la revendication du jeton | `groups` |
  | Chemin complet du groupe | **OFF** |
  | Ajouter au jeton d'identité | **ON** |
  | Ajouter au jeton d'accès | **ON** |
  | Ajouter à userinfo | **ON** |

  9. Cliquez sur **Enregistrer**

  > **Important :** Le « Nom de la revendication du jeton » doit correspondre à « l'Attribut de groupes » configuré dans les paramètres de synchronisation des rôles de Kviklet (par défaut : `groups`).

- **Autres fournisseurs OIDC** : Ajoutez un mappeur/revendication de groupes qui inclut les appartenances aux groupes de l'utilisateur dans le jeton d'identité. Cela se fait généralement dans l'interface d'administration du fournisseur.

  Si vous rencontrez des problèmes, n'hésitez pas à créer une issue, nous n'avons pas encore testé tous les fournisseurs OIDC existants et il pourrait y avoir de légères différences dans l'implémentation qui pourraient nécessiter des mises à jour du côté de Kviklet.

#### Configuration LDAP

La synchronisation des rôles LDAP utilise l'attribut `memberOf` :

1. Assurez-vous que votre serveur LDAP a le module complémentaire `memberOf` activé
2. Définissez **Attribut de groupes** sur `memberOf` dans Kviklet
3. Les noms de groupes sont ensuite extraits de l'attribut `memberOf` dans les attributs de l'utilisateur.

#### Configuration SAML

Configurez votre IdP SAML pour inclure les groupes dans l'assertion :

1. Ajoutez une instruction d'attribut qui mappe les appartenances aux groupes des utilisateurs
2. Définissez **l'Attribut de groupes** dans Kviklet pour correspondre au nom de votre attribut SAML
3. Les noms de groupes sont ensuite extraits de l'attribut SAML dans les attributs de l'utilisateur.

### Notifications

Vous pouvez configurer Kviklet pour envoyer des notifications à un canal dans Slack ou Teams. Cela est utile pour informer votre équipe des nouvelles demandes qui doivent être révisées. Vous pouvez configurer cela dans Paramètres -> Général -> Paramètres de notification.

#### Slack

Pour configurer les notifications Slack, vous devez créer une application Slack et activer les webhooks pour celle-ci. Vous pouvez suivre les instructions ici : https://api.slack.com/messaging/webhooks

#### Teams

Les notifications Teams utilisent un webhook **Workflow** Power Automate. Kviklet envoie une carte adaptative que le modèle de webhook publie dans votre canal.

**Recommandé : utiliser le modèle de workflow**

1. Dans Teams, ouvrez le canal dans lequel vous voulez recevoir des notifications, cliquez sur les **...** à côté du nom du canal et choisissez **Workflows** (ou ajoutez l'application **Workflows**).
2. Recherchez et créez le modèle **« Send webhook alerts to a channel »**.
3. Connectez-vous lorsque vous y êtes invité, puis sélectionnez l'équipe et le canal cibles et créez le workflow.
4. Ouvrez l'étape déclencheur et copiez l'**URL HTTP POST** générée.
5. Collez l'URL dans Kviklet sous Paramètres -> Général -> Paramètres de notification et cliquez sur enregistrer.

**Alternative : construire le workflow manuellement**

Si vous préférez construire le flux vous-même (ou si le modèle est indisponible) :

1. Canal **...** -> **Workflows** -> créez un flux avec le déclencheur **« When a Teams webhook request is received »**.
2. Ajoutez l'action **Microsoft Teams -> « Post card in a chat or channel »**.
3. Définissez le champ **Carte adaptative** de l'action sur l'expression `string(triggerBody())` pour qu'elle publie la carte que Kviklet envoie.
4. Sélectionnez l'équipe et le canal cibles, **Enregistrez**, puis copiez l'**URL HTTP POST** de l'étape déclencheur.

Actuellement, il y a des notifications pour :

- Nouvelles demandes nécessitant des approbations
- Nouvelles approbations sur des demandes

#### Configuration de l'URL de base

Lorsque Kviklet s'exécute derrière un proxy inverse ou un Ingress Kubernetes, les liens de notification peuvent utiliser l'adresse IP interne au lieu de votre domaine public. Kviklet essaie de suivre l'URL correcte en examinant les requêtes entrantes, mais certains proxys inverses ne définissent pas correctement les en-têtes Forwarded. Pour résoudre ce problème, définissez explicitement l'URL de base :```
KVIKLET_BASE_URL=https://kviklet.example.com

Cela garantit que tous les liens de notification pointent vers la bonne URL publique.

Logging

Par défaut, Kviklet écrit des logs lisibles par l'humain (pretty) sur stdout, ce qui est pratique pour les lire directement ou via docker logs.

Si vous envoyez les logs vers un système centralisé (Elasticsearch, Loki, Datadog, CloudWatch, …), vous pouvez passer à des logs JSON structurés, qui sont plus faciles à indexer et à interroger. Définissez le format via une variable d'environnement :```

One of: ecs (Elastic Common Schema), logstash, gelf (Graylog)

LOGGING_STRUCTURED_FORMAT_CONSOLE=ecs

root@kitploit:~
## Chiffrement

Si vous ne souhaitez pas que les identifiants soient stockés en clair dans la base de données, il est recommandé d'activer le chiffrement de la base de données sur la base de données PostgreSQL de Kviklet elle-même. Pour la plupart des fournisseurs hébergés, il s'agit d'une simple case à cocher. Néanmoins, si la base de données Kviklet est compromise d'une manière ou d'une autre, cela représente un risque de sécurité important. Car elle contient les identifiants de base de données pour potentiellement tous vos datastores de production. Vous pouvez donc activer le chiffrement des identifiants au repos.

Pour ce faire, définissez simplement les deux variables d'environnement.```
ENCRYPTION_ENABLED=true
ENCRYPTION_KEY_CURRENT=some-secret

Kviklet chiffrera toutes vos informations d'identification existantes au démarrage, et utilisera le secret pour les futures connexions que vous créerez.

Rotation des clés```

ENCRYPTION_KEY_PREVIOUS=some-secret ENCRYPTION_KEY_CURRENT=another-secret

root@kitploit:~
Kviklet rechiffrera toutes les connexions au démarrage, afin que vous puissiez ensuite redémarrer le conteneur sans la clé précédente.

## Clés API

Kviklet prend en charge les clés API pour un accès programmatique au système. Il s'agit d'une fonctionnalité réservée aux entreprises et nécessite une licence valide. Vous pouvez créer des clés API dans la section Paramètres -> Clés API.

![Clés API](https://assets.kitploit.com/production/public/readmes/7140/a11d80c93ef29ead3b8b3bf3b435a782208d10bd2978d80cd2c4edc1fc7bc506.png)
![Clés API](https://assets.kitploit.com/production/public/readmes/7140/21948bc6a43dbdd88be563befbfc9052a1dd4a99735817c2ff99680c9c32cbd0.png)

Utilisez-la comme suit :```bash
curl --location '[kviklet_host]/api/connections/' \
--header 'Authorization: Bearer your-api-key'

Les clés API héritent des permissions de l'utilisateur qui les crée. Actuellement, seuls les administrateurs peuvent gérer les clés API et toutes les actions effectuées avec une clé API sont attribuées à l'utilisateur qui a créé la clé.

Une documentation API rudimentaire est disponible à l'adresse [kviklet_host]/api/swagger-ui/index.html. Cependant, gardez à l'esprit qu'il s'agit d'un travail en cours et que l'API pourrait changer dans les versions futures.

En fin de compte, la vérité est dans le code, vous pouvez donc toujours consulter le contrôleur pour voir comment l'API est définie. Si vous avez des questions, n'hésitez pas à ouvrir un ticket.

Fonctionnalités expérimentales

Il existe actuellement deux fonctionnalités expérimentales. Elles ont été construites principalement sur la base des retours de la communauté. N'hésitez pas à les essayer et à donner votre avis. Nous espérons les développer davantage à l'avenir et les faire fonctionner correctement avec le flux d'approbation de base.

Kubernetes Exec

Si vous souhaitez utiliser la fonctionnalité Kubernetes Exec, vous devez créer une connexion Kubernetes séparée. Kviklet utilisera l'utilisateur du pod déployé pour exécuter la commande. Assurez-vous donc que l'utilisateur dispose des permissions nécessaires pour exécuter des commandes sur les pods auxquels vous souhaitez accéder.

Kviklet utilise également /bin/sh pour exécuter la commande, vous devrez donc vous assurer que vos pods disposent d'un shell ou au moins d'un lien symbolique vers /bin/sh. Si cela vous gêne, n'hésitez pas à ouvrir un ticket, nous pourrons éventuellement rendre cela configurable ou trouver une autre solution.

Les commandes Kubernetes n'attendent que 5 secondes pour une sortie ; si la commande prend plus de temps, Kviklet attendra jusqu'à une heure avant de la faire expirer. Il s'agit d'une solution provisoire, nous étudions l'utilisation de websockets pour la rendre plus réactive et potentiellement permettre des sessions terminal.

Proxy, Postgres uniquement

Si vous créez des demandes d'accès temporaire, vous pouvez - au lieu d'utiliser l'interface web - exécuter vos requêtes via un proxy géré par Kviklet et utiliser le client de base de données de votre choix. Pour cela, le conteneur utilise les ports 5438-6000, vous devez donc les exposer. L'utilisateur peut alors créer une demande d'accès temporaire, et cliquer sur "Démarrer le proxy" une fois qu'elle est approuvée. Chaque demande obtiendra un port, un utilisateur et un mot de passe temporaire. Avec cela, ils peuvent se connecter à la base de données. Kviklet valide l'utilisateur temporaire et le mot de passe, et proxyse toutes les requêtes vers l'utilisateur sous-jacent sur la base de données. Toutes les instructions exécutées sont enregistrées dans le journal d'audit comme si elles étaient exécutées via l'interface web. Notez que l'analyse des messages côté proxy n'a pas été testée avec tous les clients ; si vous rencontrez des problèmes, par exemple des instructions non enregistrées, n'hésitez pas à ouvrir un ticket.

Proxy Postgres Proxy Postgres

Proxy Postgres - TLS

Kviklet termine la connexion TLS à la base de données. Cela signifie que par défaut, tout trafic à destination et en provenance du proxy lui-même n'est pas chiffré.
Si vous souhaitez que Kviklet rechiffre le trafic, vous pouvez fournir à Kviklet un certificat TLS et une clé pour le proxy en définissant les variables d'environnement suivantes :``` PROXY_TLS_CERTIFICATE_SOURCE=env PROXY_TLS_CERTIFICATE_CERT=your-certificate PROXY_TLS_CERTIFICATE_KEY=your-key

root@kitploit:~
alternativement, vous pouvez utiliser des fichiers :```
PROXY_TLS_CERTIFICATE_SOURCE=file
PROXY_TLS_CERTIFICATE_CERT_FILE=path/to/cert.pem
PROXY_TLS_CERTIFICATE_KEY_FILE=path/to/key.pem

Dans les deux cas, le certificat et la clé doivent être stockés au format PEM.

Des questions ? Des contributions ?

Si vous avez des questions, souhaitez donner votre avis ou avez besoin d'aide pour l'installation, rejoignez notre communauté Discord. Vous pouvez également créer une issue GitHub pour les rapports de bugs et les demandes de fonctionnalités.

Si vous souhaitez contribuer, n'hésitez pas à forker et à créer des PRs pour les petites choses. Si vous prévoyez des fonctionnalités plus importantes, j'apprécierais une discussion préalable dans une issue GitHub ou sur Discord.

Vous pouvez également me contacter à l'adresse [email protected].

Télécharger l’outil
cn=users