在 Vault 中写入 PostgreSQL 数据库凭据以连接被拒绝而告终

Writing PostgreSQL database credentials in Vault ends up with connection refused

我正在尝试学习如何使用 Docker 和 PostgreSQL 实现 Vault。 目标是使用 PostgreSQL 创建一个 docker 容器并使用 HashiCorp Vault 连接到它。 我设法创建了一个配置为 docker、postgresql 和 vault 的 yml 文件。

    version: '3.1'

services:

  db:
    image: postgres
    container_name: postgreSQLCon
    restart: always
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: example
    ports:
      - 5432:5432 #important to configure vault with postgreSQL


  adminer:
    image: adminer
    container_name: adminerCon
    restart: always
    ports:
      - 8080:8080


  vault:
      image: vault:latest
      container_name: vaultCon
      depends_on:
        - "db"
      volumes:
         - ./vault/config:/vault/config
         - ./vault/policies:/vault/policies
         - ./vault/data:/vault/data
         - ./vault/logs:/vault/logs
      ports:
        - 8200:8200
      environment:
        - VAULT_ADDR=http://127.0.0.1:8200
      cap_add:
        - IPC_LOCK
      command: ['vault', 'server', '-config=/vault/config/vault-config.json']

保险库-config.json

{
  "backend": {
    "file": {
      "path": "vault/data"
    }
  },
  "listener": {
    "tcp":{
      "address": "0.0.0.0:8200",
      "tls_disable": 1
    }
  },
  "ui": true
}

保管库启动后,我将使用 docker exec -it 连接到容器。我设法解封并登录到保险库。当我 运行 以下命令时:

vault write database/config/my-postgresql-database \
    plugin_name=postgresql-database-plugin \
    allowed_roles="my-role" \
    connection_url="postgresql://{{username}}:{{password}}@localhost:5432/?sslmode=disable" \
    username="admin" \
    password="example"

我收到以下错误:

Error writing data to database/config/my-postgresql-database: Error making API request.

URL: PUT http://127.0.0.1:8200/v1/database/config/my-postgresql-database
Code: 400. Errors:

* error creating database object: error verifying connection: dial tcp 127.0.0.1:5432: connect: connection refused

这里的问题是您需要使用其容器 IP 地址而不是 127.0.0.1 连接到数据库容器。这应该可以使用容器名称 (db) 发现,因此只需将连接 URL 中的 localhost 替换为 db:

vault write database/config/my-postgresql-database \
    plugin_name=postgresql-database-plugin \
    allowed_roles="my-role" \
    connection_url="postgresql://{{username}}:{{password}}@db:5432/?sslmode=disable" \
    username="admin" \
    password="example"

参见https://docs.docker.com/compose/networking/