Skip to content

💡 [REQUEST] - Rotation préventive configurable des tokens miroir GitLab (seuil antérieur à l'expiration) #2691

Description

@shikanime

Description

Le token d'accès groupe GitLab (<slug>-bot) utilisé pour le miroir des dépôts est créé avec une expiration GITLAB_MIRROR_TOKEN_EXPIRATION_DAYS (défaut 365 jours). Sa rotation n'est pourtant que réactive : getOrRotateMirrorCreds ne remplace le token que s'il est absent de Vault ou invalide (validateProjectToken). Il n'existe aucun seuil de rotation préventive : un token dont la rotation échoue silencieusement reste valide jusqu'à son expiration, et sa mort survient sans remplacement préparé.

Il faut un paramètre de configuration global GITLAB_MIRROR_TOKEN_ROTATION_THRESHOLD_DAYS (entier positif, en jours) : lorsque l'âge du secret Vault dépasse ce seuil, le token est régénéré de manière préventive (même mécanique que la rotation préventive des robots Harbor, cf. HARBOR_ROBOT_ROTATION_THRESHOLD_DAYS).
La rotation doit rester strictement inférieure à l'expiration pour qu'un token soit toujours remplacé avant qu'il n'expire : cette contrainte doit être validée par le schéma de configuration (rejet au démarrage si rotation >= expiration).

PRs liées

Issues liées

Exemples simples

  • GITLAB_MIRROR_TOKEN_EXPIRATION_DAYS=365, GITLAB_MIRROR_TOKEN_ROTATION_THRESHOLD_DAYS=180 : le token expire au bout de 365 jours et est rĂ©gĂ©nĂ©rĂ© vers 180 jours.
  • GITLAB_MIRROR_TOKEN_EXPIRATION_DAYS=180, GITLAB_MIRROR_TOKEN_ROTATION_THRESHOLD_DAYS=180 : la configuration est rejetĂ©e au dĂ©marrage.

Spécifications techniques

  • apps/server-nestjs/src/config/gitlab.config.ts : nouveau champ GITLAB_MIRROR_TOKEN_ROTATION_THRESHOLD_DAYS (z.coerce.number().int().positive(), dĂ©faut Ă  dĂ©finir), transformĂ© en mirrorTokenRotationThresholdDays ; superRefine rejetant mirrorTokenRotationThresholdDays >= mirrorTokenExpirationDays.
  • apps/server-nestjs/src/modules/gitlab/gitlab.service.ts : getOrRotateMirrorCreds vĂ©rifie metadata.created_time du secret Vault et rĂ©gĂ©nère le token quand l'âge dĂ©passe le seuil (prĂ©cĂ©dent : uniquement absent/invalide).
  • apps/server-nestjs/src/modules/gitlab/gitlab-client.service.ts : non modifiĂ© (l'expiration est dĂ©jĂ  pilotĂ©e par GITLAB_MIRROR_TOKEN_EXPIRATION_DAYS).
  • Le plugin historique plugins/gitlab n'est pas modifiĂ© (cible backend : apps/server-nestjs).

Définition du fini

  • La fonctionnalitĂ© est terminĂ©e
  • Les tests liĂ©s Ă  cette fonctionnalitĂ© ont Ă©tĂ© ajoutĂ©s
  • La documentation liĂ©e a Ă©tĂ© ajoutĂ©e

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions