Abilitare automaticamente Dependabot in tutti i repository di una organizzazione su GitHub

di Matteo Tumiati, in DevOps,

Il tema security è sempre molto delicato perchè riguarda molti aspetti differenti (ad esempio quello infrastrutturale, software, licenze, etc.) e anche delle competenze molto verticali. Per quanto riguarda GitHub, tuttavia, viene abbastanza in aiuto Dependabot, un tool nato per aiutare i developer nella gestione delle dipendenze, evidenziando quelle che devono essere aggiornate e quelle che sono esposte ad un potenziale rischio di sicurezza secondo delle CVE pubbliche.

E' sempre un bene averlo abilitato, ma come ci assicuriamo che lo sia su tutti i repository dell'organizzazione che dobbiamo gestire? La risposta è scontata: tramite un workflow di GitHub! Possiamo fare, infatti, un automatismo che controlla tutti i repository che vengono creati in GitHub e, se non è già abilitato, attiviamo Dependabot tramite la CLI.

- name: Enable Dependabot alerts
  run: |
    gh api -X PUT /repos/${{ github.repository_owner }}/${{ inputs.repo-name }}/vulnerability-alerts --silent
    gh api -X PUT /repos/${{ github.repository_owner }}/${{ inputs.repo-name }}/automated-security-fixes --silent
  env:
    GITHUB_TOKEN: ${{ secrets.MY_ADMIN_TOKEN }}

Con i due comandi dell'esempio, andiamo ad abilitare entrambe le funzionalità di Dependabot, ovvero vulnerability alerts e security fixes. Se vogliamo essere anche più dettagliati sulla tipologia di dipendenze di terze parti che dobbiamo controllare, ogni quanto Dependabot le deve verificare, chi deve essere l'owner responsabile di approvare le change di una pull request o così via, possiamo anche iniettare nel repository un file di configurazione di default, così che poi i developer lo possano customizzare come meglio credono per il loro caso d'uso.

- name: Configure Dependabot
  shell: pwsh
  run: |
    @"
    version: 2
    updates:
    - package-ecosystem: "nuget"
      directory: "/"
      schedule:
        interval: "weekly"
    "@ | Tee-Object -FilePath "dependabot.yml" -Append

    $Bytes = [System.Text.Encoding]::UTF8.GetBytes((Get-Content -Path dependabot.yml -Raw))
    $content = [Convert]::ToBase64String($Bytes)
    gh api repos/${{ github.repository_owner }}/${{ inputs.repo-name }}/contents/.github/dependabot.yml --method PUT -F 'message=Added dependabot.yml' -F content="$content" --silent
  env:
    GITHUB_TOKEN: ${{ secrets.MY_ADMIN_TOKEN }}

In questo caso abbiamo usato la console di PowerShell per creare un file di configurazione chiamato dependabot.yml, che poi passiamo in input alla API e che deve finire in una known location di GitHub (".github/" o nella root del repository). E' anche possibile personalizzare il parametro message, che rappresenta il commit che verrà eseguito nel repository per segnalare il fatto che abbiamo fatto una operazione all'interno dello stesso.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi