
Impedisce il commit di segreti e credenziali nei repository git
.. contents:: :depth: 2
::
git secrets --scan [-r|--recursive] [--cached] [--no-index] [--untracked] [<files>...]
git secrets --scan-history
git secrets --install [-f|--force] [<target-directory>]
git secrets --list [--global]
git secrets --add [-a|--allowed] [-l|--literal] [--global] <pattern>
git secrets --add-provider [--global] <command> [arguments...]
git secrets --register-aws [--global]
git secrets --aws-provider [<credentials-file>]
git-secrets analizza commit, messaggi di commit e merge --no-ff per
impedire l'aggiunta di segreti nei tuoi repository git. Se un commit,
un messaggio di commit o qualsiasi commit in una cronologia di merge --no-ff
corrisponde a uno dei tuoi pattern di espressioni regolari proibiti configurati,
il commit viene rifiutato.
git-secrets deve essere posizionato da qualche parte nel tuo PATH in modo che
venga riconosciuto da git quando si esegue git secrets.
*nix (Linux/macOS)
Puoi usare il target ``install`` del Makefile fornito per installare ``git secrets`` e la pagina man.
Puoi personalizzare il percorso di installazione usando le variabili PREFIX e MANPREFIX.
::
make install
Windows
~~~~~~~
Esegui lo script powershell ``install.ps1`` fornito. Questo copierà i file necessari
in una directory di installazione (``%USERPROFILE%/.git-secrets`` di default) e aggiungerà
la directory al ``PATH`` dell'utente corrente.
::
PS > ./install.ps1
Homebrew (per utenti macOS)
::
brew install git-secrets
.. warning::
**Non hai ancora finito! DEVI installare i git hook per ogni repo in cui**
**desideri usare** ``git secrets --install``.
Ecco un rapido esempio di come assicurarsi che un repository git venga analizzato per segreti ad ogni commit::
cd /path/to/my/repo
git secrets --install
git secrets --register-aws
Aggiungi un template di configurazione se vuoi aggiungere hook a tutti i repository che inizializzerai o clonerai in futuro.
::
git secrets --register-aws --global
Aggiungi hook a tutti i tuoi repository locali.
::
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets
Aggiungi provider personalizzati per analizzare le credenziali di sicurezza.
::
git secrets --add-provider -- cat /path/to/secret/file/patterns
Con git-secrets è anche possibile analizzare un repository includendo tutte le revisioni:
::
git secrets --scan-history
Modalità operative
Ciascuna di queste opzioni deve apparire per prima sulla riga di comando.
``--install``
Installa i git hook per un repository. Una volta che gli hook sono installati per un repository git,
i commit e i merge non-fast-forward per quel repository verranno impediti
di committare segreti.
``--scan``
Analizza uno o più file alla ricerca di segreti. Quando un file contiene un segreto, il
testo corrispondente dal file analizzato verrà scritto su stdout e lo
script terminerà con un codice di uscita diverso da zero. Ogni riga corrispondente verrà scritta con
il nome del file che ha corrisposto, due punti, il numero di riga che ha corrisposto,
due punti e poi la riga di testo che ha corrisposto. Se non vengono forniti file,
vengono analizzati tutti i file restituiti da ``git ls-files``.
``--scan-history``
Analizza il repository includendo tutte le revisioni. Quando un file contiene un segreto, il
testo corrispondente dal file analizzato verrà scritto su stdout e lo
script terminerà con un codice di uscita diverso da zero. Ogni riga corrispondente verrà scritta con
il nome del file che ha corrisposto, due punti, il numero di riga che ha corrisposto,
due punti e poi la riga di testo che ha corrisposto.
``--list``
Elenca la configurazione di ``git-secrets`` per il repo corrente o nella configurazione git globale.
``--add``
Aggiunge un pattern proibito o consentito.
``--add-provider``
Registra un provider di segreti. I provider di segreti sono eseguibili che quando
invocati generano pattern proibiti che ``git-secrets`` deve trattare come
proibiti.
``--register-aws``
Aggiunge pattern AWS comuni alla configurazione git e garantisce che le chiavi
presenti in ``~/.aws/credentials`` non vengano trovate in nessun commit. Vengono aggiunti i seguenti
controlli:
- ID di chiave di accesso AWS tramite ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``
- Chiavi API Amazon Bedrock. A lunga durata tramite ``ABSK[A-Za-z0-9+/]{109,}=*`` e a breve durata tramite ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
- Assegnazioni di chiave segreta di accesso AWS tramite ":" o "=" circondate da virgolette opzionali
- Assegnazioni di ID account AWS tramite ":" o "=" circondate da virgolette opzionali
- Pattern consentiti per chiavi AWS di esempio (``AKIAIOSFODNN7EXAMPLE`` e ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)
- Credenziali note da ``~/.aws/credentials``
.. note::
Sebbene i pattern registrati da questo comando dovrebbero intercettare la maggior parte
delle istanze di credenziali AWS, questi pattern **non** garantiscono di intercettarle
**tutte**. ``git-secrets`` dovrebbe essere usato come un mezzo aggiuntivo di
assicurazione: devi comunque fare la dovuta diligenza per assicurarti di non
committare credenziali in un repository.
``--aws-provider``
Provider di segreti che genera le credenziali trovate in un file INI. Puoi
opzionalmente fornire il percorso di un file INI.
Opzioni per ``--install``
-f, --force
Sovrascrive gli hook esistenti se presenti.
<target-directory>
Quando fornito, installa i git hook nella directory specificata. La directory
corrente viene assunta se <target-directory> non viene fornito.
Se la ``<target-directory>`` fornita non si trova in un repository git, la
directory verrà creata e gli hook verranno posizionati in
``<target-directory>/hooks``. Questo può essere utile per creare directory template git
da usare con ``git init --template <target-directory>``.
Puoi eseguire ``git init`` su un repository già inizializzato.
Dalla documentazione di `git init <https://git-scm.com/docs/git-init>`_:
Dalla documentazione di git: Eseguire ``git init`` in un repository esistente
è sicuro. Non sovrascriverà cose già presenti. Il
motivo principale per rieseguire ``git init`` è raccogliere template appena aggiunti
(o spostare il repository in un altro posto se viene fornito ``--separate-git-dir``).
Vengono installati i seguenti git hook:
1. ``pre-commit``: Usato per verificare se uno qualsiasi dei file modificati nel commit
utilizza pattern proibiti.
2. ``commit-msg``: Usato per determinare se un messaggio di commit contiene un
pattern proibito.
3. ``prepare-commit-msg``: Usato per determinare se un commit di merge
introdurrà una cronologia che contiene un pattern proibito in qualsiasi punto.
Tieni presente che questo hook viene invocato solo per merge non fast-forward.
.. note::