DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»DevOps Zone»Comment sécuriser les conteneurs avec des images Cosign et Distroless
    DevOps Zone

    Comment sécuriser les conteneurs avec des images Cosign et Distroless

    octobre 14, 2021
    Comment sécuriser les conteneurs avec des images Cosign et Distroless
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    La technologie des conteneurs et le terme « images de conteneurs » ne sont pas nouveaux pour de nombreux développeurs, SRE et ingénieurs DevOps. Mais le besoin d’avoir des images de conteneur sécurisées pour le déploiement de production est quelque chose dont nous avons vraiment besoin de nos jours. Nous avons vu la récente attaque de la chaîne d’approvisionnement logicielle contre une application commerciale SolarWinds en insérant une porte dérobée.

    Lorsque les clients téléchargent les packages d’installation du cheval de Troie à partir de l’application SolarWinds, les attaquants peuvent accéder aux systèmes sur lesquels les produits SolarWinds sont en cours d’exécution. Dans cet article, nous discuterons des images de conteneurs cosignées et sans distribution qui peuvent vous aider à déployer et à exécuter vos conteneurs d’applications de manière plus sécurisée en production.

    Que sont les images de conteneur Distroless ?

    Les images de conteneur sans distribution sont des « images Docker axées sur la langue, moins le système d’exploitation ». Cela signifie qu’il ne contient que votre application et ses dépendances d’exécution, pas les autres gestionnaires de packages de système d’exploitation habituels, les shells Linux ou tout autre programme auquel nous nous attendrions généralement dans une distribution Linux standard. Les images de base sans distribution ont moins de packages que leurs homologues. Cela réduit la surface d’attaque car il y a moins de composants qui peuvent être vulnérables et donc augmenter la sécurité.

    Avantages des images de conteneurs sans distribution

    • Améliore la sécurité des conteneurs.
    • Réduit la taille du conteneur.
    • Réduit la portée de la conformité.
    • Améliore les performances de distribution des conteneurs.
    • Rentable en utilisant moins de ressources.

    Images de conteneurs sans distribution pour notre application avec vérification Cosign

    Cosign est un outil développé par Google en collaboration avec le Linux Foundation Project appelé sigstore pour simplifier la signature et la vérification des images de conteneurs. Google a annoncé que les images distroless sont désormais signées par Cosign. Cela signifie donc que tous les utilisateurs de distroless peuvent vérifier qu’ils utilisent bien l’image de base qu’ils souhaitaient, avant de lancer la création d’images, ce qui rend les images distroless encore plus fiables.

    Flux de travail général de Cosign

    Flux de travail Cosign

    Pourquoi avons-nous besoin de cosigner avec les images de conteneur Distrol ?

    Le besoin de Cosign est dû au fait que même avec les images sans distribution, il existe un risque de faire face à certaines menaces de sécurité telles que les attaques de typosquatting ou la réception d’une image malveillante. Si le processus de génération sans distribution est compromis, cela rend les utilisateurs vulnérables à l’utilisation accidentelle de l’image malveillante au lieu de l’image sans distribution réelle.

    Le typosquatting est une sorte d’attaque d’ingénierie sociale dans laquelle les attaquants publient des packages malveillants dans un registre dans l’espoir d’inciter les utilisateurs à les installer avec des noms similaires de package ou de registre/domaine.

    Comment créer les images du conteneur d’applications avec des images Cosign et Distroless ?

    Processus de création d'images de conteneur d'applications

    Vérifier l’image de base du conteneur Distroless avec la vérification Cosign

    Vérification de l’image sans distribution gcr.io/distroless/static avec la clé publique Cosign partagée par l’éditeur Google. Cela devrait être la première étape du processus de construction de l’image.

    $ cosign verify -key publisher-shared-cosign-pub.key gcr.io/distroless/static
    
    Verification for gcr.io/distroless/static --The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures    were verified against the specified public key - Any certificates were verified against the Fulcio roots.{"critical":{"identity":{"docker-    reference":"gcr.io/distroless/static"},"image":{"docker-manifest-digest":"sha256:c9320b754c2fa2cd2dea50993195f104a24f4c7ebe6e0297c6ddb40ce3679e7d"},"type":"cosign   container image signature"},"optional":null}
    

    Créez des images de conteneur d’applications avec des images de base sans distribution vérifiées par Cosign

    Il existe plusieurs approches pour créer des images d’application en tant qu’images de conteneur sans distribution :

    • Utilisez les outils de génération respectifs pour générer l’application à partir du code source. Après cela, en utilisant les directives Docker COPY ou ADD pour créer les images Docker avec les artefacts de build copiés ou ajoutés.
    • Construction Docker en plusieurs étapes.

    Je suis plusieurs scénarios ici, où je crée une image de conteneur Docker pour mon application Web Hello-World Go, que vous pouvez trouver ici avec une image statique sans distribution et des images de base standard.

    1. Image d’application créée avec gcr.io/distroless/static comme image de base dans un processus de génération en plusieurs étapes.

      FROM golang:1.15 as builder
      COPY . /usr/local
      WORKDIR /usr/local/
      RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w -extldflags "-static"' -o cmd/app
      
      FROM gcr.io/distroless/static
      USER nonroot:nonroot
      COPY --from=builder  --chown=nonroot:nonroot /usr/local/cmd/app /bin/app
      ENTRYPOINT ["/bin/app"]
      

    2. Image d’application créée avec golang:1.15 dans un processus de génération en une seule étape :

      FROM golang:1.15 as builder
      COPY . /usr/local
      WORKDIR /usr/local/
      RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /bin/app
      ENTRYPOINT ["/bin/app"]
      

    3. App Image construite avec ubuntu:21.04 comme image de base dans un processus de construction en plusieurs étapes :

      FROM golang:1.15 as builderstage
      COPY . /usr/local
      WORKDIR /usr/local/
      RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cmd/app
      
      FROM ubuntu:21.04
      COPY --from=builderstage /usr/local/cmd/app /bin/app
      ENTRYPOINT ["/bin/app"]
      

    Vous pouvez trouver les détails des rapports d’analyse Docker dans la rubrique suivante qui identifie l’importance de l’utilisation des images de base sans distribution pour votre application.

    Numérisation d’images de conteneur : images de conteneur sans distribution par rapport aux images de conteneur standard

    J’ai utilisé l’outil d’analyse natif Docker appelé Synk, qui est désormais disponible dans les versions les plus récentes du package Docker. Vous pouvez utiliser cet utilitaire en utilisant la commande docker : « docker scan image_name ».

    Rapport d’analyse d’image

    Image de base statique sans distribution Image de base standard en tant que Alpin Image de base standard en tant qu’Ubuntu
    $ docker scan local-distroless:v1

    Test local-distroless:v1…

    Organisation : jeswinjkn
    Gestionnaire de paquets : deb
    Nom du projet : docker-image|local-distroless
    Image Docker : local-distroless : v1
    Plateforme : linux/amd64
    Licences : activées

    ✔ Testé 3 dépendances pour les problèmes connus, aucun chemin vulnérable trouvé.

    $ docker scan local-standard:v1

    Test de la norme locale : v1…

    Organisation : jeswinjkn
    Gestionnaire de paquets : deb
    Nom du projet : docker-image|local-standard
    Image Docker : norme locale : v1
    Plateforme : linux/amd64
    Licences : activées

    Testé 200 dépendances pour les problèmes connus, trouvé 169 problèmes.

    $ docker scan local-ubuntu:v1

    Test de local-ubuntu:v1…

    Organisation : jeswinjkn
    Gestionnaire de paquets : deb
    Nom du projet : docker-image|local-ubuntu
    Image Docker : local-ubuntu:v1
    Plateforme : linux/amd64
    Licences : activées

    Testé 103 dépendances pour les problèmes connus, trouvé 12 problèmes.

    Remarque : vous pouvez trouver le rapport complet sur l’analyse de Synk dans les références.

    Signez l’image du conteneur d’applications Distroless créée à l’aide de Cosign

    Générer une paire de clés Cosign

    $ cosign generate-key-pair
    
    Enter password for private key: 
    Enter again: 
    Private key written to cosign.key
    Public key written to cosign.pub
    

    Nous devons baliser l’image de conteneur construite localement avec les détails du registre et la transmettre au registre distant. Signez l’image du conteneur distant avec la clé privée générée.

    $ cosign sign -key cosign.key jeswinkninan/distroless:v1
    
    Enter password for private key: 
    Pushing signature to: index.docker.io/jeswinkninan/distroless:sha256-41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08.sig
    

    Vérifiez l’image du conteneur d’applications avec la clé publique Cosign générée

    $ cosign verify -key cosign.pub jeswinkninan/distroless:v1 
    
    Verification for jeswinkninan/distroless:v1 --
    The following checks were performed on each of these signatures:
    - The cosign claims were validated
    - The signatures were verified against the specified public key
    - Any certificates were verified against the Fulcio roots.
    {"critical":{"identity":{"docker-reference":"index.docker.io/jeswinkninan/distroless"},"image":{"docker-manifest-     digest":"sha256:41fd2ec0997d91c5df7c7d58d0a2433a5744119d79a803123541cdd2b0e93f08"},"type":"cosign container image signature"},"optional":null}
    

    Points clés

    • Distroless sont des images Docker axées sur la langue, moins le système d’exploitation.
    • Moins de paquets, moins de chance d’avoir des vulnérabilités. Les images sans distribution n’auront que les packages nécessaires.
    • Les images sans distribution sont désormais cosignées.
    • Vérifiez chaque image sans distribution avec la clé publique Cosign avant chaque build.
    • L’analyse des images de conteneurs est indispensable dans votre système de construction CICD.
    • Cosignez l’image de l’application interne construite à partir de l’image sans distribution de base et vérifiez avant de l’utiliser en production pour garantir la confiance de l’image.

    Nous espérons que vous avez apprécié la lecture de cet article de blog !

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.