Skip to main content

Dotenvx vs Vault: 哪个更适合应用配置和秘密管理?

· 4 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

Vault作为一款领先的私密信息管理工具,已经被广泛应用于各种规模的企业中。它提供了强大的功能来保护敏感数据,如动态凭证生成、密钥管理和访问控制等。 不少同学都会使用Vault Secret存储应用的配置和秘密信息,比如数据库密码、API密钥等,对于Java开发者来说, Spring Cloud Vault提供了无缝集成,使得在Spring Boot应用中使用Vault变得非常简单。

你只要在bootstrap.properties中添加如下配置即可:

spring.application.name=myapp
spring.cloud.vault.uri=http://localhost:8200
spring.cloud.vault.authentication=token
spring.cloud.vault.token=00000000-0000-0000-0000-000000000000

然后你只要基于以下结构存储Secret即可:

/secret/{application}/{profile}
/secret/{application}
/secret/{defaultContext}/{profile}
/secret/{defaultContext}

回到dotenvx,你只要对application.properties中的敏感配置项进行加密即可,如下:

# ---
# uuid: 019852dd-8798-7991-b1df-c2b388de0fc4
# sign: 6xEkGwGLig9DuO+iO5jm4RTBG+oQjKZt0XHvVQ28VZIDM8PFaaHMmG+S/xfezoCUJuMvqlFFNOokCg4WIkBWsg==
# ---
dotenv.public.key=02324d763b27358d4229651fd9d0822fb263b07bcc3422f5bd9968cafc194011ff
### spring configuration
nick=encrypted:BDFsggcvh9IiNUIZ66YrEI10sLoUJS6WW+UiUxqfAGyHo6cfg9lQ1DhOy9z18F50aRicFHZ7dXH7CagfhonUnZA5W+l1xldVBzv4b8OJN05qih2PHIcY01spqx6RYrgg76pUsuv2eA==

接下来你只需要设置DOTENV_PRIVATE_KEY环境变量为dotenvx的私钥即可,这样Spring Boot应用在启动后就可以自动解密配置项。 如果涉及多个profile,只要设置DOTENV_PRIVATE_KEY_{PROFILE}环境变量即可,比如DOTENV_PRIVATE_KEY_PROD等。 你可以参考:https://github.com/linux-china/dotenvx-boot-demo

那么问题来了,Vault和dotenvx到底哪个更适合应用配置和秘密管理呢?下面我们来对比一下两者的优缺点:

  • Vault需要要专门的系统和服务器,而dotenvx的配置就在应用项目中,更加轻量级,而且更稳定,完全不依赖外部系统。
  • Token管理:权限设置比较麻烦,Vault ACL policies了解一下。而dotenvx可以说是分布式的,应用自行管理自己的私钥,完全不需要中心化的权限管理。
  • 学习成本:Vault学习成本比较高,Seal/Unseal可以了解一下。而dotenvx的学习陈本几乎为零,基本上就是使用.env或者application.properties文件,然后执行一下命令加密即可。
  • 安全性:Vault ACL Policies非常灵活,但是实际使用中,不少人图省事,或者说是太麻烦啦,当然还Vault按客户端收费的因素,基本上2-3个token管理所有应用,如果出现Token泄露,爆炸半径还是比较大的,而dotenvx的私钥是分布式管理的,应用自行管理自己的私钥,即便泄露,基本上也就是单点爆炸。
  • 私密信息管理成本:Vault是专门服务,你修改配置时,本机要进行对应的测试,如单元测试验证,然后还要登录Vault进行修改,如果该配置调整不能做到兼容,前一版本不兼容对应的配置变更,那么就比较麻烦,你不能进行对应的配置推送,否则会有大问题。新的版本使用新的配置后,如果有bug要回滚,又是一堆麻烦,要重新调整Vault中配置项,然后之前版本才能启动。而dotenvx的配置是伴随着应用同步更新的,发布和回滚轻松自如。

有同学说,在做配置时,Vault可以完成配置推送,但是这个并不是Vault的特性,而是客户端在轮询,同样的机制,你也可以轮询git仓库中的.env文件, 同样可以实现配置的推送和更新。

对应独立开发者或者小型团队来说,Vault的复杂性和运维成本可能并不划算,而dotenvx则提供了一种更简单、更灵活的方式来管理应用配置和秘密信息。 如果你让自己轻松点,那么可以尝试使用一下dotenvx。安全合规,又对开发者友好,为何不尝试一下。