5 个稳定版本
2.0.7 | 2024年5月19日 |
---|---|
2.0.5 | 2024年5月15日 |
2.0.4 | 2024年5月12日 |
#530 在 模板引擎
每月 173 次下载
用于 Teller
150KB
3K 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 脚本和点文件中将秘密硬编码进去?
在某些情况下,将变量 eval 到当前 shell 中是有意义的。例如,在您的 .zshrc
中,使用 teller
要比将其全部硬编码到 .zshrc
文件本身中更有意义。
在这种情况下,这是您应该添加的内容
eval "$(teller sh)"
🐳 简易 Docker 环境
厌倦了抓取各种变量、设置它们,并担心这些变量也会出现在您的 shell 历史记录中?
从此以后,使用这个单行命令
$ docker run --rm -it --env-file <(teller env) alpine sh
⚠️ 扫描秘密
Teller 可以帮助您应对秘密泛滥和硬编码的秘密,同时成为与您的 vault 共同工作的最佳生产力工具。
它还可以集成到您的 CI 中,并作为 DevSecOps 管道中的左移安全工具。
通过运行以下命令查找您的 vault 保留的秘密
$ 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
的键值对,您可以一次性指定多个对 - 当您指定敏感值时,请确保使用ENV变量,以便不会在历史记录中记录任何敏感信息
- 标志
--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"
}
提供者
您可以在文档中获取提供者列表及其描述的配置值。
测试清单
-
Windows上的Docker:如果您有一个基于容器的测试使用Docker,请确保在Windows上使用
#[cfg(not(windows))]
排除它 -
资源语义:在构建提供者时,将语义“空”和“未找到”视为两种不同的语义:如果提供者支持显式的“未找到”语义(404、NotFound等),则使用
Error::NotFound
。否则,当提供者将“未找到”语义作为空数据包发出信号时,返回一个空的KV[]
(即不要将“空”语义翻译为“未找到”)。
测试
测试使用
$ cargo test --all --all-features
并且需要在您的机器上安装Docker(或等效的)。
感谢
向所有贡献者 - 您使这一切成为可能,感谢您!
行为准则
Teller遵循CNCF行为准则
版权
依赖项
~14–25MB
~348K SLoC