GUIDE TECHNIQUE · GITHUB
Sécuriser GitHub Actions : permissions, secrets et approbations
Renforcer la sécurité d’un pipeline GitHub Actions : permissions minimales, actions épinglées, gestion des secrets, approbations d’environnement et contrôles des pull requests externes.
L’ESSENTIEL EN BREF
Les étapes clés
Ce guide présente 6 étapes, de « Cartographier les déclencheurs et permissions » à « Maintenir et auditer le pipeline ».
Avant de commencer : Un dépôt de recette GitHub Actions administrable.
01 · CADRAGE
Périmètre et résultat visé
Résultat attendu : La CI sur pull request fonctionne avec contents: read.
Public concerné : DevSecOps, DevOps, responsables de plateforme, développeurs et responsables sécurité
GitHub Actions avec workflows YAML, GITHUB_TOKEN et environnements GitHub. Disponibilité des protections suivant l’offre GitHub et les politiques d’organisation.
Contrôlez les versions, les droits et les options disponibles dans votre environnement avant de suivre la procédure.
02 · AVANT DE COMMENCER
Prérequis et points de contrôle
- Un dépôt de recette GitHub Actions administrable.
- Une liste des workflows existants et des permissions réellement nécessaires à chaque job.
- Une politique de protection des secrets et des approbations d’environnement, définie par l’organisation.
- Un accès aux journaux d’exécution pour confirmer la configuration sans exposer d’identifiants.
03 · VUE D’ENSEMBLE
Comprendre l’architecture et les flux
04 · TUTORIEL
Procédure complète, étape par étape
Suivez les étapes dans l’ordre et contrôlez chaque résultat avant de poursuivre. Renseignez les paramètres adaptés à votre environnement.
ÉTAPE 1 / 6
Cartographier les déclencheurs et permissions
Chaque trigger GitHub Actions porte un niveau de confiance différent.
- Lister les workflows et leurs événements.
- Identifier les jobs qui écrivent dans le dépôt ou utilisent des secrets.
- Distinguer CI sur pull request et publication après fusion approuvée.
# Rechercher dans .github/workflows :
# on: pull_request / push / workflow_dispatch
# permissions: ...
# environment: ...À vérifier : Une liste des workflows à risque et des accès nécessaires est établie.
Point de vigilance : Ne pas exécuter du code issu d’une pull request non fiable avec un workflow pull_request_target privilégié.
ÉTAPE 2 / 6
Limiter les permissions de GITHUB_TOKEN
Le moindre privilège réduit les dommages en cas de dépendance compromise.
- Définir permissions: contents: read en haut du workflow CI.
- Ajouter des permissions plus élevées seulement dans un job identifié.
- Éviter de conserver les credentials Git sur le runner si aucun push n’est nécessaire.
name: CI sécurisée
on:
pull_request:
branches: [main]
permissions:
contents: read
jobs:
checks:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
persist-credentials: false
- run: echo 'Contrôles CI sur code non privilégié'À vérifier : La CI peut lire le dépôt sans disposer de droits d’écriture par défaut.
Point de vigilance : Vérifier les permissions héritées au niveau organisation et les besoins réels des jobs.
ÉTAPE 3 / 6
Épingler les actions et contrôler leur provenance
Un tag d’action peut évoluer, contrairement à la référence d’un commit approuvé.
- Lister toutes les dépendances uses: des workflows.
- Vérifier leur dépôt d’origine, le commit de version choisi et sa politique de mise à jour.
- Remplacer les tags mouvants par les SHA complets après revue de la version.
# Épingler après vérification de provenance :
# uses: actions/checkout@<SHA-complet-valide>
# Vérifier aussi les actions tierces utilisées.À vérifier : Les actions sensibles sont référencées par SHA complet et mises à jour de façon gouvernée.
Point de vigilance : Ne jamais copier un SHA sans vérifier qu’il correspond à la version annoncée dans le dépôt de l’action.
ÉTAPE 4 / 6
Isoler les secrets et le déploiement
Les secrets de production ne sont pas nécessaires aux tests de code proposés par des contributeurs.
- Utiliser des environnements GitHub pour les jobs de déploiement.
- Exiger des approbateurs sur les environnements critiques lorsque disponible.
- Préférer OIDC et les identités courtes durées aux secrets cloud statiques lorsque le fournisseur le permet.
# Exemple de job de déploiement (structure) :
# environment: production
# permissions:
# contents: read
# id-token: write # seulement pour un flux OIDC approuvéÀ vérifier : Le déploiement repose sur un job distinct et des approbations adaptées.
Point de vigilance : Ne jamais donner id-token: write à un job sans besoin documenté d’authentification fédérée.
ÉTAPE 5 / 6
Tester les cas défavorables sans manipuler de vrais secrets
Une politique de sécurité doit être confirmée sur une exécution de recette.
- Ouvrir une PR de documentation ne nécessitant aucun secret.
- Vérifier que les contrôles s’exécutent sous permissions limitées.
- Confirmer que le déploiement reste bloqué sans approbation de l’environnement protégé.
# Points de vérification dans GitHub :
# Actions > Run > Job > permissions
# Settings > Environments > production
# Pull request > ChecksÀ vérifier : Les permissions observées correspondent aux droits prévus et les secrets restent isolés.
Point de vigilance : Ne pas afficher ou imprimer les secrets dans les journaux, même pour vérifier le masquage.
ÉTAPE 6 / 6
Maintenir et auditer le pipeline
La posture de sécurité se dégrade si les dépendances, les droits et les personnes habilitées ne sont pas suivis.
- Documenter les propriétaires et versions des actions.
- Réviser régulièrement les exceptions et les approbations.
- Surveiller l’évolution des permissions et des déclencheurs dans les pull requests.
# Checklist de maintenance :
# Actions épinglées par SHA vérifié
# Token minimal
# Secrets d'environnement isolés
# Revue sur .github/workflows
# Déploiement après approbationÀ vérifier : Les changements de politique et de dépendances restent traçables et révisables.
Point de vigilance : Une CI réussie ne constitue pas une preuve de sécurité absolue du dépôt.
RÉFÉRENCES TECHNIQUES
Documentation officielle
Retrouvez les prérequis, les fonctionnalités et les versions prises en charge par GitHub. Vérifiez les commandes sur un environnement de test avant leur utilisation en production.
05 · RECETTE
Comment vérifier que tout fonctionne ?
La CI sur pull request fonctionne avec contents: read.
Les actions sont épinglées sur des commits vérifiés.
Les jobs de test n’utilisent aucun secret de production.
Les permissions de déploiement sont séparées des permissions de CI.
Les environnements critiques disposent d’une gouvernance de publication adaptée.
06 · DIAGNOSTIC
Problèmes fréquents et résolution
Erreur permission denied
Cause probable : Jeton trop restreint ou job non prévu pour écrire
Que faire : Vérifier si l’écriture est réellement nécessaire ; donner le droit au seul job autorisé.
Action non autorisée
Cause probable : Politique d’organisation sur actions tierces ou références
Que faire : Vérifier la provenance, la version et les politiques GitHub.
Secret indisponible
Cause probable : PR externe sans accès aux secrets ou environnement protégé
Que faire : Ne pas exposer le secret ; isoler ce travail dans un job approuvé.
Déploiement bloqué
Cause probable : Approbation d’environnement ou règle de branche non remplie
Que faire : Consulter les protections et la gouvernance de publication.
07 · QUESTIONS PRATIQUES
Questions fréquentes
Pourquoi éviter pull_request_target pour tester du code externe ?
Ce déclencheur donne un contexte plus privilégié ; exécuter du code de PR non fiable peut compromettre les accès.
GitHub masque-t-il toujours les secrets ?
Le masquage des journaux ne remplace pas une politique de séparation et de réduction des accès.
OIDC supprime-t-il tous les secrets ?
OIDC peut éviter certains secrets cloud statiques mais exige une configuration de confiance adaptée chez le fournisseur.
Que signifie épingler une action ?
Référencer un commit SHA complet et vérifié plutôt qu’un tag de version mouvant.
AUTRES TECHNOLOGIES
Guides complémentaires
VOTRE ENVIRONNEMENT
Besoin d’aller plus loin sur votre environnement ?
Gouvernance, CI/CD et pratiques DevOps : échangeons sur la sécurité et la fiabilité de vos workflows GitHub.
Échanger avec ADN Consulting