19 个版本 (12 个重大更新)

1.0.0-beta.12021 年 12 月 28 日
0.12.0 2020 年 8 月 21 日
0.11.0 2019 年 7 月 2 日
0.10.0 2018 年 9 月 12 日
0.4.0 2016 年 3 月 28 日

#259 in 身份验证

Download history 23/week @ 2024-03-31

每月 74 次下载
用于 2 crates

CC0 许可证

49KB
908

credentials: 从环境或 Vault 获取秘密

Latest version License Build Status Documentation

变更日志

一个 十二因素应用(由 Heroku 推广)通常会将任何密码或其他秘密存储在环境变量中。另一种选择是将密码直接包含在源代码中,这会使得不小心向世界泄露它们变得容易得多。

但是,一旦您的应用程序部署变得复杂,将密码存储在中央、安全的存储中,如 Hashicorp 的 Vault 或 Square 的 [Keywhiz][keywhiz] 就变得容易得多。

无论您选择在哪里存储您的秘密,这个库旨在提供一个单一的、统一的 API

credentials::var("EXAMPLE_USERNAME").async?;
credentials::var("EXAMPLE_PASSWORD").async?;

默认情况下,这将返回 EXAMPLE_USERNAMEEXAMPLE_PASSWORD 环境变量的值。

访问 Vault

要从 Vault 获取秘密,您首先需要设置您使用 vault 命令行工具或 vault Ruby gem 所需要的东西

  • 您需要设置 VAULT_ADDR 环境变量为您 Vault 服务器的 URL。
  • 您可以在环境变量 VAULT_TOKEN 或文件 ~/.vault-token 中存储您的 Vault 令牌。

假设您在您的 vault 中存储以下秘密

vault write secret/example username=myuser password=mypass

要访问它,您需要在运行应用程序的目录中创建一个 Secretfile

# Comments are allowed.
EXAMPLE_USERNAME secret/example:username
EXAMPLE_PASSWORD secret/example:password

如果您有针对环境的秘密,您可以使用 $VAR${VAR} 将环境变量插入到 Secretfile 的路径部分

PG_USERNAME postgresql/$VAULT_ENV/creds/readonly:username
PG_PASSWORD postgresql/$VAULT_ENV/creds/readonly:password

像以前一样,您可以使用以下方式访问这些秘密

credentials::var("EXAMPLE_USERNAME").async?;
credentials::var("EXAMPLE_PASSWORD").async?;

credentials::var("PG_USERNAME").async?;
credentials::var("PG_PASSWORD").async?;

Kubernetes 集成

我们还支持 Vault 的 Kubernetes 认证方法。要使用此功能,您需要设置以下环境变量

  • VAULT_ADDR:Vault 服务器 URL。
  • VAULT_KUBERNETES_AUTH_PATH:Kubernetes认证方法挂载的Vault路径(默认为"kubernetes")。这允许您使用单个Vault服务器支持多个Kubernetes集群。
  • VAULT_KUBERNETES_ROLE:Vault Kubernetes角色的名称,如Vault中的/auth/kubernetes/role配置。

有关如何使用OpenShift设置Vault Kubernetes认证的示例,请参阅这篇文章

示例代码

请参阅示例目录以获取完整、可运行的代码。

待办事项

以下功能有待实现

  • 尊重Vault TTL。

贡献

欢迎您的反馈和贡献!只需提交一个问题或发送一个GitHub拉取请求。

依赖关系

~8–21MB
~323K SLoC