postgresql - Hashicorp Vault for PostgreSQL 动态凭据出错
问题描述
我想使用 Vault 为我的 PostgreSQL 数据库生成动态凭据。我做了这里给出的步骤:https ://www.vaultproject.io/docs/secrets/databases/postgresql.html 。平台版本如下:
执行平台:CentOS Linux 7.3。版本:Vault v1.1.2('0082501623c0b704b87b1fbc84c2d725994bac54')。PostgreSQL 版本:10.6 托管在 AWS RDS 中。
使用以下命令以开发模式启动 Vault 服务器:“vault server -dev”。
验证我能够使用 psql 和命令连接到 PostgreSQL 数据库:“psql -h my-rds-end-point.rds.amazonaws.com -p 5432 -d alerts -U master”
使用命令启用数据库机密引擎:“保险库机密启用数据库”。
使用以下命令创建数据库连接配置: A. 在 connection_url 中分别使用用户名、密码和。
[root@vault-server ~]# vault write database/config/my-postgresql-database \
> plugin_name=postgresql-database-plugin \
> allowed_roles="my-role" \
> connection_url="postgresql://master:pg_master_password@my-rds-endpoint.rds.amazonaws.com:5432/alerts" \
> username="master" \
> password="pg_master_password"
WARNING! The following warnings were returned from Vault:
* Password found in connection_url, use a templated url to enable root
rotation and prevent read access to password information.
B. 用户名、密码仅在 connection_url 中,不单独。
[root@vault-server ~]# vault write database/config/my-postgresql-database \
> plugin_name=postgresql-database-plugin \
> allowed_roles="my-role" \
> connection_url="postgresql://master:pg_master_password@my-rds-end-point.rds.amazonaws.com:5432/alerts"
WARNING! The following warnings were returned from Vault:
* Password found in connection_url, use a templated url to enable root rotation and prevent read access to password information.
C. 用户名、密码从 connection_url 中删除,但单独给出。
[root@vault-server ~]# vault write database/config/my-postgresql-database \
> plugin_name=postgresql-database-plugin \
> allowed_roles="my-role" \
> connection_url="postgresql://my-rds-end-point.rds.amazonaws.com:5432/alerts" \
> username="master" \
> password="pg_master_password"
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: pq: password authentication failed for user "root"
- 使用命令创建角色:
vault write database/roles/my-role \
db_name=my-postgresql-database \
creation_statements="CREATE ROLE \"vault_role\" WITH LOGIN PASSWORD 'vault_role_password' VALID UNTIL '2019-06-30'; \
GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"vault_role\";" \
default_ttl="1h" \
max_ttl="24h"
- 使用命令查询凭据:
[root@vault-server ~]# vault read database/creds/my-role
Key Value
--- -----
lease_id database/creds/my-role/WNdcEQ0YYZODGWzYxikRNztl
lease_duration 1h
lease_renewable true
password A1a-T19Eh8eKKGOZCLQt
username v-root-my-role-qWqOv4j34Sa3rQ3g35nJ-1559024979
观察:
1)当我尝试使用以下命令连接到数据库时,它失败了。我虽然 Vault 创建了一个名为“v-root-my-role-qWqOv4j34Sa3rQ3g35nJ-1559024979”的用户。但是,当我以 PostgreSQL 的主用户(超级用户)身份登录时执行“\du”时,我在用户列表中找不到该用户。
[root@vault-server ~]# psql -h my-rds-end-point.rds.amazonaws.com -p 5432 -d alerts -U v-root-my-role-qWqOv4j34Sa3rQ3g35nJ-1559024979
Password for user v-root-my-role-qWqOv4j34Sa3rQ3g35nJ-1559024979:
psql: FATAL: password authentication failed for user "v-root-my-role-qWqOv4j34Sa3rQ3g35nJ-1559024979"
FATAL: password authentication failed for user "v-root-my-role-qWqOv4j34Sa3rQ3g35nJ-1559024979"
问题:我在这里缺少什么?如何获得一组有效的凭据(用户名/密码)?Vault 是否真的创建了一个我可以使用“\du”psql 命令看到的用户/角色?
2)当我尝试使用以下命令获取另一组凭据时,它失败了。
[root@vault-server ~]# vault read database/creds/my-role
Error reading database/creds/my-role: Error making API request.
URL: GET http://127.0.0.1:8200/v1/database/creds/my-role
Code: 500. Errors:
* 1 error occurred:
* pq: role "vault_role" already exists
问题:我在这里缺少什么?如何获取多个凭据?
3) Step4A, 4B 抛出警告,而 4C 导致错误。上面第 4 步中提到的创建数据库连接配置的正确方法是什么?
我搜索了文档、帮助、互联网、论坛等,但找不到使这个用例工作的方法。
有人可以指导,提供有关如何配置 Vault 以生成动态凭据以作为特定角色连接到 PostgreSQL 的提示吗?
亲切的问候,沙希
解决方案
通过以下在此线程中讨论的建议解决了该问题:https ://groups.google.com/forum/#!msg/vault-tool/SaEIFGoWmHg/KWIgXczDBAAJ 。
结论:参考文档 ( https://www.vaultproject.io/docs/secrets/databases/postgresql.html )中“{{}}”中提到的字段必须保持原样,即不使用实际值进行更新。
推荐阅读
- arrays - 如何使用 prepareForSegue 从二维数组传递值
- javascript - 使用javascript在中间添加新的Param URL
- sap - 通过 RFC 连接时列出允许的方法?
- debian - 使用 apt_pkg 包(python-apt)以编程方式安装 debian 包
- java - 在 Eclipse 中将文本文件编码更改为 UTF-8 是否有任何副作用?
- html - 使用 CSS 对齐列表
- python - 通过标签组织想法的 Python 应用程序
- twilio - Twilio 没有向某些印度号码发送短信
- elixir - Elixir 是否真的需要两组相等运算符(正常和严格)?
- ios - 如何使用 Swift 4 将 JSON 值附加到数组中?