【问题标题】:Using Vault with docker-compose file将 Vault 与 docker-compose 文件一起使用
【发布时间】:2017-12-23 14:29:44
【问题描述】:

目前我正在使用 docker-compose 文件来设置我的开发/生产环境。我正在使用环境变量来存储机密、数据库凭据等。经过一番搜索,我发现 Vault 可用于保护凭据。我尝试了几个带有 Vault 的基本示例,但我仍然不知道如何将 Vault 与 docker-compose 文件一起使用。有人可以指出我正确的方法。如果 Vault 不是 docker-compose 的一个很好的解决方案,我可以使用哪些机制来保护凭据,而不是将它们作为纯文本存储在环境中。

【问题讨论】:

  • 根据官方建议,Docker 并不是在生产中部署 Vault 的最佳解决方案:vaultproject.io/guides/production.html
  • 澄清:您是在问关于在 in docker-compose 中设置 vault - 还是在问关于在 docker-compose 中设置 使用的服务> 保险库?
  • 回复@GaëlMarziou,您引用的页面现在提供了强化在 Docker 上运行的 Vault 实例的指南。最佳实践仍然是在自己的实例上运行 Vault。
  • Docker 是可以解决的。官方推荐已更新。

标签: docker docker-compose dockerfile hashicorp-vault


【解决方案1】:

这是我目前在 dev 中使用 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

如果您必须重建容器,卷安装可确保保存保管库配置。

要使用“文件”后端,使此设置可移植到 Docker/Git,您还需要创建一个名为 config 的目录并将此文件放入其中,命名为 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"
}

注意事项:
尽管 ROOT_TOKEN 在此配置中是静态的(不会在容器构建之间更改),但每次必须解封保管库时,为 app_role 发出的任何生成的 VAULT_TOKEN 都将失效。

我发现 Vault 有时会在容器重新启动时被密封。

【讨论】:

  • 顺便说一句,这个设置允许我将 dev-vault 状态存储到版本控制存储库,例如 Git,因此 dev-vault 实例可以轻松构建在其他开发人员的盒子上,而无需发出所有 Vault-config 设置命令,或将它们构建到脚本中。
【解决方案2】:

我有一个稍微不同的版本:(主要是添加了一些环境变量)

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 实现了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2021-08-18
    • 2020-06-26
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多