Présentation du problème
GitHub comptait plus de 14 000 référentiels, mais moins de la moitié d'entre eux avaient un propriétaire clair. Cela posait problème, notamment lors des efforts de remédiation de la scanne de secrets, car il était difficile de savoir qui était responsable de chaque référentiel.
Le modèle de propriété initial
GitHub utilisait un catalogue de services pour suivre la propriété des services déployés. Chaque entrée de service enregistrait des métadonnées telles que le référentiel dans lequel il se trouvait, l'équipe propriétaire, le sponsor exécutif et les informations de support. Cependant, ce modèle présentait un problème : un service ne pouvait être attaché qu'à un seul référentiel, mais un référentiel pouvait avoir plusieurs services.
Conception du nouveau modèle de propriété
GitHub a décidé de rendre la propriété des référentiels une propriété de premier ordre. Ils ont choisi d'utiliser des propriétés personnalisées GitHub pour stocker la propriété, ce qui leur a permis de gérer la propriété de manière native, structurée et queryable. Ils ont créé deux propriétés personnalisées : ownership-type et ownership-name. La première acceptait trois valeurs : « Service Catalog », « Hubber Handle » (un « Hubber » est un employé de GitHub) et « Team ». La seconde était un champ de texte avec une validation légère.
Mise en œuvre et résultats
GitHub a construit une application GitHub pour valider la propriété des référentiels et a utilisé un travail CronJob Kubernetes pour exécuter la logique d'application. Ils ont archivé les référentiels qui n'avaient pas de propriétaire après une période de grâce de 30 jours. Au total, ils ont archivé environ 8 000 référentiels et ont validé la propriété pour chaque référentiel actif en moins de 45 jours.
ownership-type : Service Catalog, Hubber Handle, Team
ownership-name : texte avec validation légère
Les résultats de cette opération ont été positifs, avec une meilleure visibilité sur la propriété des référentiels et une réduction des risques liés à la sécurité. Cependant, il y a eu quelques incidents mineurs qui ont mis en évidence des cas de bord intéressants, tels que l'archivage d'un référentiel où la propriété n'avait pas été appliquée.