shush: Secrets Manager的一种替代方案

shush: Secrets Manager的一种替代方案

sjmyuan 12 2023-08-21

背景

根据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="密文密码"
    

运行时

  1. shush 会在环境变量中找到 KMS_ENCRYPTED_DB_PASSWORD

  2. shush 会对其进行解密

  3. shush 会把解密结果放在新的环境变量 DB_PASSWORD 中。环境变量现在为:

    KMS_ENCRYPTED_DB_PASSWORD="密文密码" 
    DB_PASSWORD="明文密码"
    
  4. 启动应用程序

总结

通过shush,我们可以集中管理所有配置包括密码,避免了手动操作Secrets Manager的麻烦。它实现了简单高效的密码管理。