托马斯·克劳斯纳:使用gopass存储密码创建Postgres角色
内容提要
我们为一个包含两个子项目和多个服务的项目设置了测试服务器。每个服务使用不同的Postgres角色。我编写了脚本自动创建角色和密码,并将其存储在gopass中,生成了SQL文件和多个gopass秘密,简化了角色管理。
关键要点
-
为一个包含两个子项目和多个服务的项目设置了测试服务器(beta)。
-
每个服务使用不同的Postgres角色,需要设置多个角色,每个角色有独特的用户名和密码。
-
使用gopass管理密码和相关信息,部署时通过Ansible提取密码并注入到服务容器环境中。
-
编写脚本自动创建角色和密码,简化角色管理过程。
-
脚本生成SQL文件(create_roles.sql),并将新创建的密码存储在gopass中。
-
脚本通过双重循环遍历所有阶段和服务,提取项目名称并生成相应的gopass路径。
-
使用gopass生成32个字符的新密码,并将其用于创建Postgres角色。
-
运行脚本后,生成的SQL文件通过复制粘贴的方式部署到Postgres集群中。
-
脚本的编写比手动操作更有趣,未来可以改进脚本以更新现有角色,便于更频繁地旋转数据库凭证。
延伸问答
如何使用gopass管理Postgres角色的密码?
使用gopass可以管理Postgres角色的密码,通过脚本自动生成密码并存储在gopass中,部署时提取密码注入服务容器环境。
脚本是如何创建Postgres角色的?
脚本通过双重循环遍历所有阶段和服务,生成CREATE ROLE语句并将其输出到SQL文件中,同时生成并存储密码。
在设置测试服务器时需要考虑哪些Postgres角色?
每个服务需要设置不同的Postgres角色,每个角色有独特的用户名和密码,以便于管理和安全性。
如何通过Ansible部署服务时提取密码?
在部署时,通过Ansible可以从gopass中提取存储的密码,并将其注入到运行服务的容器环境中。
生成的SQL文件如何部署到Postgres集群?
生成的SQL文件通过复制粘贴的方式部署到Postgres集群中,执行相应的CREATE ROLE语句。
未来如何改进脚本以更新现有角色?
可以在脚本中添加功能,以便更新现有角色,从而更频繁和更容易地旋转数据库凭证。