現在、私は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が封印されることがあります。
私は少し異なるバージョンを持っています:(主にいくつかの環境変数を追加しました)
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で実装しました。