
layerleak - le scanner de secrets Docker Hub
Consultez CONTRIBUTING.md pour les directives de contribution.
Le site publié est construit à partir de web/ sur main par .github/workflows/pages.yml. La source de la documentation et la démo simulée du navigateur résident tous les deux dans ce répertoire.
Prérequis :
Installer avec Go :
go install github.com/brumbelow/layerleak@latest
layerleak --help
La cible d’installation canonique est la racine du module. Pour épingler une version explicitement :
go install github.com/brumbelow/[email protected]
Remplacez v1.0.0 par l’étiquette v1.x.y publiée souhaitée.
Assurez-vous que votre répertoire GOBIN ou GOPATH/bin est dans le PATH.
Le chemin du module est github.com/brumbelow/layerleak, donc go install @latest résout la plus haute étiquette v1.x.y publiée. Une version de module v2.x.y nécessiterait que le chemin du module devienne github.com/brumbelow/layerleak/v2. Les binaires installés via le module rapportent la version résolue via layerleak --version ; les constructions à partir d’un checkout local rapportent la version que Go intègre pour le checkout, en revenant à dev quand aucune version de module n’est disponible.
Construire à partir des sources :
git clone https://github.com/brumbelow/layerleak.git
cd layerleak
go build -o layerleak .
./layerleak --help
Exécuter l’API avec une image conteneur :
docker pull ghcr.io/brumbelow/layerleak:latest
docker run --rm \
-p 8080:8080 \
-e LAYERLEAK_DATABASE_URL='postgres://<user>:<password>@<host>:5432/layerleak?sslmode=disable' \
ghcr.io/brumbelow/layerleak:latest
L’image conteneur exécute l’API par défaut et définit LAYERLEAK_API_ADDR=0.0.0.0:8080.
Configuration d’environnement optionnelle :
cp .env.example .env
Configuration des résultats et de la base de données :
export LAYERLEAK_LOG_LEVEL=info
export LAYERLEAK_FINDINGS_DIR=findings
export LAYERLEAK_API_ADDR=127.0.0.1:8080
export LAYERLEAK_PERSIST_RAW_SECRETS=0
export LAYERLEAK_TAG_PAGE_SIZE=100
export LAYERLEAK_HTTP_TIMEOUT=30s
export LAYERLEAK_MAX_FILE_BYTES=1048576
export LAYERLEAK_MAX_LAYER_BYTES=536870912
export LAYERLEAK_MAX_LAYER_ENTRIES=50000
export LAYERLEAK_MAX_MANIFEST_BYTES=0
export LAYERLEAK_MAX_CONFIG_BYTES=0
export LAYERLEAK_MAX_TAG_RESPONSE_BYTES=8388608
export LAYERLEAK_MAX_REPOSITORY_TAGS=0
export LAYERLEAK_MAX_REPOSITORY_TARGETS=0
export LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS=2
# Remplacements de registre optionnels ; généralement laisser non défini.
export LAYERLEAK_REGISTRY_BASE_URL=
export LAYERLEAK_REGISTRY_AUTH_URL=
export LAYERLEAK_DATABASE_URL=postgres://postgres:postgres@localhost:5432/layerleak?sslmode=disable
Les mêmes variables et leurs valeurs par défaut se trouvent dans .env.example, qui est la source de vérité pour les valeurs par défaut.
| Variable | Valeur par défaut | Objectif |
|---|---|---|
LAYERLEAK_LOG_LEVEL | info | Niveau de journalisation : debug, info, warn ou error. |
LAYERLEAK_FINDINGS_DIR | non défini | Où écrire les fichiers JSON des résultats. Si non défini, par défaut findings/ sous le plus proche parent contenant go.mod, avec repli sur le répertoire de travail courant. |
LAYERLEAK_API_ADDR | 127.0.0.1:8080 | Adresse d’écoute du serveur API. L’image conteneur remplace cela par 0.0.0.0:8080. |
LAYERLEAK_PERSIST_RAW_SECRETS | 0 | Mettre à 1 pour écrire les valeurs brutes des secrets et les fragments de contexte bruts sur le disque et dans Postgres. Les résultats restent masqués par défaut. |
LAYERLEAK_HTTP_TIMEOUT | 30s | Timeout par requête pour chaque appel au registre (manifestes, blobs, pages d’étiquettes, jetons d’authentification). Accepte toute durée Go (30s, 2m, 1h). |
LAYERLEAK_MAX_FILE_BYTES | 1048576 (1 Mio) | Nombre maximal d’octets décompressés mis en mémoire tampon par fichier dans une couche. Les fichiers plus grands sont ignorés comme étant trop volumineux. Doit être supérieur à zéro. |
LAYERLEAK_MAX_LAYER_BYTES | 536870912 (512 Mio) | Nombre maximal d’octets du flux de couche décompressé par couche. 0 désactive la limite. |
LAYERLEAK_MAX_LAYER_ENTRIES | 50000 | Nombre maximal d’entrées tar par couche. 0 désactive la limite. |
LAYERLEAK_MAX_MANIFEST_BYTES | 0 | Nombre maximal d’octets du corps du manifeste. 0 désactive la limite. |
LAYERLEAK_MAX_CONFIG_BYTES | 0 | Nombre maximal d’octets du corps de la configuration d’image. 0 désactive la limite. |
LAYERLEAK_MAX_TAG_RESPONSE_BYTES | 8388608 (8 Mio) | Nombre maximal d’octets par page de réponse de liste d’étiquettes du registre. 0 désactive la limite. |
LAYERLEAK_TAG_PAGE_SIZE | 100 | Taille de page de la liste d’étiquettes du registre pour les analyses à l’échelle du dépôt. |
LAYERLEAK_MAX_REPOSITORY_TAGS | 0 | Nombre maximal d’étiquettes énumérées par analyse de dépôt. 0 désactive la limite. |
LAYERLEAK_MAX_REPOSITORY_TARGETS | 0 | Nombre maximal de cibles distinctes résolues par analyse de dépôt. 0 désactive la limite. |
LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS | 2 | Nombre de tentatives (y compris la première) pour chaque requête au registre. |
LAYERLEAK_REGISTRY_BASE_URL | non défini | Remplacement optionnel. Normalement layerleak dérive cette URL de chaque référence d’image ; définir seulement pour forcer les analyses via un proxy ou un point de terminaison alternatif. |
LAYERLEAK_REGISTRY_AUTH_URL | non défini | Remplacement optionnel. Normalement découverte à partir du défi WWW-Authenticate du registre. |
LAYERLEAK_DATABASE_URL | non défini | Si défini, layerleak écrit les analyses dans Postgres et échoue la commande si la persistance échoue. |