目前我正在使用docker-compose文件来设置我的dev / prod环境。我正在使用环境变量来存储机密,数据库凭据等。经过一些搜索,我发现可以使用Vault来保护凭据。我尝试了几个带有保险库的基本示例,但我仍然不知道如何将Vault与docker-compose文件一起使用。有人能指出我一个正确的方法。如果Vault不是docker-compose的好解决方案,那么我可以使用哪些机制来保护凭证,而不是将它们作为纯文本存储在环境中。
答案 0 :(得分:14)
这是我目前在开发中使用Vault的docker-compose配置,但我在生产中使用专用服务器(而不是Docker)。
# 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
如果您必须重建容器,则卷安装可确保保存Vault配置。
要使用“文件”后端,要使此设置对Docker / Git可移植,您还需要创建一个名为config
的目录并将此文件放入其中,名为vault.json
:< / p>
# 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"
}
备注:强>
虽然ROOT_TOKEN
在此配置中是静态的(在容器构建之间不会更改),但每次必须打开保管库时,为VAULT_TOKEN
发出的任何生成的app_role
都将失效。
我发现当重新启动容器时,Vault有时会变得密封。
答案 1 :(得分:1)
我的版本略有不同:(主要添加了一些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"
}
如果我想在容器外部测试保管库,请执行(例如):http://localhost:8200/v1/sys/seal-status
如果我想在容器内进行测试:我可以(例如):http://vault:8200/v1/sys/seal-status
我用laradock实现了它。