将Vault与docker-compose文件一起使用

Rum*_*chi 13 docker dockerfile docker-compose hashicorp-vault

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

Jea*_* B. 18

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

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
Run Code Online (Sandbox Code Playgroud)

保险库.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"
}  
Run Code Online (Sandbox Code Playgroud)

如果我想在容器外测试保险库:我这样做(例如):http://localhost:8200/v1/sys/seal-status

如果我想在容器内进行测试:我这样做(例如):http://vault:8200/v1/sys/seal-status

我用 laradock 实现了它。


Sta*_*ode 16

这是我目前在开发中使用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
Run Code Online (Sandbox Code Playgroud)

如果必须重建容器,则卷装入可确保保存Vault配置.

要使用'文件'后端,要使此设置可以为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"
}
Run Code Online (Sandbox Code Playgroud)

注:
虽然ROOT_TOKEN在此配置静态的(不会改变之间的集装箱版本),任何生成VAULT_TOKEN发出的app_role每一个金库,必须启封时间将失效.

我发现当重新启动容器时,Vault有时会变得密封.