GitHub Actions è la piattaforma integrata di GitHub per l’integrazione e la consegna continua (Continuous Integration e Continuous Delivery , o CI/CD) che consente ai team di sviluppo di automatizzare il flusso di lavoro, comprese le pipeline di compilazione, test e distribuzione.
Uno svantaggio dell’utilizzo di GitHub Actions è che i vostri log sono pubblici e chiunque può accedervi con i permessi necessari.
Per evitare che i dati sensibili vengano esposti nei log di GitHub Actions, dovreste usare variabili d’ambiente crittografate per memorizzare i dati sensibili in modo sicuro. Queste variabili ambientali criptate sono note come secret, o segreti, di GitHub Actions.
Questo articolo vi mostra come usare i segreti di GitHub Actions per evitare che le informazioni sensibili appaiano nei log di GitHub Actions.
Prerequisiti:
Per seguire questo tutorial:
- Verificate di avere un account GitHub.
- Preparate un repository GitHub esistente. Per questo tutorial, potete clonare il repository demo.
- Seguite queste istruzioni per clonare il repository demo.
Come proteggere i log di GitHub Actions
Quando create dei flussi di lavoro usando GitHub Actions, chiunque visiti il vostro repository può visualizzare i log, quindi questi non dovrebbero includere informazioni sensibili. Tuttavia, non potete eliminare token, password e altre informazioni sensibili: vi servono per i test e per il corretto funzionamento della vostra applicazione.
La soluzione è nasconderli con il comando del flusso di lavoro ::add-mask::
, che mette un asterisco (*) al posto dei dati sensibili.
La sezione seguente vi mostra come mascherare un log.
Come mascherare i log
Per prima cosa, aprite il repository clonato nel vostro editor di testo.
Create la cartella .github/workflows/ nella radice del repository per memorizzare i file del flusso di lavoro. Quindi create un nuovo file chiamato hide-secrets.yml nella directory .github/workflows e aggiungeteci il seguente codice:
name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: echo a secret
run: echo "your secret token is verySecretToken"
Fate il commit delle modifiche e inviatele al vostro repository GitHub. Il flusso di lavoro aggiornato di GitHub Actions è attivo e verrà attivato ogni volta che farete una nuova modifica.
Aprite il vostro repository su GitHub e selezionate la scheda Actions per visualizzare i log. Il flusso di lavoro dovrebbe apparire come segue:
Esaminando i log del flusso di lavoro, troverete la stringa verySecretToken
stampata sui log. Fate clic sul vostro flusso di lavoro e poi sul nome dell’attività (print-secret-token) per visualizzare il log. L’aspetto dovrebbe essere il seguente:
Per nasconderlo, usate il comando ::add-mask::
, modificate il file hide-secrets.yml e aggiungete un nuovo passaggio a print-secret-token
:
name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: Add Mask
run: echo "::add-mask::verySecretToken"
- name: echo a secret
run: echo "your secret token is verySecretToken"
Dovreste aggiungere il passaggio Add Mask
all’inizio, poiché il mascheramento si applica solo dopo l’esecuzione di ::add-mask::
. Se inserite il segreto verySecretToken
prima del passaggio Add Mask
, esso apparirà comunque non mascherato. Quindi, per assicurarvi che il valore sia mascherato, è essenziale usare ::add-mask::
il prima possibile.
Una volta effettuato il commit e pubblicate le modifiche sul repository GitHub, la stringa verySecretToken
sarà sostituita da asterischi (*) ovunque appaia nei vostri log:
Se da un lato questo risolve il problema del mascheramento, dall’altro ne introduce uno nuovo. Il vostro verySecretToken
è ancora nel file del flusso di lavoro, quindi chiunque abbia accesso al codice sorgente può vederlo.
Un altro aspetto negativo del mascheramento del testo normale è che il mascheramento di una sola parte di una parola nasconde tutte le istanze della stessa. Per esempio, prendiamo la seguente frase: “Programmare è fantastico, ma i miei giorni più produttivi sono quelli in cui non scrivo un programma”. Se mascherate la parola “programma”, non solo verrà nascosta la parola alla fine della frase ma anche qualsiasi altro punto in cui compare, come per esempio “programmazione”.
Se provate a mascherare del testo semplice, otterrete qualcosa di simile:
Un approccio migliore per nascondere i dati sensibili nei log di GitHub Actions è quello di usare i secret di GitHub Actions, come mostriamo nella sezione seguente.
Come usare i secret di GitHub Actions
Potete usare i segreti di GitHub Actions per memorizzare qualsiasi dato privato che volete inserite nel flusso di lavoro di GitHub Actions. I segreti vengono creati come coppie chiave/valore a livello di repository o di organizzazione.
Mentre un repository può accedere solo ai segreti creati a livello di repository, i segreti creati a livello di organizzazione sono condivisi da tutti i repository di un’organizzazione.
I segreti creati a livello di repository sono disponibili per l’uso nelle azioni da parte di chiunque abbia i permessi del ruolo di collaboratore. Potete modificare il valore dei vostri segreti in qualsiasi momento. Tuttavia, i segreti non possono essere utilizzati con i flussi di lavoro di un repository biforcato.
Per la denominazione dei segreti si applicano le seguenti linee guida:
- I nomi dei segreti non possono contenere spazi.
- I nomi dei segreti non fanno distinzione tra maiuscole e minuscole.
- I nomi dei segreti non possono iniziare con un numero.
- I nomi dei segreti non devono iniziare con il prefisso
GITHUB_
. - I nomi dei segreti devono essere unici: segreti con lo stesso nome non possono esistere allo stesso livello.
Potete usare questi segreti nel flusso di lavoro delle azioni di GitHub semplicemente aggiungendo secrets
prima del nome del segreto come variabile YML, come mostrato di seguito:
${{ secrets.MY_SECRET_TOKEN }}
Potete anche mascherare i segreti per una maggiore sicurezza, come mostrato nella sezione seguente.
Come mascherare i secret
Per prima cosa, create un segreto su GitHub. Nel vostro repository su GitHub, fate clic sulla scheda Settings, selezionate Secrets> Actions dalla barra laterale sinistra e poi fate clic su New repository secret per aggiungere un nuovo segreto:
Date un nome e un valore al vostro segreto, quindi fate clic su Add secret:
Ora che avete creato il vostro segreto e gli avete assegnato il valore verySecretToken
, potete usarlo nel vostro file del flusso di lavoro. Aprite il file hide-secrets.yml e fate le seguenti modifiche:
name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: Add Mask
run: echo "::add-mask::${{ secrets.MY_SECRET_TOKEN }}"
- name: Echo a secret
run: echo "your secret token is ${{ secrets.MY_SECRET_TOKEN }}"
L’unica differenza tra questo e il codice precedente è che avete sostituito il token segreto con il vostro segreto GitHub appena creato “${{ secrets.MY_SECRET_TOKEN }}
“.
Una volta eseguito il commit del codice e inviate le modifiche al vostro repository GitHub, i vostri segreti saranno mascherati:
Riepilogo
Non dovete rivelare nessuna informazione sensibile nei vostri log delle azioni GitHub. Il mascheramento del testo è un modo per nascondere i dati, ma chiunque acceda ai file del vostro flusso di lavoro può vedere le informazioni che state cercando di nascondere.
Come dimostra questo tutorial, i secret di GitHub Actions sono un approccio molto più sicuro per salvaguardare i vostri dati sensibili e poi mascherarli.
Leggete la nostra documentazione per saperne di più sull’utilizzo di Git in Kinsta. Provate subito il nostro Hosting di Applicazioni gratuitamente.
Lascia un commento