
Verhindert, dass du Geheimnisse und Anmeldedaten in Git-Repositorys committest.
.. 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 scannt Commits, Commit-Nachrichten und --no-ff-Merges, um
zu verhindern, dass Geheimnisse in Ihre Git-Repositories gelangen. Falls ein
Commit, eine Commit-Nachricht oder ein beliebiger Commit in einer --no-ff-Merge-Historie
einem Ihrer konfigurierten verbotenen regulären Ausdrucksmuster entspricht,
wird der Commit abgelehnt.
git-secrets muss irgendwo in Ihrem PATH liegen, damit es von git beim
Ausführen von git secrets gefunden wird.
*nix (Linux/macOS)
Sie können das ``install``-Target des mitgelieferten Makefile verwenden, um ``git secrets`` und die Manpage zu installieren.
Sie können den Installationspfad mit den Variablen PREFIX und MANPREFIX anpassen.
::
make install
Windows
~~~~~~~
Führen Sie das mitgelieferte PowerShell-Skript ``install.ps1`` aus. Dies kopiert die benötigten Dateien
in ein Installationsverzeichnis (standardmäßig ``%USERPROFILE%/.git-secrets``) und fügt
das Verzeichnis zum ``PATH`` des aktuellen Benutzers hinzu.
::
PS > ./install.ps1
Homebrew (für macOS-Nutzer)
::
brew install git-secrets
.. warning::
**Sie sind noch nicht fertig! Sie MÜSSEN die Git-Hooks für jedes Repository installieren,
das Sie mit** ``git secrets --install`` **verwenden möchten.**
Hier ein kurzes Beispiel, wie Sie sicherstellen, dass ein Git-Repository bei jedem Commit auf Geheimnisse überprüft wird::
cd /path/to/my/repo
git secrets --install
git secrets --register-aws
Fügen Sie eine Konfigurationsvorlage hinzu, wenn Sie Hooks zu allen Repositorys hinzufügen möchten, die Sie in Zukunft initialisieren oder klonen.
::
git secrets --register-aws --global
Fügen Sie Hooks zu allen Ihren lokalen Repositorys hinzu.
::
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets
Fügen Sie benutzerdefinierte Provider hinzu, um nach Sicherheitsanmeldeinformationen zu suchen.
::
git secrets --add-provider -- cat /path/to/secret/file/patterns
Mit git-secrets ist es auch möglich, ein Repository inklusive aller Revisionen zu scannen:
::
git secrets --scan-history
Operation Modes
Jede dieser Optionen muss als erstes auf der Befehlszeile erscheinen.
``--install``
Installiert Git-Hooks für ein Repository. Sobald die Hooks für ein Git-Repository installiert sind,
werden Commits und Non-Fast-Forward-Merges für dieses Repository daran gehindert,
Geheimnisse zu committen.
``--scan``
Scannt eine oder mehrere Dateien auf Geheimnisse. Wenn eine Datei ein Geheimnis enthält,
wird der übereinstimmende Text aus der gescannten Datei in die Standardausgabe geschrieben und das
Skript beendet sich mit einem Nicht-Null-Statuscode. Jede übereinstimmende Zeile wird mit
dem Namen der übereinstimmenden Datei, einem Doppelpunkt, der übereinstimmenden Zeilennummer,
einem Doppelpunkt und dann der übereinstimmenden Textzeile ausgegeben. Wenn keine Dateien angegeben werden,
werden alle von ``git ls-files`` zurückgegebenen Dateien gescannt.
``--scan-history``
Scannt das Repository inklusive aller Revisionen. Wenn eine Datei ein Geheimnis enthält,
wird der übereinstimmende Text aus der gescannten Datei in die Standardausgabe geschrieben und das
Skript beendet sich mit einem Nicht-Null-Statuscode. Jede übereinstimmende Zeile wird mit
dem Namen der übereinstimmenden Datei, einem Doppelpunkt, der übereinstimmenden Zeilennummer,
einem Doppelpunkt und dann der übereinstimmenden Textzeile ausgegeben.
``--list``
Listet die ``git-secrets``-Konfiguration für das aktuelle Repository oder in der globalen
Git-Konfiguration auf.
``--add``
Fügt ein verbotenes oder erlaubtes Muster hinzu.
``--add-provider``
Registriert einen Geheimnis-Provider. Geheimnis-Provider sind ausführbare Dateien, die
beim Aufruf verbotene Muster ausgeben, die ``git-secrets`` als verboten behandeln soll.
``--register-aws``
Fügt gängige AWS-Muster zur Git-Konfiguration hinzu und stellt sicher, dass Schlüssel
in ``~/.aws/credentials`` in keinem Commit gefunden werden. Die folgenden
Prüfungen werden hinzugefügt:
- AWS Access Key IDs via ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``
- Amazon Bedrock API keys. Long-lived via ``ABSK[A-Za-z0-9+/]{109,}=*`` and short-lived via ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
- AWS Secret Access Key assignments via ":" or "=" surrounded by optional
quotes
- AWS account ID assignments via ":" or "=" surrounded by optional quotes
- Allowed patterns for example AWS keys (``AKIAIOSFODNN7EXAMPLE`` and
``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)
- Known credentials from ``~/.aws/credentials``
.. note::
While the patterns registered by this command should catch most
instances of AWS credentials, these patterns are **not** guaranteed to
catch them **all**. ``git-secrets`` should be used as an extra means of
insurance -- you still need to do your due diligence to ensure that you
do not commit credentials to a repository.
``--aws-provider``
Secret provider that outputs credentials found in an INI file. You can
optionally provide the path to an INI file.
Options for ``--install``
-f, --force
Überschreibt vorhandene Hooks, falls vorhanden.
<target-directory>
Wenn angegeben, installiert Git-Hooks in das angegebene Verzeichnis. Das aktuelle
Verzeichnis wird angenommen, wenn <target-directory> nicht angegeben ist.
Wenn das angegebene ``<target-directory>`` nicht in einem Git-Repository liegt, wird
das Verzeichnis erstellt und die Hooks werden in ``<target-directory>/hooks`` abgelegt.
Dies kann nützlich sein, um Git-Vorlagenverzeichnisse zu erstellen, die mit
``git init --template <target-directory>`` verwendet werden.
Sie können ``git init`` in einem bereits initialisierten Repository ausführen.
Aus der `git init-Dokumentation <https://git-scm.com/docs/git-init>`_:
From the git documentation: Running ``git init`` in an existing repository
is safe. It will not overwrite things that are already there. The
primary reason for rerunning ``git init`` is to pick up newly added
templates (or to move the repository to another place if
``--separate-git-dir`` is given).
The following git hooks are installed:
1. ``pre-commit``: Used to check if any of the files changed in the commit
use prohibited patterns.
2. ``commit-msg``: Used to determine if a commit message contains a
prohibited patterns.
3. ``prepare-commit-msg``: Used to determine if a merge commit will
introduce a history that contains a prohibited pattern at any point.
Please note that this hook is only invoked for non fast-forward merges.