19 个版本 (12 个重大更新)
1.0.0-beta.1 | 2021 年 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 身份验证
每月 74 次下载
用于 2 crates
49KB
908 行
credentials: 从环境或 Vault 获取秘密
一个 十二因素应用(由 Heroku 推广)通常会将任何密码或其他秘密存储在环境变量中。另一种选择是将密码直接包含在源代码中,这会使得不小心向世界泄露它们变得容易得多。
但是,一旦您的应用程序部署变得复杂,将密码存储在中央、安全的存储中,如 Hashicorp 的 Vault 或 Square 的 [Keywhiz][keywhiz] 就变得容易得多。
无论您选择在哪里存储您的秘密,这个库旨在提供一个单一的、统一的 API
credentials::var("EXAMPLE_USERNAME").async?;
credentials::var("EXAMPLE_PASSWORD").async?;
默认情况下,这将返回 EXAMPLE_USERNAME
和 EXAMPLE_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