如何使用现有密钥在 docker 中启动 Hashicorp Vault

问题描述 投票:0回答:1

我正在为 Spring Boot 微服务和 Hashicorp Vault 构建 docker compose 环境。通过使用

docker compose up
,我想使用已知的 Vault root 令牌和现有的秘密启动完全配置的开发环境。

这是我当前的保险库服务配置

  vault:
    image: "vault"
    ports:
      - "8200:8200"
    expose:
      - "8200"
    restart: always
    volumes:
      - ./volumes/config:/vault/config
    cap_add:
      - IPC_LOCK
    environment:
      - "VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200"
    #entrypoint: vault server --config /vault/config/vault.json
    entrypoint: vault server --dev --dev-root-token-id="00000000-0000-0000-0000-000000000000"

在此配置中包含预打包 KV 机密的最佳方法是什么?

docker hashicorp-vault
1个回答
0
投票

我通过使用 Vault REST API 实现了这一点,我设置了另一个带有 alpine/curl 的服务(这个服务特别是因为它重量很轻并且预装了 curl)图像,只要在 .sh 文件中执行 curl 命令保险库图像旋转起来。

docker-compose.yaml:

version: "3.7"
services:
  vault-service:
    container_name: vault
    image: vault
    ports:
      - "8200:8200"
    environment:
      VAULT_DEV_ROOT_TOKEN_ID: "myroot"
      VAULT_ADDR: "http://127.0.0.1:8200"
    cap_add:
      - IPC_LOCK
    networks:
      - default

  vault-prepopulate:
    image: alpine/curl
    depends_on:
      - vault-service
    volumes:
      - ./prepopulate_vault.sh:/usr/local/bin/prepopulate_vault.sh
    command: ["sh", "-c", "/usr/local/bin/prepopulate_vault.sh"]
    networks:
      - default

networks:
  default:
    name: vaultnetwork
    driver: bridge

在 .sh 文件中,我让它休眠了 5 秒钟,因为在 vault 正确启动之前,我遇到了执行 curl 命令的问题。在标头中,指定了在 Docker-Compose 文件中设置的相同 Vault 令牌,然后设置数据。最后一行有一个 url,其中 docker bridge 网络用作域名,原因是在 docker-compose 文件中两个服务都配置为使用它来允许它们之间的通信,在“数据”之后/" 你可以配置秘密的路径。有关 Vault REST API 的更多信息,请参见此处

prepopulate_vault.sh:

sleep 5 &&
curl \
    --header "X-Vault-Token: myroot" \
    --request POST \
    --data '{ "data": {"pass": "my-password", "username":"my-username"} }' \
    http://vaultnetwork:8200/v1/secret/data/my-project
© www.soinside.com 2019 - 2024. All rights reserved.