web-dev-qa-db-ja.com

docker-composeファイルでのVaultの使用

現在、私はdocker-composeファイルを使用して開発/製品環境をセットアップしています。私はシークレット、データベース資格情報などを保存するために環境変数を使用しています。検索の結果、資格情報を保護するためにVaultを使用できることがわかりました。 Vaultでいくつかの基本的な例を試しましたが、Docker-composeファイルでVaultを使用する方法がわかりません。誰かが正しい方法を教えてくれますか? Vaultがdocker-composeでの適切なソリューションではない場合、資格情報をプレーンテキストとして環境に保存するのではなく、セキュリティで保護するために使用できるメカニズムは何ですか。

これは、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

ボリュームをマウントすると、コンテナーを再構築する必要がある場合に、コンテナーの構成が確実に保存されます。

'file'バックエンドを使用して、この設定を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はこの構成では静的ですが(コンテナのビルド間で変更されません)、VAULT_TOKENに対して発行された生成されたapp_roleは、ボールトが必要になるたびに無効になります封印しない。

コンテナを再起動すると、Vaultが封印されることがあります。

16
StampyCode

私は少し異なるバージョンを持っています:(主にいくつかの環境変数を追加しました)

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で実装しました。

5
Jean-Roch B.