Dockerfile Hardening Checklist Akira
Checklist per ridurre attack surface, drift di build e findings Trivy.
Base Image
- Usare immagini runtime minimali:
python:3.12-slimper servizi Python enode:20-alpineper frontend Node. - Valutare il pin a digest (
@sha256:...) per release riproducibili. Quando si aggiorna il digest, rieseguire Trivy su PR prima del merge. - Evitare immagini full-fat se il runtime non richiede toolchain di build.
Build
- Preferire multi-stage build: stage builder separato e runtime con soli artifact necessari.
- Non copiare
.git,.venv,node_modules,.envo cache locali nel build context. Mantenere.dockerignoreallineato. - Installare package OS con
--no-install-recommendse rimuovere/var/lib/apt/lists/*nello stesso layer. - Usare cache BuildKit solo per package manager cache, non per secret.
Runtime
- Creare ed eseguire un utente non-root nel runtime stage (
USER akirao UID dedicato). - Usare
CMDexec-form, per esempio["uvicorn", "..."], evitando shell-form. - Esporre solo la porta del processo applicativo.
- Aggiungere
HEALTHCHECKcoerenti con il servizio: backend/healthzo/health/ready, frontend/, worker con check di processo o probe custom. - Preferire filesystem read-only in compose/deploy e montare volumi solo dove il processo deve scrivere stato.
CI
- Ogni immagine runtime deve passare Trivy image scan con
CRITICALbloccanti. HIGHresta report-only via SARIF finché il progetto non definisce una finestra di remediation dedicata.- Ogni ignore in
.trivyignoredeve indicare componente, motivo, mitigazione e data di review. - Eseguire
hadolintsui Dockerfile prima di merge.