A
u
Zine El Abidine Moualhi, Etienne Deneuve
Jan 8, 2023 · 3 min read

Qu'est-ce qu'un conteneur "distroless"?

Side view worker wearing gloves

Distroless containers

Distroless est l’évolution des meilleures pratiques de tout système que vous utilisez, le principe ferme d’installer seulement les choses dont vous avez besoin qui devrait être utilisé sur les conteneurs et le métal nu. Il présente des avantages en termes de sécurité et de performance en raison de l’empreinte réduite des conteneurs.

Trivy

Trivy est un scanner de sécurité extensible et polyvalent. Trivy a des scanners qui recherchent des failles de sécurité et des cibles où ces failles peuvent être trouvées. ( une image ayant des millions de téléchargements ne signifie pas qu’elle n’est pas vulnérable).

Terminal window
trivy image <container>

Cibles (ce que Trivy peut scanner) :

  • Image du conteneur.
  • Système de fichiers.
  • Dépôt Git (distant).
  • Image de machine virtuelle.
  • Kubernetes.

Scanners (ce que Trivy peut y trouver) :

  • Paquets OS et dépendances logicielles en cours d’utilisation (SBOM).
  • Vulnérabilités connues (CVE).
  • Problèmes d’IaC et mauvaises configurations.
  • Informations sensibles et secrets.

Images de base pour les langages interprétés ou basés sur une VM

Certains langages (comme Python) nécessitent un interpréteur pour qu’un script s’exécute. D’autres, comme JavaScript ou Java, nécessitent un moteur d’exécution complet (comme Node.js ou JVM). Comme les images distroless n’ont pas de gestionnaire de paquets, ajouter Python, OpenJDK ou Node.js peut être difficile si vous commencez avec une image distroless de base. Heureusement, les mainteneurs du projet ont prévu des paquets pour eux.

| Image | features | | ------------------ | -------------------------------------------------------------------------- | | distroless/static | ca-certificates, /etc/passwd entry for a root user, /tmp directory, tzdata | | distroless/base | [distroless/static]+glibc, libssl, openssl | | distroless/cc | [distroless/static]+rust | | distroless/node.js | [distroless/static]+node.js modules | | distroless/python | [distroless/static]+python | | distroless/java | [distroless/static]+java |

{{}} flowchart TD E[distroless/static] —>|based on| A A[distroless/base] —>|based on| C[distroless/cc] C —> |based on| H[distroless/nodejs] C —> |based on| G[distroless/java] C —> |experimental| I[distroless/python3] {{< /mermaid >}}

Conclusion: Un conteneur n’a pas besoin de contenir une distribution Linux complète. Cependant, bien qu’ils soient théoriquement viables, les conteneurs “scratch” manquent souvent d’éléments critiques que nous prévoyons instinctivement d’avoir à tout moment (comme les certificats CA ou les fuseaux horaires). Google est à la tête d’un des projets sans distribution qui tente de rendre les images scratch largement utiles.

References

  1. aquasecurity/trivy: Find vulnerabilities, misconfigurations (github.com)
Docker Containers Debloat

Articles relatifs