背景
根据12 Factor App的要求,配置信息最好存储在环境变量中。但密码作为配置的一种类型,我们不能将它的明文写在环境变量配置文件中。
为解决此问题,我们项目使用了AWS的Secrets Manager来管理密码,应用程序在启动时可以自动加载。但这也意味着需要手动添加密码到Secrets Manager中。
本文将介绍如何使用shush来对配置进行集中管理并减少手动操作。
shush 是什么?
shush是一个使用AWS KMS对密码进行加密和解密的工具。它可以解密以KMS_ENCRYPTED_
为前缀的环境变量,并将解密后的明文放入新的环境变量中。
为什么要使用 shush?
通过shush,我们可以将密码与其他配置放在一起管理,无需额外操作就可以自动解密密码。这比直接使用Secrets Manager更简便。
如何使用 shush?
CLI
安装
go get github.com/realestate-com-au/shush
或者
sudo curl -fsSL -o /usr/local/bin/shush \
"https://github.com/realestate-com-au/shush/releases/download/v1.5.4/shush_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_/amd/' | sed 's/aarch/arm/')" \
&& sudo chmod +x /usr/local/bin/shush
使用
加密
shush --region ap-southeast-2 encrypt KEY_ID '这是一个密码明文'
解密
shush --region ap-southeast-2 decrypt '这是一个密码密文'
Docker
安装
# Include "shush" to decode KMS_ENCRYPTED_STUFF
ARG TARGETARCH
RUN curl -fsSL -o /usr/local/bin/shush \
https://github.com/realestate-com-au/shush/releases/download/v1.5.4/shush_linux_${TARGETARCH} \
&& chmod +x /usr/local/bin/shush
ENTRYPOINT ["/usr/local/bin/shush", "exec", "--"]
使用示例
配置
-
添加
KMS_ENCRYPTED_DB_PASSWORD
环境变量KMS_ENCRYPTED_DB_PASSWORD="密文密码"
运行时
-
shush 会在环境变量中找到
KMS_ENCRYPTED_DB_PASSWORD
-
shush 会对其进行解密
-
shush 会把解密结果放在新的环境变量
DB_PASSWORD
中。环境变量现在为:KMS_ENCRYPTED_DB_PASSWORD="密文密码" DB_PASSWORD="明文密码"
-
启动应用程序
总结
通过shush,我们可以集中管理所有配置包括密码,避免了手动操作Secrets Manager的麻烦。它实现了简单高效的密码管理。