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»Uncategorized»Comment gérer les secrets dans Docker
    Uncategorized

    Comment gérer les secrets dans Docker

    mars 15, 2023
    Comment gérer les secrets dans Docker
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    La gestion des secrets dans Docker est un problème de sécurité critique pour toute entreprise. Lors de l’utilisation de conteneurs Docker, il est essentiel de sécuriser les données sensibles, telles que les mots de passe, les clés API et autres informations d’identification.

    Cet article abordera certaines des meilleures pratiques de gestion des secrets dans Docker, y compris la façon de les stocker en toute sécurité et de minimiser leur exposition. Nous explorerons plusieurs solutions : utiliser Docker Secrets avec Docker Swarm, Docker Compose ou Mozilla SOPS. N’hésitez pas à choisir ce qui convient le mieux à votre cas d’utilisation. Mais le plus important est de se rappeler de ne jamais coder en dur vos secrets Docker en texte brut dans votre Dockerfile !

    Le respect de ces directives garantit la sécurité des informations sensibles de votre organisation, même lors de l’exécution de services conteneurisés.

    4 façons de stocker et de gérer les secrets dans Docker

    1. Utiliser Docker Secrets et Docker Swarm

    Docker Secrets et Docker Swarm sont deux outils officiels et complémentaires permettant de gérer en toute sécurité les secrets lors de l’exécution de services conteneurisés.

    Docker Secrets fournit un mécanisme sécurisé pour stocker et récupérer des secrets du système sans les exposer en texte brut. Il permet aux utilisateurs de protéger leurs informations d’identification en cryptant les données avec une clé unique avant de les transmettre au système.

    Docker Swarm est un outil puissant de gestion des clusters de nœuds pour les applications distribuées. Il fournit un moyen efficace de déployer des applications conteneurisées à grande échelle. Avec cet outil, vous pouvez facilement gérer plusieurs nœuds au sein d’un cluster et répartir automatiquement les charges de travail entre eux. Cela permet de garantir que votre application dispose de suffisamment de ressources disponibles à tout moment, même pendant les périodes de pointe d’utilisation ou les pics de trafic inattendus.

    Ensemble, ces deux outils offrent un moyen efficace de garantir la sécurité des informations sensibles de votre organisation malgré l’évolution constante des besoins de sécurité. Voyons comment créer et gérer un exemple de secret.

    Création d’un secret

    Pour créer un secret, nous devons d’abord initialiser Docker Swarm. Vous pouvez le faire en utilisant la commande suivante :

    Une fois le service initialisé, nous pouvons utiliser le docker secret create commande pour créer le secret :

    ssh-keygen -t rsa -b 4096 -N "" -f mykey
    docker secret create my_key mykey
    rm mykey

    Dans ces commandes, nous créons d’abord une clé SSH en utilisant le ssh-keygen commande et écrivez-la à mykey. Ensuite, nous utilisons la commande Docker secret pour générer le secret. Assurez-vous de supprimer le mykey fichier pour éviter tout risque de sécurité.

    Vous pouvez utiliser la commande suivante pour confirmer que le secret a bien été créé :

    Nous pouvons maintenant utiliser ce secret dans nos conteneurs Docker. Une façon est de passer ce secret avec –secret flag lors de la création d’un service :

    docker service  create --name mongodb --secret my_mongodb_secret redis:latest

    Nous pouvons également transmettre ce secret au docker-compose.yml déposer. Prenons un exemple de fichier :

    version: '3.7'
    services:
      myapp:
        image: mydummyapp:latest
        secrets:
          - my_secret
        volumes:
          - type: bind
            source: my_secret_key
            target: /run/secrets/my_secret
            read_only: true
    secrets:
      my_secret:
        external: true

    Dans l’exemple de fichier de composition, la section secrets définit un secret nommé my_secret_key (discuté plus tôt). Le myapp la définition de service spécifie qu’elle nécessite my_secret_key et le monte en tant que fichier à /run/secrets/my_secret dans le conteneur.

    2. Utilisation de Docker Compose

    Docker Compose est un outil puissant pour définir et exécuter des applications multi-conteneurs avec Docker. Une pile est définie par un docker-compose fichier vous permettant de définir et de configurer les services qui composent votre application, y compris leurs variables d’environnement, réseaux, ports et volumes. Avec Docker Compose, il est facile de configurer une application dans un seul fichier de configuration et de la déployer rapidement et de manière cohérente dans plusieurs environnements.

    Docker Compose fournit une solution efficace de gestion des secrets pour les organisations manipulant des données sensibles telles que les mots de passe ou les clés API. Vous pouvez lire vos secrets à partir d’un fichier externe (comme un fichier TXT). Mais attention à ne pas commiter ce fichier avec votre code :

    version: '3.7'
    services:
      myapp:
        image: myapp:latest
        secrets:
          - my_secret
    secrets:
      my_secret:
        file: ./my_secret.txt

    3. Utiliser un conteneur side-car

    Une stratégie typique pour maintenir et stocker des secrets dans un environnement Docker consiste à utiliser des conteneurs side-car. Les secrets peuvent être envoyés au conteneur d’application principal via le conteneur sidecar, qui peut également exploiter un gestionnaire de secrets ou un autre service sécurisé.

    Comprenons cela en utilisant un side-car Hashicorp Vault pour un conteneur MongoDB :

    • Tout d’abord, créez un Docker Compose (docker-compose.yml) fichier avec deux services : mongo et secrets.
    • Dans le secrets service, utilisez une image contenant l’outil de gestion des secrets de votre choix, tel qu’un coffre-fort.
    • Montez un volume du conteneur de secrets au mongo conteneur de sorte que le mongo conteneur peut accéder aux secrets stockés dans le conteneur de secrets.
    • Dans le mongo service, utilisez des variables d’environnement pour définir les informations d’identification de la base de données MongoDB et référencez les secrets stockés dans le volume monté.

    Voici l’exemple de fichier de composition :

    version: '3.7'
    
    services:
      mongo:
        image: mongo
        volumes:
          - secrets:/run/secrets
        environment:
          MONGO_INITDB_ROOT_USERNAME_FILE: /run/secrets/mongo-root-username
          MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/mongo-root-password
      secrets:
        image: vault
        volumes:
          - ./secrets:/secrets
        command: ["vault", "server", "-dev", "-dev-root-token-id=myroot"]
        ports:
          - "8200:8200"
          
    volumes:
      secrets:

    4. Utilisation de Mozilla SOPS

    Mozilla SOPS (Secrets Ops) est une plate-forme open source qui fournit aux organisations un moyen sécurisé et automatisé de gérer les secrets chiffrés dans les fichiers. Il offre une gamme de fonctionnalités conçues pour aider les équipes à partager des secrets dans le code de manière sûre et pratique. Ce qui suit suppose que vous êtes déjà familiarisé avec les SOPS, si ce n’est pas le cas, commencez ici.

    Voici un exemple d’utilisation de SOPS avec docker-compose.yml:

    version: '3.7'
    
    services:
      myapp:
        image: myapp:latest
        environment:
          API_KEY: ${API_KEY}
        secrets:
          - mysecrets
    
      sops:
        image: mozilla/sops:latest
        command: ["sops", "--config", "/secrets/sops.yaml", "--decrypt", "/secrets/mysecrets.enc.yaml"]
        volumes:
          - ./secrets:/secrets
        environment:
          # Optional: specify the path to your PGP private key if you encrypted the file with PGP
          SOPS_PGP_PRIVATE_KEY: /secrets/myprivatekey.asc
    
    secrets:
      mysecrets:
        external: true

    Dans ce qui précède, le myapp service nécessite un secret appelé API_KEY. Le secrets section utilise un secret appelé mysecretsqui devrait être stocké dans un magasin clé/valeur externe, tel que les secrets Docker Swarm ou HashiCorp Vault.

    Le sops utilise l’image officielle SOPS Docker pour déchiffrer le mysecrets.enc.yaml fichier, qui est stocké dans le local ./secrets annuaire. Les secrets déchiffrés sont montés sur le myapp service en tant que variables d’environnement.

    Note: Assurez-vous de créer le répertoire des secrets et d’ajouter les mysecrets.enc.yaml dossier et le sops.yaml fichier de configuration (avec configuration SOPS) dans ce répertoire.

    Rechercher des secrets dans vos images Docker

    Les secrets de codage en dur dans Docker constituent un risque de sécurité important, ce qui les rend vulnérables aux attaquants. Nous avons vu différentes bonnes pratiques pour éviter de coder en dur des secrets en texte brut dans vos images Docker, mais la sécurité ne s’arrête pas là.

    Vous devriez également scanner vos images pour les secrets

    Tous les Dockerfiles commencent par un FROM directive qui définit l’image de base. Il est important de comprendre que lorsque vous utilisez une image de base, en particulier à partir d’un registre public comme Docker Hub, vous extrayez du code externe qui peut contenir des secrets codés en dur. Plus d’informations sont exposées que visibles dans votre Dockerfile unique. En effet, il est possible de récupérer un secret en clair codé en dur dans une couche précédente à partir de votre image.

    De fait, de nombreuses images Docker publiques sont concernées : en 2021, on estimait que **7% de la Hub Docker les images contenaient au moins un secret.**

    Heureusement, vous pouvez facilement les détecter avec ggshield (CLI GitGuardian). Par exemple:

    ggshield secret scan docker ubuntu:22.04

    Conclusion

    La gestion des secrets dans Docker est un élément crucial pour préserver la sécurité de vos applications conteneurisées. Docker comprend plusieurs outils intégrés pour conserver les secrets, tels que les fichiers Docker Secrets et Docker Compose.

    De plus, les organisations peuvent utiliser des solutions tierces, telles que HashiCorp Vault et Mozilla SOPS, pour gérer les secrets dans Docker. Ces technologies offrent des fonctionnalités supplémentaires, telles que le contrôle d’accès, le chiffrement et la journalisation d’audit, pour renforcer la sécurité de votre gestion des secrets.

    Enfin, trouver et limiter l’exposition accidentelle ou involontaire d’informations sensibles est crucial pour gérer les secrets dans Docker. Les entreprises sont invitées à utiliser des outils d’analyse secrets, tels que GitGuardian, pour analyser les images Docker intégrées dans leurs pipelines CI/CD afin de prévenir les attaques de la chaîne d’approvisionnement.

    Si vous souhaitez en savoir plus sur la sécurité Docker, nous avons également résumé certaines des meilleures pratiques dans une feuille de triche.

    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.