InfraGuard

Projets (Service ▸ Projets)

Un registre partagé de métadonnées de projet — enregistrez le code source (GitHub), le CI/CD (Jenkins), les liens web/db, les cibles de sauvegarde et les références aux secrets (ce n’est pas un outil de déploiement).

Vue d’ensemble — ce que fait cet écran

Projets est un registre qui rassemble les métadonnées de tous les projets exploités par votre équipe en un seul endroit partagé. Pour chaque projet, vous enregistrez son dépôt de code (GitHub, etc.), sa chaîne de CI/CD (Jenkins), les services web et les bases de données qu’il utilise, ses cibles de sauvegarde et — surtout — l’emplacement de ses secrets. N’importe quel membre de l’équipe peut alors répondre d’un coup d’œil : « de quoi est fait ce projet, où est-il déployé, et quel secret se trouve où ? »

Cet écran n’est pas un outil de déploiement. Les compilations et les déploiements réels ont lieu dans Jenkins. InfraGuard ne déclenche aucune chaîne depuis cet écran ; les données enregistrées constituent une documentation partagée. Les URL, les noms de Job et les branches que vous y stockez ne sont que des liens et des étiquettes de référence — rien n’est exécuté.

Principes de conception fondamentaux :

Quand l’utiliser

Disposition

Bandeau de KPI

Cellule Signification
Projets Nombre total de projets enregistrés
Externes Projets avec accessible=1 (une URL externe)
Internes Projets avec accessible=0 (internes uniquement, non exposés)
Archivés Projets avec status=archived

Cartes de projet

Chaque carte affiche :

Fenêtre d’édition (6 onglets)

Une fenêtre modale large (.infr-modal__panel--wide) qui répartit la saisie par onglet.

Onglet Champs
Vue d’ensemble Nom (obligatoire) · Clé (slug) · Statut · Groupe · Bascule d’accès externe · URL · Résumé · Étiquettes
Code source Fournisseur du dépôt (GitHub/GitLab/Gitea/Bitbucket/Autre) · URL du dépôt · Branche par défaut · Visibilité (public/private/internal)
CI/CD URL de Jenkins et répéteur d’environnements (par dev/staging/prod : URL de déploiement · branche · Job Jenkins · note)
Liens Cases à cocher des services web (infr_web_service enregistrés) et cases à cocher BD (collecteur) (collecteurs avec access=database)
Sauvegarde Répéteur de cibles de sauvegarde (type · cible · planification · note)
Secrets Références aux clés du coffre (cocher et afficher la valeur) et répéteur de la liste de contrôle des secrets (élément · emplacement · référence · note)

Mode d’emploi

Enregistrer un projet

  1. Cliquez sur [Ajouter un projet] en haut à droite (droit d’écriture requis).
  2. Dans l’onglet Vue d’ensemble, saisissez le nom (obligatoire). La clé (slug) est facultative et doit correspondre à ^[a-z0-9_-]+$ (par exemple coin-market).
  3. Si le service est joignable de l’extérieur, activez la bascule Accessible de l’extérieur et saisissez son URL. Pour un usage strictement interne, laissez-la désactivée : le champ URL est alors grisé.
  4. Renseignez les onglets restants (Code source, CI/CD, Liens, Sauvegarde, Secrets) selon vos besoins — ils sont tous facultatifs.
  5. [Enregistrer] — le serveur valide, effectue un upsert dans infr_project et rafraîchit la carte.

Enregistrer des environnements de CI/CD

Dans l’onglet CI/CD, saisissez l’URL de Jenkins, puis utilisez [Ajouter un environnement] pour ajouter les cibles de déploiement ligne par ligne :

{
  "env": "prod",
  "url": "https://coin.example.com",
  "branch": "main",
  "jenkins_job": "coin_market-deploy-prod",
  "note": "blue/green"
}

Lier web/db

Dans l’onglet Liens, cochez les ressources utilisées par ce projet.

Chaque liaison accepte jusqu’à 50 entrées.

Déclarer les cibles de sauvegarde

Utilisez le répéteur de l’onglet Sauvegarde pour documenter la politique de sauvegarde de ce projet (type · cible · planification · note). Il s’agit de métadonnées de référence qui ne sont pas exécutées — les travaux de sauvegarde réels se gèrent dans le Tableau de planification.

Gérer les informations confidentielles (la fonction clé)

Les secrets reposent sur deux mécanismes utilisés conjointement. Aucun des deux ne stocke la valeur réelle du secret dans infr_project.

1) Références aux clés du coffre (vault_key_ids)

Les affichages de valeurs du coffre sont audités. Chaque affichage inscrit vault_key.reveal (target=vault_key, via=project) dans infr_audit_log. La valeur apparaît brièvement et se copie dans le presse-papiers au clic — ne l’affichez que lorsque vous en avez besoin. L’enregistrement de projet stocké ne conserve que la référence à l’id de la clé.

2) Liste de contrôle des secrets (secrets, masquée)

Pour les secrets absents du coffre (ou détenus à l’extérieur), consignez uniquement l’emplacement. La valeur n’est jamais stockée.

Champ Exemple
label STRIPE_SECRET_KEY
location .env (prod server /var/www)
ref 1Password › Coin › prod
note rotate quarterly

La fonction cleanList() du serveur ne conserve que les clés autorisées (label/location/ref/note) et tronque chacune à 255 caractères. Si les quatre champs sont vides, la ligne est abandonnée.

Supprimer

Supprimez depuis le coin inférieur gauche de la fenêtre d’édition ou via [Supprimer] sur la carte. Après confirmation, POST /service/projects/delete supprime la ligne infr_project et consigne project.delete.

Sources de données

Donnée Source
Enregistrements de projet infr_project (migration 000715)
Groupes (catégories) infr_asset_group (via group_id)
Options de service web infr_web_service (nom · domaine)
Options de BD (collecteur) infr_collector avec access=database (key · title · host_alias)
Options de clé du coffre infr_vault_key — masquées (id · catégorie · titre · nom d’utilisateur, sans la valeur)
Affichage de la valeur du coffre infr_vault_key.revealSecret() (déchiffrement, uniquement à l’affichage)
Journal d’audit infr_audit_log (project.create/update/delete, vault_key.reveal)

Schéma de stockage (infr_project, extrait)

key            varchar(60) unique nullable   # slug
group_id       int -> infr_asset_group
name           varchar(160)                  # obligatoire
status         enum(active,paused,archived)
accessible     boolean default 1
url            varchar(255)                  # exposée lorsque accessible=1
summary        text
repo_provider  enum(github,gitlab,gitea,bitbucket,other)
repo_url / default_branch / visibility(public,private,internal)
jenkins_url    varchar(255)
environments   json  [{env,url,branch,jenkins_job,note}]
web_refs       json  -> infr_web_service id array
db_refs        json  -> infr_collector(database) key array
backup_targets json  [{kind,target,schedule,note}]
vault_key_ids  json  -> infr_vault_key id array (values stay in the vault)
secrets        json  [{label,location,ref,note}]  # liste de contrôle, aucune valeur stockée
tags / meta    json

Cet écran n’interroge pas en continu. Il ne recharge la liste qu’à l’enregistrement, à la suppression ou via le bouton d’actualisation (GET /service/projects/list). L’état en temps réel est pris en charge par Service ▸ Catalogue et Service ▸ Web.

Accès

Action Route Niveau minimal
Lecture (index/list) GET /service/projects, /list 1 (demo, infr.auth)
Afficher une valeur du coffre POST /service/projects/vault-reveal 1 (+ audit)
Enregistrer (créer/modifier) POST /service/projects/save 2 (staff)
Supprimer POST /service/projects/delete 2 (staff)

Dépannage et FAQ

Q. J’appuie sur Enregistrer et j’obtiens une 403. L’écriture exige le niveau 2 ou plus. Un compte en lecture seule (niveau 1) peut uniquement consulter et afficher les valeurs du coffre. Demandez à un administrateur de relever votre niveau.

Q. [Afficher] renvoie une valeur vide. Soit cette entrée du coffre ne contient aucun secret (hasSecret=false), soit le déchiffrement a échoué (par exemple parce qu’APP_KEY a changé). Redéfinissez la valeur dans Inventaire ▸ Coffre à clés. revealSecret() renvoie null en cas d’échec.

Q. Rien n’apparaît dans les listes de liaison web/BD. Les services web doivent d’abord exister dans Service ▸ Web, et les options de BD nécessitent des collecteurs avec access=database. Enregistrez-les, puis rouvrez la fenêtre du projet : les options seront remplies.

Q. L’enregistrement de la clé (slug) déclenche une erreur de format. La clé n’accepte que des lettres minuscules, des chiffres, des tirets et des tirets bas (^[a-z0-9_-]+$, 60 caractères au maximum). Retirez les espaces, les majuscules et les autres symboles. La clé étant facultative, vous pouvez aussi la laisser vide.

Q. Puis-je déclencher un déploiement ici ? Non. Les déploiements s’exécutent dans Jenkins. Cet écran conserve l’URL de Jenkins et les noms de Job à titre de documentation uniquement.

Q. Puis-je simplement saisir la valeur du secret dans une note de secrets ? Jamais. secrets est une carte d’emplacements qui ne stocke aucune valeur. Placez la valeur réelle dans le coffre chiffré Inventaire ▸ Coffre à clés et référencez-la via vault_key_ids.

Voir aussi

프로젝트 레지스트리
프로젝트 레지스트리