5个稳定版本
2.0.7 | 2024年5月19日 |
---|---|
2.0.5 | 2024年5月15日 |
2.0.4 | 2024年5月12日 |
366在Web编程
169每月下载量
195KB
4K SLoC
💻 从不离开终端处理密钥
📟 创建简单、整洁的云环境工作流程
🔎 扫描密钥并打击密钥蔓延
Teller - 开发者的开源通用密钥管理器
在开发、测试和构建应用程序时,永远不要离开终端使用密钥。
与其使用自定义脚本,不如在.zshrc
文件中的令牌,bash历史中的可见EXPORT
,丢失的.env.production
文件以及其他在工作站周围的内容,只需使用teller
并将其连接到您喜欢的任何保险库、密钥存储或云服务(Teller支持Hashicorp Vault、AWS Secrets Manager、Google Secret Manager等)。
您可以使用Teller整理自己的环境,也可以作为团队的过程和最佳实践。
使用teller
快速入门
下载二进制文件 从发布版下载二进制文件
从源码构建 使用此方法将允许您查看源代码、审查它,并构建自己的副本。
这将在本机上本地安装二进制文件
$ cd teller-cli
$ cargo install --path .
创建新的配置
$ teller new
? Select your secret providers ›
⬚ hashicorp_consul
⬚ aws_secretsmanager
⬚ ssm
⬚ dotenv
⬚ hashicorp
⬚ google_secretmanager
然后,编辑新创建的.teller.yml
以设置您提供者所需的映射和密钥。
查看teller.yml
teller YAML描述了您的提供者,在每个提供者内部有一个map
描述
- 从何处获取键值的基本路径
- 对于每个此类映射,其唯一的
id
,它将在以后的操作中为您提供帮助 - 对于每个映射,一个可选的特定键名映射 - 您可以重命名您将从中获取源提供者的键
以下是一个示例配置文件。请注意,它还包括模板结构,例如在加载配置时获取环境变量。
providers:
hashi_1:
kind: hashicorp
maps:
- id: test-load
path: /{{ get_env(name="TEST_LOAD_1", default="test") }}/users/user1
# if empty, map everything
# == means map to same key name
# otherwise key on left becomes right
# in the future: key_transform: camelize, snake_case for automapping the keys
keys:
GITHUB_TOKEN: ==
mg: FOO_BAR
dot_1:
kind: dotenv
maps:
- id: stg
path: VAR_{{ get_env(name="STAGE", default="development") }}
现在您可以将这些提供者称为 hashi_1
或 dot_1
。默认情况下,Teller 从所有提供者中提取指定的数据。
功能
🏃 运行子进程
手动导出和设置环境变量以运行类似/生产设置的过程吗?
使用过 .env.production
并将其暴露在本地项目中,被咬过吗?
使用 teller
和一个 .teller.yml
文件,该文件对好奇的眼睛不暴露任何内容,您可以流畅且无缝地工作,零风险,也不需要引号。
$ teller run --reset --shell -- node index.js
🔎 检查变量
这将输出当前 teller
选择的变量。当然,每个变量的前两个字母将会显示。
$ teller show
📺 本地shell填充
将秘密硬编码到您的shell脚本和dot文件中?
在某些情况下,将变量评估到当前shell中是有意义的。例如,在您的 .zshrc
中,使用 teller
而不是将所有这些硬编码到 .zshrc
文件本身中,会更合理。
在这种情况下,您应该添加以下内容
eval "$(teller sh)"
🐳 简易Docker环境
厌倦了抓取各种变量、设置这些变量,并担心它们出现在您的shell历史记录中?
从现在开始使用这个单行命令
$ docker run --rm -it --env-file <(teller env) alpine sh
⚠️ 扫描秘密
Teller可以帮助您与您的保管库一起工作,提高生产力,并成为与您的保管库一起工作的最佳工具。
它还可以集成到您的CI中,并作为DevSecOps管道的左移安全工具。
运行以下命令以在您的代码中查找保管库中保存的秘密
$ teller scan
您可以在CI中像这样将其作为linter运行
run: teller scan --error-if-found
如果它找到东西(返回退出代码 1
),它将破坏您的构建。
您还可以使用 --json
将结果导出为JSON,并使用 -b
扫描二进制文件。
♻️ 从进程输出、日志和文件中删除秘密
您可以使用 teller
作为跨您的基础设施的删除工具,并在删除其输出以及清理日志和日志实时跟踪的同时运行进程。
将任何进程输出、尾或日志通过管道传递到teller以删除它们
$ cat some.log | teller redact
它也应该与 tail -f
一起工作
$ tail -f /var/log/apache.log | teller redact
最后,如果您有一些想要删除的文件,您也可以这样做
$ teller redact --in dirty.csv --out clean.csv
如果您省略了 --in
,Teller 将取 stdin
,如果您省略了 --out
,Teller 将输出到 stdout
。
📜 填充模板
您可以为自定义模板填充内容
$ teller template --in config-templ.t
模板格式是 Tera,它与liquid或handlebars非常相似。
以下是一个示例模板
production_var: {{ key(name="PRINT_NAME")}}
production_mood: {{ key(name="PRINT_MOOD")}}
🔄 在提供者之间复制/同步数据
如果您想在提供者之间同步,可以使用 teller copy
来实现。
特定的映射键同步
您可以使用 <provider name>/<map id>
格式来复制一个映射从提供者到另一个提供者
$ teller copy --from source/dev --to target/prod,<...>
在这个简单的例子中,我们使用以下配置文件
providers:
dot1:
kind: dotenv
maps:
- id: one
path: one.env
dot2:
kind: dotenv
maps:
- id: two
path: two.env
这将
- 从源映射获取所有映射值
- 对于每个目标提供者,找到匹配的映射,并将源数据复制到其中
默认情况下,复制将更新目标映射(upsert数据),如果您想替换,可以使用--replace
。
🚲 写入和多写入到提供者
支持写入用例的Teller提供者允许将值写入提供者。
记住,这个特性仍然围绕您teller.yml
文件中的定义
$ teller put --providers new --map-id one NEW_VAR=s33kret
在这个例子中,正在使用此配置
providers:
new:
kind: dotenv
maps:
- id: one
path: new.env
一些注意事项
- 值是键值对,格式为:
key=value
,您可以一次指定多个键值对 - 当您指定敏感的文本值时,请确保使用环境变量,以确保敏感信息不会记录在历史中
--providers
标志允许您一次向一个或多个提供者推送
❌ 从提供者删除和多删除
Teller提供者支持从提供者中删除值。
$ teller delete --providers new --map-id one DELETE_ME
一些注意事项
- 您可以指定多个要删除的键,例如
--providers
标志允许您一次向一个或多个提供者推送
YAML
以YAML格式导出
XXX TODO:重写命令export的工作方式
您可以以YAML格式导出,适用于GCloud
$ teller export yaml
示例格式
FOO: "1"
KEY: VALUE
JSON
以JSON格式导出
您可以以JSON格式导出,适用于通过jq
或其他工作流程
$ teller export json
示例格式
{
"FOO": "1"
}
提供者
您可以在[文档](https://docs.rs/teller-providers/latest/teller_providers/providers/index.html)中找到提供者列表及其描述的配置值。
测试清单
-
Windows上的Docker:如果您有一个基于容器的测试使用Docker,请确保在Windows上排除它,使用
#[cfg(not(windows))]
-
资源语义:在构建提供者时,将空和未找到作为两种不同的语义对齐:如果一个提供者支持显式的“未找到”语义(404、NotFound等),使用
Error::NotFound
。否则,当提供者将“未找到”语义表示为空数据包时,返回空的KV[]
(即不要将“空”的语义翻译为“未找到”)。
测试
测试是通过以下方式完成的
$ cargo test --all --all-features
并且需要在您的机器上安装Docker(或等效)。
感谢
感谢所有贡献者 - 您使这一切成为可能,谢谢!
行为准则
Teller遵循CNCF行为准则
版权
依赖关系
~17–29MB
~403K SLoC