Configuration du dépôt GitHub
L'intégration de l'outil Git Repos and Issue Tracking est basée sur Github, qui est un service d'hébergement en ligne pour les dépôts (repos) de Git. Vous pouvez avoir des copies en local et à distance de vos référentiels. Pour en savoir plus, voir Git Repos and Issue Tracking{: external}.
Les règles de protection des branches imposent la sécurité, la collaboration et garantissent que votre équipe respecte les normes de qualité du code et de gestion des changements. Cette rubrique vous aide à définir et à gérer les règles de branche. DevSecOps vous oblige à configurer les règles de protection des branches de votreGitHub dépôt.
GitHub prend désormais en charge la définition de jeux de règles pour la protection des branches- un mécanisme plus granulaire et plus flexible pour définir les protections et les politiques au niveau du référentiel. Pour plus d'informations, voir À propos des jeux de règles
Avantages de la protection de la succursale
-
Amélioration de la qualité du code et de la collaboration: l'exigence de demandes d'extraction et d'approbations via la protection des succursales améliore la qualité du code et la collaboration. Cela garantit la cohérence du code et le respect des normes de codage de l'équipe. Les modifications font l'objet d'un examen et permettent de détecter les bogues et les erreurs dès le début, ce qui se traduit par un code plus fiable et plus facile à gérer.
-
Visibilité accrue des modifications: les demandes d'extraction obligatoires offrent une visibilité accrue des modifications de code. Cette étape simplifie le suivi des modifications et l'identification des problèmes potentiels.
-
Garantir l'intégrité du code: contrôle l'état de la demande d'extraction-valide le code en exécutant des tests automatisés par rapport à des normes et des pointeurs prédéfinis avant qu'une demande d'extraction ne puisse être fusionnée. Cette étape maintient l'intégrité du code en intercepant les bogues et autres problèmes au début du cycle de développement.
Avantages des jeux de règles
-
Ciblage granulaire: Appliquer des règles aux branches et aux étiquettes à l'aide de puissants modèles de correspondance (par exemple, release/**, refs/tags/v*)
-
Gestion centralisée: Configurez et gérez toutes les protections de branches et de balises à partir d'une seule interface. GitHub L'interface utilisateur et l'API fournissent des associations de règles et des détails d'application clairs pour une meilleure transparence.
-
Une plus grande flexibilité: Contrairement à la protection traditionnelle des branches (qui n'autorise qu'une seule règle par branche), les jeux de règles permettent de définir des jeux de règles multiples et superposés qui peuvent s'appliquer à plusieurs branches à l'aide de modèles. Une seule branche peut avoir plusieurs ensembles de règles applicables, ce qui permet un contrôle fin, des politiques réutilisables entre les branches et un meilleur alignement avec les flux de travail complexes.
Configuration des jeux de règles dans GitHub
Pour configurer les jeux de règles dans GitHub pour votre référentiel, suivez ces étapes :
Accès aux paramètres des jeux de règles
- Accédez à l'onglet Paramètres de votre référentiel sur GitHub.
- Dans la barre latérale gauche, sous Règles, cliquez sur Jeux de règles pour accéder à la page de configuration des jeux de règles.
- Cliquez sur le bouton vert Nouvel ensemble RuleSet de branche
- Ajoutez les informations nécessaires pour définir le jeu de règles et cliquez sur Créer.
Ajout de règles de protection dans les ensembles de règles
En cliquant sur le bouton vert New Branch RuleSet, une page s'affiche pour compléter les détails de l'ensemble de règles.
- Nommez votre RuleSet et activez/désactivez/évaluez l'ensemble de règles en sélectionnant dans le menu déroulant le statut de l'activation
- Configurez les branches cibles en cliquant sur Ajouter une cible. Sélectionnez Inclure**, Exclure****, Défaut** ou Tous pour configurer les critères de ciblage de la branche. GitHub prend en charge la syntaxe fnmatch pour le ciblage basé sur des motifs.
- Configurez les autorisations de contournement dans la liste des contournements en cliquant sur Ajouter un contournement. Vous pouvez ajouter les rôles requis qui peuvent contourner les contrôles. Vous pouvez laisser la liste vide (ce qui équivaut à activer l'option Ne pas autoriser le contournement de ces paramètres dans les paramètres traditionnels de protection de la branche).
-
Activez l'option Require a pull request before merging sous Branch rules.
-
Activez l'option Exiger des approbations et définissez l'option Nombre requis d'approbations avant la fusion sur au moins
1ou le nombre d'approbations requises dans votre équipe. -
Activez l'option Ignorer les approbations des demandes d'extraction périmées lorsque de nouvelles validations sont envoyées par commande push pour examiner toutes les modifications les plus récentes avant qu'elles ne puissent être fusionnées dans une autre branche.
Limitation
Actuellement, la liste des acteurs du contournement ne peut être récupérée qu'à partir des ensembles de règles au niveau du référentiel. Si un ensemble de règles est défini au niveau de l'organisation, ces informations ne peuvent pas être extraites de ces ensembles de règles, en vertu des autorisations standard.
Pour récupérer la liste des acteurs du contournement à partir des jeux de règles au niveau de l'organisation, veuillez examiner les accès requis et accorder au compte Functional ID/GitHub qui exécute le pipeline des privilèges élevés (accès de propriétaire à l'organisation ). Cela est dû au modèle d'autorisation GitHub's, qui restreint la visibilité des métadonnées des acteurs de contournement des règles au niveau de l'organisation sans autorisation appropriée pour empêcher la fuite d'informations sensibles.
Pour plus d'informations, consultez la documentation officielle de GitHub sur les jeux de règles d'organisation et les acteurs de contournement.
Configuration des contrôles d'état pour les jeux de règles
- Activez l'option
Require status checks to pass before merging.
Pour pouvoir les définir comme des vérifications de statut requises, vous devez d'abord déclencher un pipeline PR/CI au préalable (seules les vérifications de statut existantes sont répertoriées dans l'interface utilisateur).
Après avoir activé l'option Require status checks to pass before merging, vous devez configurer les vérifications de statut spécifiques qui doivent être effectuées avant de fusionner une demande d'extraction.
- Dans la liste des vérifications de statut disponibles, activez les options suivantes pour les vérifications:
tekton/code-branch-protectiontekton/code-cis-checktekton/code-detect-secretstekton/code-unit-teststekton/code-vulnerability-scan
Ces vérifications sont les vérifications par défaut de l'état des demandes d'extraction dans le pipeline.
Ajout de tous les jeux de règles par défaut (configuration complète)
Cette commande CURL définit à la fois les vérifications d'état requises par défaut et les paramètres de révision des demandes d'extraction.
curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/rulesets" \
-XPUT -d '{
"name": "Branch Protection Equivalent Ruleset",
"target": "branch",
"enforcement": "active",
"bypass_actors": [], // as the list is empty no one can bypass which is equivalent to enforce_admins: true with no restriction
"conditions": {
"ref_name": {
"include": ["refs/heads/master"],
"exclude": []
}
},
"rules": [
{
"type": "required_status_checks",
"parameters": {
"strict_required_status_checks_policy": true,
"required_status_checks": [
{
"context": "tekton/code-unit-tests"
},
{
"context": "tekton/code-branch-protection"
},
{
"context": "tekton/code-cis-check"
},
{
"context": "tekton/code-vulnerability-scan"
},
{
"context": "tekton/code-detect-secrets"
}
]
}
},
{
"type": "pull_request",
"parameters": {
"required_approving_review_count": 1,
"dismiss_stale_reviews_on_push": true,
"require_code_owner_review": false,
"require_last_push_approval": false,
"required_review_thread_resolution": false
}
}
]
}'
Configuration des règles de protection de branche dans GitHub
Pour configurer des règles de protection de branche dans GitHub pour votre référentiel, procédez comme suit:
Accès aux paramètres de protection de branche
- Accédez à l'onglet Paramètres de votre référentiel sur GitHub.
- Dans la barre latérale de gauche, cliquez sur Branches pour accéder à la page des paramètres de la branche.
- Faites défiler l'écran jusqu'à la section Règles de protection des branches.
- Localisez la branche que vous souhaitez configurer (généralement la branche "main").
- Sélectionnez le bouton Editer en regard du nom de la branche pour modifier ses règles de protection.
Ajout de règles de protection de branche
Si aucune règle existante n'est configurée, cliquez sur le bouton Ajouter une règle et entrez le nom de la branche correspondante dans la zone **Branch name pattern**. Procédez ensuite aux étapes suivantes :
- Activez l'option Exiger une demande d'extraction avant la fusion.
- Activez l'option Exiger des approbations et définissez l'option Nombre requis d'approbations avant la fusion sur au moins
1ou le nombre d'approbations requises dans votre équipe. - Activez l'option Ignorer les approbations des demandes d'extraction périmées lorsque de nouvelles validations sont envoyées par commande push pour examiner toutes les modifications les plus récentes avant qu'elles ne puissent être fusionnées dans une autre branche.
- Activez l'option Ne pas autoriser le contournement des paramètres pour empêcher les administrateurs et les rôles personnalisés disposant de l'autorisation de contourner les protections de branche de contourner les contrôles de protection de branche requis.
Actuellement, les avertissements sont affichés dans les journaux si la vérification de Do not allow bypassing these settings n'est pas activée. Il n'échouera pas au contrôle de la protection des branches tant que ce contrôle ne
sera pas rendu obligatoire d'ici à la mi-mars. Veuillez activer le contrôle d'ici la mi-mars afin d'éviter toute défaillance du pipeline.
Les demandes d'extraction doivent être approuvées avant de les fusionner dans la branche maître. Cette règle garantit que les modifications sont examinées et examinées par les membres de l'équipe, favorise la collaboration, la qualité du code et le respect des normes du projet.
Configuration des vérifications de statut
Des contrôles de statut sont requis dansDevSecOps pour appliquer un ensemble complet de mesures de qualité et de sécurité sur le code. Ainsi, les changements de code sont sûrs et fiables avant d'être fusionnés dans une branche protégée. En exigeant que les vérifications de statut soient effectuées avant la fusion, vous pouvez empêcher le code endommagé ou non testé d'être déployé en production.
Lorsqu'une demande d'extraction est soumise, le pipeline PR/CI déclenche automatiquement une série de tests, de validations et d'autres vérifications pour vérifier les modifications proposées.
Ce n'est que lorsque toutes les vérifications de statut requises auront abouti que la demande d'extraction sera considérée comme éligible pour la fusion dans la branche protégée.
En tirant parti des contrôles de statut au seinDevSecOps, vous pouvez maintenir la qualité du code, adhérer aux normes de codage et garantir l'absence de vulnérabilités ou de défauts critiques avant d'incorporer des modifications dans la branche protégée de votre projet.
Pour plus d'informations sur la configuration des vérifications de statut, voir la section Configuration des vérifications de statut uniquement(Configuration des vérifications de statut) pour une implémentation de référence.
- Activez l'option
Require status checks to pass before merging.
Pour pouvoir les définir comme des vérifications de statut requises, vous devez d'abord déclencher un pipeline PR/CI au préalable (seules les vérifications de statut existantes sont répertoriées dans l'interface utilisateur).
Après avoir activé l'option Require status checks to pass before merging, vous devez configurer les vérifications de statut spécifiques qui doivent être effectuées avant de fusionner une demande d'extraction.
- Dans la liste des vérifications de statut disponibles, activez les options suivantes pour les vérifications:
tekton/code-branch-protectiontekton/code-cis-checktekton/code-detect-secretstekton/code-unit-teststekton/code-vulnerability-scan
Les vérifications de statut affichées doivent être effectuées avant la fusion d'une demande d'extraction.
Ces vérifications sont les vérifications par défaut de l'état des demandes d'extraction dans le pipeline.
Définition de la liste personnalisée des vérifications de conformité
Vous pouvez également ajouter votre propre liste de vérifications de statut à valider par le pipeline. Pour ce faire, définissez d'abord votre liste de vérifications de statut requises dans le référentiel, et définissez également la valeur
branch-protection-rules-path en définissant son chemin d'accès à un fichier JSON contenant les mêmes vérifications de statut de liste, c'est-à-dire relatives à votre référentiel d'applications.
|branch-protection-rules-path |text | Définissez le chemin d'accès à un fichier JSON contenant la liste personnalisée des vérifications de conformité requises, relative au référentiel d'applications intégré. | Facultatif |
Le fichier JSON est de ce format
[{
"type": "branch-protection",
"name": "code-review",
"params": {
"checks": [
"tekton/code-branch-protection",
"tekton/code-unit-tests",
"tekton/code-cis-check",
"tekton/code-vulnerability-scan",
"tekton/code-detect-secrets"
]
}
}]
Note :DevSecOps par défaut, le résultat des contrôles de protection des succursales sera basé sur les résultats des contrôles de statut qui ont le tekton/ préfixe.
Définition d'un préfixe personnalisé pour les vérifications de conformité
Si vous souhaitez modifier le tekton préfixe à autre chose dansGitHub, vous devez définir une valeur pour branch-protection-status-check-prefix propriété d'environnement dans votre pipeline.
|branch-protection-status-check-prefix |text | Texte de préfixe pour la vérification du statut de protection de la branche (par défaut tekton) | Facultatif |
Une fois que vous avez configuré les paramètres de protection de branche, toute tentative de fusion d'une demande d'extraction vers la branche protégée sera rejetée sauf si les conditions requises sont remplies.
Paramètres facultatifs
Outre les paramètres ci-dessus, vous avez la possibilité de configurer les paramètres supplémentaires suivants pour les règles de protection des branches. Veuillez noter que les contrôles de statut fournis parDevSecOps ne validera ni n’appliquera ces paramètres.
-
Exiger des validations signées: ce paramètre requiert que toutes les validations de la branche protégée soient signées, ce qui permet d'éviter que des modifications malveillantes soient apportées au code.
-
Exiger l'historique linéaire: ce paramètre requiert que toutes les validations de la branche protégée aient un historique linéaire. Cela signifie que toutes les demandes d'extraction fusionnées dans la branche protégée doivent utiliser une fusion de squash ou une fusion de resynchronisation. Un historique de validation strictement linéaire peut aider les équipes à inverser les changements plus facilement.
Ces paramètres supplémentaires sont facultatifs et peuvent être personnalisés en fonction de vos exigences et préférences spécifiques.
Définition des règles de protection de branche via la commande CURL
Ajout de toutes les règles de protection de branche (configuration complète)
Les règles de protection des branches peuvent également être définies par la commande curl suivante, après le remplacement des variables $GH_TOKEN, $OWNER, $APP_API_URL $REPO, $BRANCH.
curl -u ":$GH_TOKEN" $APP_API_URL/repos/$OWNER/$REPO/branches/$BRANCH/protection -XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'
Cette commande CURL configure à la fois les vérifications de statut requises et les paramètres de révision de demande d'extraction.
Une fois ces paramètres configurés, toute tentative de fusion d'une demande d'extraction vers $BRANCH sera rejetée sauf si la demande d'extraction a été approuvée par au moins un autre utilisateur.
Configuration des vérifications de statut uniquement (Configuration des vérifications de statut)
Si vous souhaitez uniquement configurer les vérifications de statut requises, vous pouvez utiliser la commande CURL suivante comme référence:
curl -H "Authorization: Bearer $(cat ${APP_TOKEN_PATH})" "${APP_API_URL}/repos/${APP_REPO_OWNER}/${APP_REPO_NAME}/branches/master/protection" \
-XPUT -d '{"required_pull_request_reviews":{"dismiss_stale_reviews":true},"required_status_checks":{"strict":true,"contexts":["tekton/code-branch-protection","tekton/code-unit-tests","tekton/code-cis-check","tekton/code-vulnerability-scan","tekton/code-detect-secrets"]},"enforce_admins":null,"restrictions":null}'
Dans notre implémentation de référence, nous avons déjà fourni un exemple de configuration pour le référentiel hello-compliance-app. Vous pouvez donc l'utiliser comme point de départ et le personnaliser en fonction de vos besoins.
Suivez l'exemple précédent pour garantir la qualité du code et le respect des mesures de sécurité pour votre référentiel. Pour que cela se produise, configurez les règles de protection de branche et les vérifications de statut nécessaires.