PostgreSQL 存储后端

PostgreSQL 存储后端可以用来将 Vault 的数据保存到 PostgreSQL 服务器或是集群中。

  • 支持高可用集群 —— PostgreSQL 存储后端支持高可用集群。需要 PostgreSQL 9.5 或更高版本。
  • 仅有社区支持 —— PostgreSQL 存储后端由社区提供支持。虽然它已经过 HashiCorp 员工的审查,但他们可能对该技术并不了解。如果遇到问题,该问题可能会被转交给原作者。
storage "postgresql" {
  connection_url = "postgres://user123:secret123!@localhost:5432/vault"
}

请注意,PostgreSQL 存储后端插件会尝试使用 SSL 连接数据库。如果没有启用 SSL 那么必须配置 connection_url 参数来配置关闭 SSL。请参阅下方内容中关于关闭 SSL 的部分。

PostgreSQL 存储后端不会自动创建表。这里有一份样例 SQL 代码演示如何创建表以及索引:

CREATE TABLE vault_kv_store (
  parent_path TEXT COLLATE "C" NOT NULL,
  path        TEXT COLLATE "C",
  key         TEXT COLLATE "C",
  value       BYTEA,
  CONSTRAINT pkey PRIMARY KEY (path, key)
);

CREATE INDEX parent_path_idx ON vault_kv_store (parent_path);

启用高可用所需的表:

CREATE TABLE vault_ha_locks (
  ha_key                                      TEXT COLLATE "C" NOT NULL,
  ha_identity                                 TEXT COLLATE "C" NOT NULL,
  ha_value                                    TEXT COLLATE "C",
  valid_until                                 TIMESTAMP WITH TIME ZONE NOT NULL,
  CONSTRAINT ha_key PRIMARY KEY (ha_key)
);

如果使用的是 PostgreSQL 9.5 之前的版本,需要创建以下函数:

CREATE FUNCTION vault_kv_put(_parent_path TEXT, _path TEXT, _key TEXT, _value BYTEA) RETURNS VOID AS
$$
BEGIN
    LOOP
        -- first try to update the key
        UPDATE vault_kv_store
          SET (parent_path, path, key, value) = (_parent_path, _path, _key, _value)
          WHERE _path = path AND key = _key;
        IF found THEN
            RETURN;
        END IF;
        -- not there, so try to insert the key
        -- if someone else inserts the same key concurrently,
        -- we could get a unique-key failure
        BEGIN
            INSERT INTO vault_kv_store (parent_path, path, key, value)
              VALUES (_parent_path, _path, _key, _value);
            RETURN;
        EXCEPTION WHEN unique_violation THEN
            -- Do nothing, and loop to try the UPDATE again.
        END;
    END LOOP;
END;
$$
LANGUAGE plpgsql;

postgresql 参数

  • connection_url (string: <required>) – 设置连接 PostgreSQL 并进行身份验证的连接字符串。该参数也可以通过环境变量 VAULT_PG_CONNECTION_URL 来设置。完整的可用参数列表可以在 pg 库文档中找到。可以阅读本章后续的例子了解连接字符串的例子。
  • table (string: "vault_kv_store") – 设置 Vault 数据存储的表名。该表必须已经存在(Vault 不会尝试创建它)。
  • max_idle_connections (int) - 该参数默认情况下未经设置。设置空闲连接池的中最多可以容纳多少个空闲连接。请阅读 golang 关于 SetMaxIdleConns 的文档获取更多信息。 该功能需要使用 1.2 及更高版本。
  • max_parallel (string: "128") – 设置发往 PostgreSQL 的最大并行请求数。
  • ha_enabled (string: "true|false") – 是否启用高可用。默认不启用。需要 PostgreSQL 9.5 或更高版本。
  • ha_table (string: "vault_ha_locks") – 设置用以存储高可用信息的表名。该表必须已经存在(Vault 不会尝试创建它)。

postgresql 例子

自定义 SSL 验证

该例子演示了使用完整的 SSL 验证机制连接一个 PostgreSQL 集群(我们推荐这样做):

storage "postgresql" {
  connection_url = "postgres://user:pass@localhost:5432/database?sslmode=verify-full"
}

要关闭 SSL 验证(不推荐这样做),请把 verify-full 替换为 disable

storage "postgresql" {
  connection_url = "postgres://user:pass@localhost:5432/database?sslmode=disable"
}

results matching ""

    No results matching ""