html
我越深入家庭实验室和自托管的世界,就越意识到一件事。我有太多秘密以明文形式存储在 Dockerfiles、k8s、虚拟机以及我正在使用的其他程序中。我不喜欢这样,即使这些硬件在我家里,所以我开始寻找一个可以替代的秘密管理器。问题是大多数都专注于企业环境,这意味着需要订阅费用。
但后来我发现了一个可以免费使用的工具,而且这个名字你可能会很熟悉。Bitwarden 一直是最好的密码管理器之一,拥有强大的功能集,其中大部分是免费的。高级和企业功能需要订阅,但对于许多用户来说,你不需要那些功能。如果你想减少对云的依赖,可以选择在你的 NAS 上自托管它,这总是令人欣慰的。而且它有一个集成的秘密管理器,可以在应用程序需要时提供秘密,从而将明文凭据移出你的容器和其他地方。
为什么选择 Bitwarden 而不是其他选项?
它是免费的,支持自托管,并且可以在不同平台上使用
Bitwarden 已经是我们最喜欢的之一,因为它的安全功能和易用性都很棒。它几乎可以在任何地方使用,提供云和自托管选项来存储你的数据库,是开源的,并且多年来改善了用户体验。你可以使用硬件身份验证器的 MFA,支持密码密钥,以及你可能希望从密码管理器中获得的几乎所有其他功能。
但它最出色的地方在于家庭实验室
每个家庭实验室都是不同的,可能专注于自托管服务、工作使用的测试或其他许多事情。我喜欢减少对云服务的依赖,而能够自托管 Bitwarden 是我寻找家庭实验室密码管理器时的一大优势。这样我就可以将所有各种登录、API 密钥和其他秘密保存在我控制的硬件上。
Bitwarden Secrets Manager 非常适合家庭实验室
你不需要企业订阅就能享受这个出色工具的好处
Secrets Manager 是为组织设计的集中秘密管理工具,但这也意味着它对家庭实验室用户来说有些过于复杂。如果你使用 GitHub 或其他代码库来存放你的家庭实验室软件或文档,你可能已经意识到以明文形式存储 API 密钥和其他秘密是个不明智的选择。
相反,将它们安全地保存在密钥管理器中,可以让您细致地控制哪些应用和用户可以访问这些密钥,同时在运行时为应用提供及时的访问。
您的项目可以拥有任意数量的密钥或用于访问重要服务的键值对。这些可以是(但不限于):
- API 密钥
- 应用程序配置
- 数据库连接字符串
- 环境变量
您可以构建机器用户,或非人类用户,在运行时为密码库和您的应用程序之间提供连接,以便您可以实现自动化。
在 Docker 工作流中注入密钥很简单
从 Bitwarden 密钥管理器访问和注入密钥的主要方式是通过 CLI,一个名为 bws 的独立可执行文件,负责检索、解码和注入密钥。虽然您可以手动从 Docker 环境访问它,但将其以高级方式包含在 Dockerfile 中会更有趣。
这将安装 curl 和 jq, 然后将 bws 添加到你的 Docker 镜像中,并运行 一个脚本来创建一个环境变量文件,以便注入你指定的密钥。这个过程很优雅,只需设置一次,能帮助你熟悉创建自己的 Docker 镜像。
你还需要一个 entrypoint.sh 文件,它负责在你运行容器时注入秘密。你可以选择下面的两种方法中的任意一种,没用的那种可以注释掉:
#!/usr/bin/env bash
# 获取单个密钥的一种方法是使用 `get` 命令提取其值:
SECRET_1=$(bws secret get fc3a93f4-2a16-445b-b0c4-aeaf0102f0ff | jq '.value')
# 还有一种选择。此方法对密钥名称中的空格敏感。想了解更多选项,可以查看 `run` 命令的文档
bws run -- 'echo $SECRET_NAME'
# 运行你的项目吧
我发现使用 GET 命令更容易,这样如果多个密钥有相似的名称就不会产生歧义。然后只需要用 chmod +x 使该 sh 文件可执行,并使用 docker build -t image-name 构建你的 Docker 镜像。
在运行你的 Docker 容器时,你还需要把 Bitwarden Secrets 令牌加到参数中:
docker run --rm -it -e BWS_ACCESS_TOKEN= image-name
这条命令会启动你的容器,检索在 compose 文件中指定的密钥,并将它们注入到容器的环境中。这意味着没有敏感值以明文形式暴露,从而使密码、API 密钥和其他重要密钥更安全。
Bitwarden 比其他密码管理器提供更多免费服务
有很多密码管理器是免费的或有免费层级,但没有一个能提供像 Bitwarden 那样深度的选项。通过自托管、密钥管理和其他高级功能,它是存储我家庭实验室积累的所有 API 密钥、密码和其他秘密的最佳地方。
热门跟贴