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é.
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.