
layerleak el escáner de secretos de Docker Hub
Consulta CONTRIBUTING.md para las pautas de contribución.
El sitio publicado se construye desde web/ en main mediante .github/workflows/pages.yml. La fuente de la documentación y la demo simulada del navegador residen en ese directorio.
Requisitos previos:
Instalar con Go:
go install github.com/brumbelow/layerleak@latest
layerleak --help
El destino de instalación canónico es la raíz del módulo. Para fijar una versión explícitamente:
go install github.com/brumbelow/[email protected]
Reemplaza v1.0.0 con la etiqueta v1.x.y publicada que desees.
Asegúrate de que tu directorio GOBIN o GOPATH/bin esté en PATH.
La ruta del módulo es github.com/brumbelow/layerleak, por lo que go install @latest se resuelve a la etiqueta v1.x.y más alta publicada. Un lanzamiento del módulo v2.x.y requeriría cambiar la ruta del módulo a github.com/brumbelow/layerleak/v2. Los binarios instalados mediante módulos reportan la versión del módulo resuelta a través de layerleak --version; las compilaciones desde el clon local reportan la versión que Go incrusta para el clon, cayendo a dev cuando no hay una versión de módulo disponible.
Compilar desde el código fuente:
git clone https://github.com/brumbelow/layerleak.git
cd layerleak
go build -o layerleak .
./layerleak --help
Ejecutar la API con una imagen de contenedor:
docker pull ghcr.io/brumbelow/layerleak:latest
docker run --rm \
-p 8080:8080 \
-e LAYERLEAK_DATABASE_URL='postgres://<usuario>:<contraseña>@<host>:5432/layerleak?sslmode=disable' \
ghcr.io/brumbelow/layerleak:latest
La imagen del contenedor ejecuta la API por defecto y establece LAYERLEAK_API_ADDR=0.0.0.0:8080.
Configuración opcional de entorno:
cp .env.example .env
Configuración de resultados y base de datos:
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
# Anulaciones opcionales de registro; normalmente se dejan sin establecer.
export LAYERLEAK_REGISTRY_BASE_URL=
export LAYERLEAK_REGISTRY_AUTH_URL=
export LAYERLEAK_DATABASE_URL=postgres://postgres:postgres@localhost:5432/layerleak?sslmode=disable
Las mismas variables y sus valores predeterminados se encuentran en .env.example, que es la fuente de verdad para los valores predeterminados.
| Variable | Valor predeterminado | Propósito |
|---|---|---|
LAYERLEAK_LOG_LEVEL | info | Nivel de registro: debug, info, warn o error. |
LAYERLEAK_FINDINGS_DIR | sin establecer | Dónde escribir los archivos JSON de hallazgos. Si no se establece, por defecto es findings/ dentro del padre más cercano que contenga go.mod, cayendo al directorio de trabajo actual. |
LAYERLEAK_API_ADDR | 127.0.0.1:8080 | Dirección de enlace para el servidor API. La imagen del contenedor lo anula a 0.0.0.0:8080. |
LAYERLEAK_PERSIST_RAW_SECRETS | 0 | Establecer a 1 para escribir valores secretos sin procesar y fragmentos de contexto sin procesar en disco y Postgres. Los hallazgos permanecen redactados por defecto. |
LAYERLEAK_HTTP_TIMEOUT | 30s | Tiempo de espera por solicitud para cada llamada al registro (manifiestos, blobs, páginas de etiquetas, tokens de autenticación). Acepta cualquier duración de Go (30s, 2m, 1h). |
LAYERLEAK_MAX_FILE_BYTES | 1048576 (1 MiB) | Máximo de bytes descomprimidos almacenados en búfer por archivo dentro de una capa. Los archivos más grandes de esto se omiten por ser demasiado grandes. Debe ser mayor que cero. |
LAYERLEAK_MAX_LAYER_BYTES | 536870912 (512 MiB) | Máximo de bytes de flujo de capa descomprimida por capa. 0 deshabilita el límite. |
LAYERLEAK_MAX_LAYER_ENTRIES | 50000 | Máximo de entradas tar por capa. 0 deshabilita el límite. |
LAYERLEAK_MAX_MANIFEST_BYTES | 0 | Máximo de bytes del cuerpo del manifiesto. 0 deshabilita el límite. |
LAYERLEAK_MAX_CONFIG_BYTES | 0 | Máximo de bytes del cuerpo de configuración de la imagen. 0 deshabilita el límite. |
LAYERLEAK_MAX_TAG_RESPONSE_BYTES | 8388608 (8 MiB) | Máximo de bytes por página de respuesta de lista de etiquetas del registro. 0 deshabilita el límite. |
LAYERLEAK_TAG_PAGE_SIZE | 100 | Tamaño de página de lista de etiquetas del registro para escaneos en todo el repositorio. |
LAYERLEAK_MAX_REPOSITORY_TAGS | 0 | Máximo de etiquetas enumeradas por escaneo de repositorio. 0 deshabilita el límite. |
LAYERLEAK_MAX_REPOSITORY_TARGETS | 0 | Máximo de objetivos distintos resueltos por escaneo de repositorio. 0 deshabilita el límite. |
LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS | 2 | Número de intentos (incluyendo el primero) por cada solicitud al registro. |
LAYERLEAK_REGISTRY_BASE_URL | sin establecer | Anulación opcional. Normalmente layerleak deriva esto de cada referencia de imagen; establecer solo para forzar escaneos a través de un proxy o punto final alternativo. |
LAYERLEAK_REGISTRY_AUTH_URL | sin establecer | Anulación opcional. Normalmente se descubre a partir del desafío WWW-Authenticate del registro. |
LAYERLEAK_DATABASE_URL | sin establecer | Si se establece, layerleak escribe los escaneos en Postgres y falla el comando si la persistencia no tiene éxito. |