Publier à partir de GitHub Actions à l'aide de l'authentification multifacteur

Dec 07 2022
Présentation de l'action GitHub Wait-For-Secrets
GitHub Actions est une excellente plateforme pour créer des pipelines CI/CD pour vos projets. StepSecurity construit des solutions de sécurité open source pour les plates-formes CI/CD.
Démo Wait-for-secrets

GitHub Actions est une excellente plateforme pour créer des pipelines CI/CD pour vos projets. StepSecurity construit des solutions de sécurité open source pour les plates-formes CI/CD. Nous sommes ravis d'annoncer que nous publions une nouvelle action GitHub appelée Wait-for-secrets . Wait-for-secrets permet l'utilisation de l'authentification multifacteur pour les workflows de publication.

GitHub est la plus grande plateforme d'hébergement de projets open source. Les mainteneurs de ces projets publient dans des registres de packages populaires, tels que le registre npm et DockerHub.

La norme de facto utilisée par les mainteneurs est la publication à partir de leurs ordinateurs personnels. La publication de packages à partir d'un ordinateur de développeur local crée un risque de sécurité. L'artefact de construction peut être falsifié si la machine du développeur est compromise. Il est également difficile de générer la provenance et pour les autres de valider le processus de publication.

La publication à l'aide de plates-formes CI/CD telles que GitHub Actions aide à résoudre ces problèmes. Les exécuteurs hébergés par GitHub Actions, par exemple, sont des machines virtuelles éphémères, où chaque tâche s'exécute dans une nouvelle machine virtuelle distincte.

L'inconvénient de la publication à partir d'un pipeline CI/CD est que les développeurs perdent la possibilité d'utiliser l'authentification multifacteur. Les registres de packages, tels que npm et PyPi, appliquent une authentification multifacteur pour les packages populaires. Mais pour publier à partir de CI/CD, les développeurs ont jusqu'à présent dû utiliser des jetons d'automatisation à facteur unique.

StepSecurity a créé l'action GitHub Wait-For-Secrets pour offrir aux développeurs le meilleur des deux options. Pour publier à partir d'un pipeline CI/CD et utiliser l'authentification multifacteur pour le processus de publication.

Étude de cas

Le package populaire eslint-plugin-react utilise Wait-for-secrets pour publier dans le registre npm à l'aide d'un mot de passe à usage unique (OTP).

Voici un témoignage de Jordan Harband (https://github.com/ljharb), qui l'a intégré dans le workflow de publication du package eslint-plugin-react :

> Pendant des années, j'ai résisté à la publication de CI - la publication est la seule action vraiment irrévocable, et je crois fermement qu'elle devrait nécessiter une intervention humaine manuelle. C'est l'un des premiers flux de travail de "publication à partir de CI avec interaction humaine manuelle" que j'ai vu qui ne m'oblige pas à héberger quoi que ce soit, ne perd pas le "deux facteurs" en utilisant un seul facteur de un jeton secret, et fonctionne aussi bien sur ordinateur que sur mobile.

> Je vais bientôt résumer cela dans un flux de travail réutilisable, afin que je puisse l'utiliser sur beaucoup plus de mes packages. Cela me permettra également de commencer ergonomiquement à utiliser Github Releases pour la première fois, puisque je peux enchaîner une action post-publication qui crée automatiquement le texte de la release en fonction de mon changelog ; Je peux également connecter des notifications push Slack et mobiles. Ainsi, un pourcentage important du trafic de téléchargement de npm ne dépendra plus uniquement de la sécurité de mon ordinateur personnel.

Le workflow de publication ressemble à ceci.

Utilisation de wait-for-secrets dans le workflow de publication d'eslint-plugin-react

Voici une capture d'écran du journal de construction montrant eslint-plugin-react publié à l'aide d'un mot de passe à usage unique (OTP).

Journal de construction montrant eslint-plugin-react publié à l'aide d'un mot de passe à usage unique (OTP)

Intégration de Wait-for-secrets dans votre workflow GitHub Actions

Pour intégrer l'action GitHub Wait-for-secrets dans votre workflow de publication, procédez comme suit :

  1. Ajoutez l'action Wait-for-secrets avant l'étape où vous avez besoin du secret de publication.

name: Wait-for-secrets Demo
on: workflow_dispatch

jobs:
  build:
    permissions:
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: step-security/wait-for-secrets@v1
        id: get-otp
        with:
          secrets: |
            DUMMY_SECRET: 
              name: 'Dummy secret'
              description: 'Dummy secret to demo wait-for-secrets'
      - run: |
          echo ${{ steps.get-otp.outputs.DUMMY_SECRET }}

3. Lorsque vous êtes prêt pour la publication, cliquez sur l'URL dans le journal de génération. Un site Web s'ouvrira avec des détails sur l'exécution du flux de travail.

4. Entrez les informations d'identification temporaires telles qu'un mot de passe à usage unique sur ce site Web.

5. L'étape d'action Wait-for-secrets recevra le jeton d'authentification multifacteur et arrêtera le blocage. L'étape de publication peut utiliser le jeton et poursuivre la publication.

Wait-for-secrets GitHub Action et l'API backend qu'elle utilise sont open-source. Vous pouvez trouver des exemples de workflows dans ce dépôt :

https://github.com/step-security/wait-for-secrets