Aller au contenu

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.

Niveau Avancé6 min de lecture— vuesGitHub

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é

Environnement et versions

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

ARCHITECTURE TECHNIQUEComprendre la chaîne de bout en bout
01Pull request
02Workflow contrôlé
03GITHUB_TOKEN
04Actions épinglées
05Tests
06Environnement approuvé
Les contrôles CI sur code non approuvé s’exécutent avec des droits minimaux ; le déploiement est séparé et soumis à des autorisations spécifiques et à l’approbation de l’environnement.

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.

01

ÉTAPE 1 / 6

Cartographier les déclencheurs et permissions

Chaque trigger GitHub Actions porte un niveau de confiance différent.

  1. Lister les workflows et leurs événements.
  2. Identifier les jobs qui écrivent dans le dépôt ou utilisent des secrets.
  3. Distinguer CI sur pull request et publication après fusion approuvée.
Exemple techniqueÀ adapter à votre environnement
# Rechercher dans .github/workflows :
# on: pull_request / push / workflow_dispatch
# permissions: ...
# environment: ...
Ce qui se passe à cette étape
1Workflows
2Triggers
3Risque

À 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é.

02

ÉTAPE 2 / 6

Limiter les permissions de GITHUB_TOKEN

Le moindre privilège réduit les dommages en cas de dépendance compromise.

  1. Définir permissions: contents: read en haut du workflow CI.
  2. Ajouter des permissions plus élevées seulement dans un job identifié.
  3. Éviter de conserver les credentials Git sur le runner si aucun push n’est nécessaire.
Exemple techniqueÀ adapter à votre environnement
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é'
Ce qui se passe à cette étape
1Read only
2CI
3Jeton limité

À 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.

03

É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é.

  1. Lister toutes les dépendances uses: des workflows.
  2. Vérifier leur dépôt d’origine, le commit de version choisi et sa politique de mise à jour.
  3. Remplacer les tags mouvants par les SHA complets après revue de la version.
Exemple techniqueÀ adapter à votre environnement
# Épingler après vérification de provenance :
# uses: actions/checkout@<SHA-complet-valide>
# Vérifier aussi les actions tierces utilisées.
Ce qui se passe à cette étape
1Provenance
2SHA exact
3Revue

À 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.

04

É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.

  1. Utiliser des environnements GitHub pour les jobs de déploiement.
  2. Exiger des approbateurs sur les environnements critiques lorsque disponible.
  3. Préférer OIDC et les identités courtes durées aux secrets cloud statiques lorsque le fournisseur le permet.
Exemple techniqueÀ adapter à votre environnement
# Exemple de job de déploiement (structure) :
# environment: production
# permissions:
#   contents: read
#   id-token: write  # seulement pour un flux OIDC approuvé
Ce qui se passe à cette étape
1Tests
2Approbation
3Publication

À 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.

05

É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.

  1. Ouvrir une PR de documentation ne nécessitant aucun secret.
  2. Vérifier que les contrôles s’exécutent sous permissions limitées.
  3. Confirmer que le déploiement reste bloqué sans approbation de l’environnement protégé.
Exemple techniqueÀ adapter à votre environnement
# Points de vérification dans GitHub :
# Actions > Run > Job > permissions
# Settings > Environments > production
# Pull request > Checks
Ce qui se passe à cette étape
1PR test
2CI limitée
3GO / NO GO

À 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.

06

É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.

  1. Documenter les propriétaires et versions des actions.
  2. Réviser régulièrement les exceptions et les approbations.
  3. Surveiller l’évolution des permissions et des déclencheurs dans les pull requests.
Exemple techniqueÀ adapter à votre environnement
# 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
Ce qui se passe à cette étape
1Révision
2Audit
3Traçabilité

À 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.

Consulter la documentation officielle

05 · RECETTE

Comment vérifier que tout fonctionne ?

Résultat attenduContrôles avant de considérer la procédure terminée
01

La CI sur pull request fonctionne avec contents: read.

02

Les actions sont épinglées sur des commits vérifiés.

03

Les jobs de test n’utilisent aucun secret de production.

04

Les permissions de déploiement sont séparées des permissions de CI.

05

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

Tous les guides GitHub

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

Pour aller plus loin