
Te impide comprometer secretos y credenciales en repositorios 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 escanea commits, mensajes de commit y fusiones --no-ff para evitar agregar secretos en tus repositorios git. Si un commit, mensaje de commit o cualquier commit en un historial de fusión --no-ff coincide con uno de tus patrones de expresiones regulares prohibidas configurados, entonces el commit es rechazado.
git-secrets debe estar ubicado en algún lugar de tu PATH para que git lo reconozca al ejecutar git secrets.
*nix (Linux/macOS)
Puedes usar el objetivo ``install`` del Makefile proporcionado para instalar ``git secrets`` y la página de manual. Puedes personalizar la ruta de instalación usando las variables PREFIX y MANPREFIX.
::
make install
Windows
~~~~~~~
Ejecuta el script de PowerShell ``install.ps1`` proporcionado. Esto copiará los archivos necesarios a un directorio de instalación (``%USERPROFILE%/.git-secrets`` por defecto) y agregará el directorio al ``PATH`` del usuario actual.
::
PS > ./install.ps1
Homebrew (para usuarios de macOS)
::
brew install git-secrets
.. warning::
**¡Aún no has terminado! DEBES instalar los hooks de git para cada repositorio con el que desees usar** ``git secrets --install``.
Aquí hay un ejemplo rápido de cómo asegurarse de que un repositorio git sea escaneado en busca de secretos en cada commit::
cd /path/to/my/repo
git secrets --install
git secrets --register-aws
Agrega una plantilla de configuración si deseas agregar hooks a todos los repositorios que inicialices o clones en el futuro.
::
git secrets --register-aws --global
Agrega hooks a todos tus repositorios locales.
::
git secrets --install ~/.git-templates/git-secrets
git config --global init.templateDir ~/.git-templates/git-secrets
Agrega proveedores personalizados para escanear credenciales de seguridad.
::
git secrets --add-provider -- cat /path/to/secret/file/patterns
Con git-secrets también es posible escanear un repositorio incluyendo todas las revisiones:
::
git secrets --scan-history
Modos de operación
Cada una de estas opciones debe aparecer primero en la línea de comandos.
``--install``
Instala los hooks de git para un repositorio. Una vez que los hooks están instalados para un repositorio git, los commits y las fusiones no fast-forward de ese repositorio se evitarán que comprometan secretos.
``--scan``
Escanea uno o más archivos en busca de secretos. Cuando un archivo contiene un secreto, el texto coincidente del archivo escaneado se escribirá en la salida estándar y el script saldrá con un estado distinto de cero. Cada línea coincidente se escribirá con el nombre del archivo que coincidió, dos puntos, el número de línea que coincidió, dos puntos y luego la línea de texto que coincidió. Si no se proporcionan archivos, se escanean todos los archivos devueltos por ``git ls-files``.
``--scan-history``
Escanea el repositorio incluyendo todas las revisiones. Cuando un archivo contiene un secreto, el texto coincidente del archivo escaneado se escribirá en la salida estándar y el script saldrá con un estado distinto de cero. Cada línea coincidente se escribirá con el nombre del archivo que coincidió, dos puntos, el número de línea que coincidió, dos puntos y luego la línea de texto que coincidió.
``--list``
Lista la configuración de ``git-secrets`` para el repositorio actual o en la configuración global de git.
``--add``
Agrega un patrón prohibido o permitido.
``--add-provider``
Registra un proveedor de secretos. Los proveedores de secretos son ejecutables que, cuando se invocan, generan patrones prohibidos que ``git-secrets`` debe tratar como prohibidos.
``--register-aws``
Agrega patrones comunes de AWS a la configuración de git y garantiza que las claves presentes en ``~/.aws/credentials`` no se encuentren en ningún commit. Se agregan las siguientes comprobaciones:
- IDs de clave de acceso de AWS mediante ``(A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}``
- Claves de API de Amazon Bedrock. De larga duración mediante ``ABSK[A-Za-z0-9+/]{109,}=*`` y de corta duración mediante ``bedrock-api-key-YmVkcm9jay5hbWF6b25hd3MuY29t``
- Asignaciones de clave secreta de acceso de AWS mediante ":" o "=" rodeados de comillas opcionales
- Asignaciones de ID de cuenta de AWS mediante ":" o "=" rodeados de comillas opcionales
- Patrones permitidos para claves de AWS de ejemplo (``AKIAIOSFODNN7EXAMPLE`` y ``wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY``)
- Credenciales conocidas de ``~/.aws/credentials``
.. note::
Si bien los patrones registrados por este comando deberían detectar la mayoría de las instancias de credenciales de AWS, estos patrones **no** garantizan detectarlas **todas**. ``git-secrets`` debe usarse como un medio adicional de seguro; aún debes hacer tu debida diligencia para asegurarte de no comprometer credenciales en un repositorio.
``--aws-provider``
Proveedor de secretos que genera las credenciales encontradas en un archivo INI. Opcionalmente puedes proporcionar la ruta a un archivo INI.
Opciones para ``--install``
-f, --force
Sobrescribe los hooks existentes si están presentes.
<target-directory>
Cuando se proporciona, instala los hooks de git en el directorio dado. Se asume el directorio actual si no se proporciona <target-directory>.
Si el ``<target-directory>`` proporcionado no está en un repositorio git, se creará el directorio y los hooks se colocarán en ``<target-directory>/hooks``. Esto puede ser útil para crear directorios de plantilla de git para usar con ``git init --template <target-directory>``.
Puedes ejecutar ``git init`` en un repositorio que ya ha sido inicializado. De la `documentación de git init <https://git-scm.com/docs/git-init>`_:
De la documentación de git: Ejecutar ``git init`` en un repositorio existente es seguro. No sobrescribirá cosas que ya están allí. La razón principal para volver a ejecutar ``git init`` es recoger plantillas recién agregadas (o para mover el repositorio a otro lugar si se proporciona ``--separate-git-dir``).
Se instalan los siguientes hooks de git:
1. ``pre-commit``: Se usa para comprobar si alguno de los archivos modificados en el commit utiliza patrones prohibidos.
2. ``commit-msg``: Se usa para determinar si un mensaje de commit contiene un patrón prohibido.
3. ``prepare-commit-msg``: Se usa para determinar si un commit de fusión introducirá un historial que contenga un patrón prohibido en algún punto. Ten en cuenta que este hook solo se invoca para fusiones no fast-forward.
.. note::