Configuration¶
L'essentiel des réglages vit dans la base de données et s'édite depuis Réglages. Ce qui suit est ce qui doit être juste avant le démarrage de l'application, parce que c'est nécessaire pour atteindre cet écran.
Base de données¶
| Variable | Défaut |
|---|---|
VECTISPIRE_DB_URL |
jdbc:mysql://localhost:3306/vectispire — une URL JDBC ; MySQL est le moteur par défaut, celui que livre docker-compose.yml. PostgreSQL : jdbc:postgresql://localhost:5432/vectispire |
VECTISPIRE_DB_USER |
vectispire |
VECTISPIRE_DB_PASSWORD |
vide |
Le moteur est lu depuis l'URL. Il n'y a pas de réglage de dialecte séparé.
Serveur et réseau¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_PORT |
3180 |
Le port HTTP. L'API, l'interface et le protocole des agents le partagent. |
VECTISPIRE_TRUSTED_PROXIES |
aucun | Adresses ou plages CIDR, séparées par des virgules, dont on croit le X-Forwarded-For. Vide signifie que rien n'est devant : l'en-tête est ignoré et c'est l'adresse du pair que les limiteurs de débit et le journal d'audit retiennent. Derrière un répartiteur de charge ou un ingress, nommez-le — sinon chaque requête arrive de lui et tout le parc partage un seul compteur. L'adresse crue est la plus à droite de X-Forwarded-For que la liste ne nomme pas, et elle n'est que ce que ce proxy a vu : un proxy joint par une source traduite (SNAT, celle d'un nœud Kubernetes en externalTrafficPolicy: Cluster) transmet cette adresse-là — voir Kubernetes. Ne nommez que des proxys : un appelant dans une plage nommée est cru sur n'importe quelle adresse. |
VECTISPIRE_PUBLIC_URL |
aucun | L'URL de base à laquelle on joint cette instance. Nommée dans l'URI d'information d'un export SARIF et dans l'identifiant d'un document VEX, pour qu'un document remis à quelqu'un d'autre dise d'où il vient, et utilisée pour les liens des notifications par courriel et des exports de projet. |
Chiffrement¶
| Variable | Notes |
|---|---|
ENCRYPTION_KEY |
L'enregistrement de tout secret est refusé tant que celle-ci ou la forme fichier n'est pas posée. |
ENCRYPTION_KEY_FILE |
Un chemin vers un fichier contenant la clé. À préférer en production. Poser les deux est refusé ; un chemin qui ne résout pas arrête l'application. |
VECTISPIRE_SIGNING_KEY |
La clé privée ECDSA P-256 (PEM, PKCS#8) qui signe les paquets de preuves, VEX, CSAF, CycloneDX et enveloppes in-toto ; sa moitié publique est publiée sur /api/v1/crypto/public-key.pub. Non posée, une clé est générée au premier usage et conservée chiffrée sous ENCRYPTION_KEY : elle survit aux redémarrages — et rien ne peut être signé sans ENCRYPTION_KEY. En 0.10.0, ce premier usage échoue : une installation sans cette clé répond 500 à son premier paquet de preuves, parce que la clé était créée dans une transaction en lecture seule (corrigé dans la version qui suit la 0.10.0, voir les notes de version). En 0.10.0, posez-la. À poser dès que plus d'une instance tourne, pour qu'elles signent toutes avec la même clé. Une clé conservée qu'aucune ENCRYPTION_KEY configurée ne sait déchiffrer est refusée, jamais remplacée : la remplacer rendrait invérifiable tout document déjà signé. La composition livrée la remet en fichier, /run/secrets/vectispire.signing.key, jamais en environnement, et demande la variable déclarée dans .env, même vide. |
VECTISPIRE_PREVIOUS_ENCRYPTION_KEYS |
Anciennes clés séparées par des virgules, essayées au déchiffrement seulement. |
VECTISPIRE_PREVIOUS_ENCRYPTION_KEYS_FILE |
La même liste depuis un fichier, séparée par des virgules ou des sauts de ligne. |
Voir Rotation et purge.
Garde des clés dans HashiCorp Vault¶
VECTISPIRE_ENCRYPTION_KMS_TYPE=vault chiffre par le moteur Transit de Vault au lieu d'une clé locale,
avec VECTISPIRE_ENCRYPTION_VAULT_ENDPOINT, VECTISPIRE_ENCRYPTION_VAULT_TOKEN (ou …_TOKEN_FILE),
VECTISPIRE_ENCRYPTION_VAULT_KEY_NAME (par défaut vectispire) et VECTISPIRE_ENCRYPTION_VAULT_MOUNT_PATH
(par défaut transit). Demander Vault sans point d'accès ou sans jeton arrête l'application plutôt que
de se rabattre sur une clé locale.
La clé Transit doit être dérivée : vault write -f transit/keys/vectispire derived=true. Chaque
secret est chiffré avec la ligne à laquelle il appartient comme contexte, si bien qu'un chiffré déplacé
vers une autre ligne ne se déchiffre pas — et Vault n'utilise ce contexte que sur une clé dérivée, il
l'ignore sur une clé ordinaire. Vectispire lit la clé une fois et refuse de chiffrer sous une clé non
dérivée ; ce qu'une telle clé détient déjà reste lisible, avec une erreur dans le journal, jusqu'à ce
que les secrets soient enregistrés de nouveau sous une clé dérivée.
Premier compte¶
| Variable | Notes |
|---|---|
VECTISPIRE_BOOTSTRAP_USERNAME |
Utilisé seulement quand la table des utilisateurs est vide. |
VECTISPIRE_BOOTSTRAP_PASSWORD |
Au moins 12 caractères. |
Dès qu'un compte existe, les deux sont ignorés.
Authentification¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_OIDC_ISSUER |
aucun | Active l'authentification unique. |
VECTISPIRE_PASSWORD_LOGIN |
true |
false délègue entièrement l'authentification. Ignoré, bruyamment, sans émetteur posé — cela ne laisserait aucune entrée. |
VECTISPIRE_OIDC_LINK_PRIVILEGED_ACCOUNTS |
false |
Permet de lier un compte privilégié (tout rôle sauf USER) à sa première connexion par son nom ; jamais un compte doté d'un second facteur local. Seulement pour un realm où personne ne choisit son nom. |
VECTISPIRE_OIDC_REQUIRE_MFA |
false |
Refuse une connexion SSO dont le jeton n'atteste aucun second facteur. Une connexion fédérée saute le TOTP local : le second facteur relève du fournisseur. |
VECTISPIRE_OIDC_MFA_AMR |
mfa,otp,hwk,fido |
Les valeurs amr (RFC 8176) qui valent second facteur. |
VECTISPIRE_OIDC_MFA_ACR |
aucun | Les niveaux acr qui en valent un, quand le fournisseur signale le MFA ainsi. |
VECTISPIRE_SESSION_LIFETIME |
12h |
Une session prend fin ce délai après son ouverture, quelle que soit son activité — ce qui borne l'utilité d'un jeton volé ; aucune activité ne la prolonge. |
VECTISPIRE_SESSION_IDLE |
60m |
Une session prend fin après ce délai sans requête — ce qui protège un écran resté déverrouillé. |
VECTISPIRE_BEARER_FAILURES_PER_WINDOW |
60 |
Les jetons porteurs refusés — sessions, clés d'agent et d'intégration, jeton SCIM — comptés ensemble par adresse, par /64 pour un appelant IPv6 ; au-delà, l'adresse est refusée jusqu'à la fin de la fenêtre et le journal d'audit le consigne. Seuls les échecs comptent : un agent qui interroge avec une clé valide ne dépense rien. Généreux à dessein : ces jetons sont longs et aléatoires, et l'essentiel de la valeur du contrôle est l'entrée d'audit, pas le refus. |
VECTISPIRE_BEARER_FAILURE_WINDOW |
PT5M |
La fenêtre du réglage ci-dessus, en durée ISO-8601. |
VECTISPIRE_API_KEY_REQUESTS_PER_MINUTE |
600 |
Requêtes par minute par clé d'API d'intégration ; au-delà, 429 avec Retry-After. Les sessions et les agents ne sont pas comptés. |
VECTISPIRE_WEBHOOK_REQUESTS_PER_WINDOW |
300 |
Livraisons acceptées par fenêtre et par adresse sur le webhook entrant du tracker ; au-delà, 429 avec Retry-After. À relever si un tracker derrière une sortie partagée fait des transitions en masse plus grandes. |
VECTISPIRE_WEBHOOK_REQUEST_WINDOW |
PT1M |
La fenêtre du réglage ci-dessus, en durée ISO-8601. |
Les livraisons de webhook refusées sont auditées avec parcimonie : la première d'une adresse sur dix
minutes, une fois encore si cette adresse en atteint vingt, et au plus cent entrées en dix minutes au
total. Chaque refus reçoit toujours sa réponse 401 ou 403.
Corps de requête¶
Chaque corps de requête est borné pendant sa lecture, qu'il déclare sa longueur ou non. Les routes
qui ne sont pas nommées ci-dessous prennent la limite par défaut ; une route nommée prend la sienne à
la place — plus grande ou plus petite — et n'est jamais ramenée au défaut. Au-delà de sa limite, une
route répond 413, par un document de problème dont le detail donne la limite.
| Variable | Défaut | Route |
|---|---|---|
VECTISPIRE_MAX_BODY_DEFAULT |
1MB |
chaque route non nommée ci-dessous, quelle que soit la méthode — un triage, une liste d'accès, un paramètre ou un utilisateur SCIM pèse au plus quelques dizaines de kilo-octets |
VECTISPIRE_MAX_BODY_RULE_SET_UPLOAD |
64MB |
POST /api/v1/rule-sets — un jeu de règles peut contenir 32 Mo de fichiers, et le JSON qui les porte échappe leur YAML |
VECTISPIRE_MAX_BODY_TICKET_WEBHOOK |
1MB |
POST /api/v1/tickets/webhook/{provider} — un événement de tracker pèse quelques dizaines de kilo-octets |
VECTISPIRE_MAX_BODY_VEX_INGEST |
16MB |
POST /api/v1/vex/ingest — un document VEX pour un gros produit |
VECTISPIRE_MAX_BODY_AGENT_RESULT |
256MB |
POST /api/v1/agent/jobs/{id}/result — le résultat porte le SBOM |
VECTISPIRE_MAX_BODY_SIGN_IN |
16KB |
chaque POST /api/v1/auth/… — une connexion, un code à usage unique ou un échange de session pèse quelques centaines d'octets |
VECTISPIRE_MAX_BODY_SARIF_IMPORT |
32MB |
POST /api/v1/repositories/{id}/sarif-imports — le rapport SARIF d'un outil interne pour un dépôt ; voir Plugins et imports SARIF |
VECTISPIRE_MAX_BODY_COVERAGE_IMPORT |
16MB |
POST /api/v1/repositories/{id}/coverage-imports — un rapport JaCoCo ou Cobertura d'un gros dépôt fait quelques mégaoctets ; seuls les totaux sont gardés |
VECTISPIRE_MAX_BODY_TEST_REPORT_IMPORT |
32MB |
POST /api/v1/repositories/{id}/test-report-imports — un document JUnit, ou un zip de plusieurs, dont les échecs portent des traces de pile ; le zip est borné de nouveau une fois décompressé |
VECTISPIRE_MAX_BODY_CHECKLIST_TEMPLATE_IMPORT |
10MB |
POST /api/v1/checklist-templates/{slug}/versions — le classeur de checklist d'une organisation, lu en entier et borné de nouveau une fois décompressé |
VECTISPIRE_MAX_BODY_SBOM_IMPORT |
32MB |
POST /api/v1/repositories/{id}/build-sbom-imports — le SBOM CycloneDX d'un build, quelques mégaoctets pour un gros build multi-modules ; relu jusqu'à 50 000 composants — voir Importer le SBOM d'un build |
Clonage¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_GIT_ALLOWED_HOSTS |
aucun | Hôtes, séparés par des virgules, depuis lesquels les dépôts peuvent être clonés — gitlab.corp.example, *.corp.example. Vide, tout hôte est permis sauf les adresses link-local et les autres adresses de métadonnées du cloud, toujours refusées. Vérifié à la saisie de l'URL et avant chaque analyse. |
VECTISPIRE_HOST_SSH |
true |
Un dépôt sans clé de déploiement attachée se rabat sur le ~/.ssh de l'hôte qui analyse. Mettez false partout où les personnes qui ajoutent des cibles ne sont pas celles qui possèdent cette clé : le repli vaut pour tout l'hôte, si bien qu'ajouter une URL suffit alors à la faire cloner avec une identité que personne ne lui a attachée. false dans le docker-compose.yml livré, qui ne monte aucun ~/.ssh. |
Un clone SSH avec clé de déploiement vérifie la clé d'hôte de la forge contre
<home>/.ssh/known_hosts de l'exécutant : inscrite au premier contact, refusée si elle change,
seulement comparée quand le fichier est en lecture seule — voir
En SSH : la clé d'hôte de la forge. Aucune config ssh
n'est lue pour un tel clone.
Espaces de travail des analyses¶
L'espace de travail d'une analyse — et, sauf réglage ci-dessous, la base de vulnérabilités — est créé dans le répertoire temporaire de la JVM, puis monté dans chaque analyseur par le démon Docker, qui résout le chemin sur son propre hôte. Quand Vectispire tourne lui-même dans un conteneur, ce répertoire doit donc être un répertoire de l'hôte monté au même chemin absolu, sans quoi chaque analyseur reçoit un répertoire vide.
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_WORK_DIR |
/var/lib/vectispire/work |
docker-compose.yml seulement. Le répertoire de l'hôte monté dans le plan de contrôle au même chemin, préparé pour son utilisateur (1000:1000, 0700) par le service work-dir, et donné comme -Djava.io.tmpdir par JDK_JAVA_OPTIONS. Contient le clone de chaque analyse en cours et la base du rapprocheur (quelque 3 Go), et sous home/ le home du processus (-Duser.home), où les clés d'hôte SSH sont inscrites — le home propre de l'image, HOME=/home/vectispire, est dans la couche du conteneur et ne lui survit pas. Hors de la composition, faites de même à la main. |
VECTISPIRE_AGENT_WORK_DIR |
/var/lib/vectispire/agent-work |
docker-compose.yml, profil with-agent : la même chose pour l'agent, dans un répertoire à lui. |
Scanners¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_IMAGE_SYFT, VECTISPIRE_IMAGE_GRYPE, VECTISPIRE_IMAGE_GITLEAKS, VECTISPIRE_IMAGE_CHECKOV, VECTISPIRE_IMAGE_SEMGREP |
l'empreinte épinglée | L'image de chaque scanner, une à une. Vide garde l'empreinte livrée avec Vectispire — celle qui a été revue, dans ScannerImages. À poser pour tirer depuis un registre interne, comme doit le faire un parc isolé. Qui en surcharge une reprend à son compte ce que l'empreinte protégeait : un tag tire ce qui a été poussé sous lui le matin même, dans un conteneur qui lit du code que personne ne maîtrise — nommez une empreinte, registry.corp.example/anchore/syft@sha256:…. Lues par le worker intégré du plan de contrôle et, sous les mêmes noms, par chaque agent. |
VECTISPIRE_IMAGE_SCAN_PLATFORM |
aucun | La plateforme tirée pour l'analyse d'une image de conteneur, par exemple linux/amd64. Vide laisse le démon choisir sa propre architecture : une machine arm64 auditerait une variante que personne ne déploie. |
Worker intégré et tâches périodiques¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_EMBEDDED_WORKER |
true |
false pour un plan de contrôle qui n'exécute lui-même aucune analyse : les analyses en file attendent un agent distant, et les plugins de rapport n'ont pas d'exécuteur. |
VECTISPIRE_SCAN_MAX_CONCURRENT |
2 |
Les analyses que le worker intégré de cette instance exécute en même temps. Pas celles d'un agent : voir plus bas. |
VECTISPIRE_WORKER_LABELS |
aucun | Les étiquettes auxquelles répond le worker intégré. Vide à dessein : il ne prend alors que le travail qui n'exige aucune étiquette. |
VECTISPIRE_WORKER_INTERVAL |
15s |
La fréquence à laquelle le worker intégré cherche du travail. |
VECTISPIRE_SCHEDULER_INTERVAL |
60s |
La fréquence à laquelle on cherche les cibles dues pour une analyse périodique. |
VECTISPIRE_MAINTENANCE_INTERVAL |
1h |
La fréquence du tic de maintenance — rétention, triages arrivant à échéance, balayage des tickets, flux de threat intelligence et le reste de l'entretien ; chaque tâche garde sa propre cadence à l'intérieur (le catalogue KEV toutes les six heures, EPSS chaque jour). |
L'intervalle de l'outbox, VECTISPIRE_RELAY_INTERVAL, est sous Export SIEM.
Base de vulnérabilités¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_VULNERABILITY_DB_DIR |
un répertoire du répertoire temporaire — VECTISPIRE_WORK_DIR dans la composition |
Où la base du rapprocheur de vulnérabilités — quelque 3 Go — est téléchargée une fois pour l'hôte et partagée, en lecture seule, par toutes les analyses ; chaque analyse téléchargeait la sienne. Un seul téléchargement à la fois sous un verrou sur ce répertoire, publié en entier par un renommage atomique, vérifié toutes les heures, et les générations remplacées supprimées dès qu'aucune analyse ne peut plus les lire. Le rapprocheur lui-même tourne sans réseau. Un chemin de l'hôte du démon Docker, comme les espaces de travail ; un disque qui survit à un redémarrage épargne le téléchargement à la première analyse qui suit. |
Plugins¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_PLUGIN_REGISTRY |
aucun | Le registre interne depuis lequel chaque image de plugin est tirée — registry.corp.example:5000/mirror. L'hôte du registre de l'image est remplacé, son chemin et son digest conservés : le miroir peut servir un plugin mais pas en substituer un autre. Ni schéma, ni identifiant. Positionnez la même valeur sur chaque agent. |
VECTISPIRE_PLUGIN_SIGNATURE_REQUIRED |
true |
Le worker intégré ne lance aucun plugin dont le manifeste ne déclare pas de signataire, sauf si le gouverneur de la plateforme a levé l'exigence pour ce plugin : il est refusé dans le scan (unsigned), et rien de lui n'est démarré. Un signataire déclaré est vérifié avec cosign avant le pull quoi que dise ce réglage. false lance tout plugin non signé sur cet exécuteur — préférez la dérogation par plugin. Chaque agent a le sien. Un plugin de rapport n'est pas concerné : son signataire est toujours exigé. |
VECTISPIRE_REPORT_CONCURRENCY |
2 |
Combien d'exécutions de rapport cette instance du plan de contrôle mène à la fois — chacune un pull, une vérification de signature et un conteneur de jusqu'à cinq minutes. Les plugins de rapport s'exécutent sur le point d'accès conteneur du plan de contrôle, sous l'interrupteur du worker intégré : avec VECTISPIRE_EMBEDDED_WORKER=false il n'y en a pas, et une demande de rapport est refusée. Le miroir des plugins est VECTISPIRE_PLUGIN_REGISTRY ci-dessus. |
VECTISPIRE_REPORT_INTERVAL |
10s |
À quelle fréquence il cherche les exécutions de rapport en attente, et celles qu'un exécuteur a laissées. |
VECTISPIRE_DISCOVERY_CONCURRENCY |
2 |
Combien de découvertes de forge cette instance du plan de contrôle mène à la fois — chacune un listage de jusqu'à trente minutes, qui dort sur les limites de débit de la forge. Les découvertes tournent sur chaque instance, quoi que dise VECTISPIRE_EMBEDDED_WORKER, et jamais sur un agent. |
VECTISPIRE_DISCOVERY_INTERVAL |
5s |
À quelle fréquence elle cherche les découvertes en attente, et celles qu'une instance a laissées en route. |
Threat intelligence¶
Le catalogue KEV de la CISA est lu toutes les six heures par la tâche de maintenance, le fichier EPSS quotidien du FIRST une fois par jour, et les deux à la demande depuis l'onglet Threat Intelligence des paramètres. Un scan lit les copies stockées et n'interroge personne : rien de ce que contient un dépôt ne quitte le plan de contrôle, et un parc sans accès sortant scanne de la même façon dès qu'un miroir sert les deux flux.
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_KEV_URL |
le known_exploited_vulnerabilities.json de la CISA |
Un miroir, pour un parc qui ne joint pas www.cisa.gov. Il doit servir le catalogue entier au format de la CISA : un document sans sa liste, qui ne liste rien, qui porte moins d'entrées que son count, ou plus ancien que le catalogue en usage est refusé, et le catalogue en usage est conservé — ce qu'un catalogue partiel omet se lirait comme « n'est plus exploité ». |
VECTISPIRE_KEV_ALLOW_PRIVATE |
false |
true autorise cette URL à se résoudre vers une adresse privée ou de bouclage — un miroir interne au parc. Le lien local (le point de métadonnées du cloud) reste refusé. Une propriété du déploiement plutôt qu'un paramètre, pour qu'aucune session ne puisse diriger cet appel vers le réseau interne. |
VECTISPIRE_EPSS_URL |
le https://epss.empiricalsecurity.com/epss_scores-current.csv.gz du FIRST |
Un miroir, pour un parc qui ne le joint pas — le fichier tel que le FIRST le publie, gzip ou CSV brut, première ligne #model_version:…,score_date:…. Une redirection vers le même hôte est suivie (l'adresse du FIRST redirige vers le fichier du jour) ; toute autre est refusée. Un fichier tronqué, qui a une ligne mal formée ou un score hors de [0, 1], qui porte moins de 100 000 scores ou un dixième de moins que le fichier en usage, qui dépasse 128 Mio une fois décompressé, ou plus ancien que le fichier en usage est refusé, et les scores en usage sont conservés. |
VECTISPIRE_EPSS_ALLOW_PRIVATE |
false |
Comme VECTISPIRE_KEV_ALLOW_PRIVATE, pour le miroir EPSS — chaque flux a son propre interrupteur, pour qu'ouvrir le réseau privé à l'un ne l'ouvre pas à l'autre. |
L'onglet indique, pour chaque flux, quand il a été lu pour la dernière fois, ce qui est en usage — la version et la date de publication CISA du catalogue, le modèle EPSS et le jour dont ses scores relèvent — et la dernière tentative en échec avec sa raison. Jamais synchronisé, un scan ne marque rien comme activement exploité et ne donne aucun score EPSS : inconnu, jamais zéro — le journal le dit à chaque scan. Une fois un fichier EPSS appliqué, les scores des constats ouverts en sont rafraîchis, si bien que la barrière, les scorecards et le classement EPSS lisent ceux du jour.
Audit¶
| Variable | Notes |
|---|---|
VECTISPIRE_AUDIT_MIRROR |
Un chemin où chaque entrée d'audit est ajoutée comme une ligne JSON, hors de la base de données qu'elle surveille. Désactivé signifie que le journal n'a qu'une copie, et l'écran de vérification le dit. |
Export SIEM¶
L'export se configure sur son écran de réglages, pas par des variables, tout comme la possibilité de joindre un collecteur sur un réseau privé : le réglage Autoriser une destination SIEM privée, réservé à un administrateur, désactivé par défaut et distinct de celui des notifications. Trois choses autour de lui relèvent du déploiement :
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_RELAY_INTERVAL |
60s |
La fréquence à laquelle l'outbox est vidée — notifications et événements SIEM confondus, donc l'attente la plus longue d'un événement après sa validation. |
HOSTNAME |
le nom de la machine | Ce que l'en-tête syslog déclare comme hôte émetteur. Les environnements de conteneurs le fixent. |
JAVA_TOOL_OPTIONS |
aucun | Options de la JVM. Un collecteur syslog sur TLS signé par une autorité privée n'a plus besoin de -Djavax.net.ssl.trustStore=… : épinglez son autorité sur la carte SIEM (TLS), qui ne la reconnaît que pour cette connexion et non pour toutes les connexions TLS sortantes. Le nom du collecteur est vérifié contre son certificat dans tous les cas. |
Personnalisation¶
| Variable | Défaut |
|---|---|
VECTISPIRE_BRAND_NAME |
Vectispire — en-tête, rapports PDF, et exports SARIF / VEX / CSAF |
VECTISPIRE_GITLAB_URL |
https://github.com/asmolabs/vectispire — l'URL des sources affichée à côté du pied de page « Powered by Vectispire ». Le nom est un reste de l'époque où le projet était hébergé sur GitLab ; le réglage est indépendant de la forge et son défaut n'est pas une URL GitLab. |
VECTISPIRE_VEX_AUTHOR |
le nom de marque |
VECTISPIRE_VERSION |
la version du build lui-même |
VECTISPIRE_BRANDING_NAME et VECTISPIRE_INSTANCE_NAME, d'anciennes graphies de VECTISPIRE_BRAND_NAME,
sont encore lues, dans cet ordre, quand elle n'est pas posée.
Documentation de l'API¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_API_DOCS_ENABLED |
false |
Sert le document OpenAPI, /v3/api-docs. |
VECTISPIRE_SWAGGER_UI_ENABLED |
false |
Sert Swagger UI, /swagger-ui.html, qui lit ce document. |
VECTISPIRE_ANONYMOUS_API_DOCS |
false |
Qui peut les lire une fois servis : fermé par défaut, une session ouverte est donc nécessaire. true convient à une démonstration publique, ou à un déploiement derrière une passerelle qui authentifie déjà — un catalogue complet des routes est exactement la reconnaissance que ce produit rapporte sur le parc des autres. |
Swagger UI est désactivé par défaut en production. Activez-le en développement :
Puis http://localhost:3180/swagger-ui.html.
File des analyses¶
| Variable | Défaut | Notes |
|---|---|---|
VECTISPIRE_SCAN_RETRY_DELAYS |
1m,5m,15m |
Combien de temps une analyse attend, après une tentative qui n'a pas pu s'exécuter pour une raison transitoire — le réseau, un délai dépassé, un bail expiré —, avant de pouvoir être réclamée de nouveau : la première valeur après la première tentative, la dernière pour toute tentative au-delà de la liste, dans la limite du nombre de tentatives (trois). Un échec permanent — une clé d'hôte refusée, un dépôt absent — échoue aussitôt et n'attend rien. Des durées telles que Spring les lit (30s, 2m) ; une durée négative empêche l'application de démarrer. |
Agents distants¶
VECTISPIRE_AGENT_TOKEN et VECTISPIRE_AGENT_SIGNING_KEY sont des identifiants : remettez-les à l'agent
comme des fichiers portant leur nom sous /run/secrets/, lus avec
SPRING_CONFIG_IMPORT=optional:configtree:/run/secrets/ — comme le font le profil with-agent de la
composition et le chart Helm — plutôt que comme des variables, que tout client du démon relit avec
docker inspect.
| Variable | Notes |
|---|---|
VECTISPIRE_URL |
Le plan de contrôle que l'agent interroge. |
VECTISPIRE_AGENT_TOKEN |
Une clé d'API avec la portée agent, affichée une seule fois à la création. |
VECTISPIRE_AGENT_WAIT |
Combien de temps une interrogation attend du travail, 30s par défaut ; le serveur tient la requête, si bien qu'une analyse en file part dans la seconde. |
VECTISPIRE_AGENT_RETRY |
Combien de temps l'agent attend avant d'interroger de nouveau après un échec, 10s. |
VECTISPIRE_AGENT_HEARTBEAT |
La fréquence à laquelle le bail d'une analyse en cours est renouvelé, 60s — bien en deçà du bail, pour qu'un battement manqué n'expire pas une analyse qui progresse. |
VECTISPIRE_IMAGE_SYFT … VECTISPIRE_IMAGE_SEMGREP |
Les images des scanners sur cet agent, comme pour le plan de contrôle plus haut. Un agent sur un réseau fermé est là où elles pointent d'ordinaire vers un registre interne. |
VECTISPIRE_AGENT_SIGNING_KEY |
La moitié privée de la clé Ed25519 qu'un administrateur a épinglée pour cet agent, en base64. Vide : les résultats sont acceptés sur la seule clé API. L'épingler est ce qui empêche une clé volée de déclarer une cible propre — le résultat vide qui résout tout un backlog. |
VECTISPIRE_PLUGIN_REGISTRY |
Le registre interne depuis lequel cet agent tire les images de plugins — hôte relogé, chemin et digest conservés. Vide, chacune est tirée de son propre registre, qu'un agent sur réseau fermé ne peut pas atteindre : le plugin est alors absent du scan et ses issues restent telles quelles. |
VECTISPIRE_PLUGIN_SIGNATURE_REQUIRED |
Activé par défaut : cet agent ne lance aucun plugin dont le manifeste ne déclare pas de signataire, sauf dérogation du gouverneur pour ce plugin — la tâche la porte. false lance tout plugin non signé sur l'hôte de cet agent. Un signataire déclaré est vérifié avant le pull dans tous les cas. |
VECTISPIRE_VULNERABILITY_DB_DIR |
Où cet agent garde la base du rapprocheur de vulnérabilités, téléchargée une fois et partagée en lecture seule par ses analyses — comme pour le plan de contrôle plus haut. Vide : un répertoire du répertoire temporaire. |
Le nombre d'analyses qu'un agent mène en parallèle n'est pas l'une de ses variables : il se règle
sur la ligne de l'agent dans le plan de contrôle, de 1 à 16, et l'agent le lit dans chaque réponse à
ses interrogations — voir
Mener plusieurs analyses en parallèle.
VECTISPIRE_SCAN_MAX_CONCURRENT est celle du worker intégré, et n'a aucun effet sur un agent distant :
elle compte les analyses que tient le worker de cette instance, jamais celles des agents.
Voir Agents.