我想使用 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:[email protected]: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:[email protected]: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 )中“{{}}”中提到的字段必须保留,即不使用实际值更新。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句