web-dev-qa-db-fra.com

Utilisation de Vault avec un fichier de composition de docker

Actuellement, j'utilise un fichier docker-compose pour configurer mes environnements dev/prod. J'utilise des variables d'environnement pour stocker des secrets, des informations d'identification de base de données, etc. Après quelques recherches, j'ai découvert que Vault peut être utilisé pour sécuriser les informations d'identification. J'ai essayé quelques exemples de base avec Vault, mais je n'ai toujours aucune idée de la façon d'utiliser Vault avec un fichier Docker-compose. Quelqu'un peut-il m'indiquer une bonne façon. Si Vault n'est pas une bonne solution avec docker-compose, quels sont les mécanismes que je pourrais utiliser pour sécuriser les informations d'identification plutôt que de les stocker dans l'environnement en texte brut.

C'est ma configuration docker-compose actuelle pour utiliser Vault en dev, mais j'utilise des serveurs dédiés (pas Docker) en production.

# docker_compose.yml
version: '2'
services:
    myvault:
        image: vault
        container_name: myvault
        ports:
          - "127.0.0.1:8200:8200"
        volumes:
          - ./file:/vault/file:rw
          - ./config:/vault/config:rw
        cap_add:
          - IPC_LOCK
        entrypoint: vault server -config=/vault/config/vault.json

Les montages de volume garantissent que la configuration du coffre-fort est enregistrée si vous devez reconstruire le conteneur.

Pour utiliser le backend 'file', pour rendre cette configuration portable pour Docker/Git, vous devrez également créer un répertoire appelé config et y mettre ce fichier, nommé vault.json:

# config/vault.json
{
  "backend": {"file": {"path": "/vault/file"}},
  "listener": {"tcp": {"address": "0.0.0.0:8200", "tls_disable": 1}},
  "default_lease_ttl": "168h",
  "max_lease_ttl": "0h"
}

Notes:
Bien que le ROOT_TOKEN est statique dans cette configuration (ne changera pas entre les builds de conteneurs), tout VAULT_TOKEN délivré pour un app_role sera invalidé chaque fois que le coffre-fort doit être descellé.

J'ai trouvé que le coffre-fort devient parfois scellé lorsque le conteneur est redémarré.

16
StampyCode

J'ai une version légèrement différente: (principalement ajouté quelques variables env)

docker-compose.yml

version: '3'

services:

    vault:
      image: vault:latest
      volumes:
        - ./vault/config:/vault/config
        - ./vault/policies:/vault/policies
        - ./vault/data:/vault/data
      ports:
        - 8200:8200
      environment:
        - VAULT_ADDR=http://0.0.0.0:8200
        - VAULT_API_ADDR=http://0.0.0.0:8200
        - VAULT_ADDRESS=http://0.0.0.0:8200
      cap_add:
        - IPC_LOCK
      command: vault server -config=/vault/config/vault.json

vault.json:

{                                    
  "listener":  {                     
    "tcp":  {                        
      "address":  "0.0.0.0:8200",  
      "tls_disable":  "true"         
    }                                
  },                                 
  "backend": {                       
    "file": {                        
      "path": "/vault/file"          
    }                                
  },                                 
  "default_lease_ttl": "168h",       
  "max_lease_ttl": "0h",
  "api_addr": "http://0.0.0.0:8200"
}  

Si je veux tester le coffre-fort en dehors d'un conteneur: je le fais (par exemple): http: // localhost: 8200/v1/sys/seal-status

Si je veux tester à l'intérieur d'un conteneur: je le fais (par exemple): http: // vault: 8200/v1/sys/seal-status

Je l'ai implémenté avec laradock.

5
Jean-Roch B.