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"
}