6 个稳定版本
2.0.7 | 2024年5月19日 |
---|---|
2.0.5 | 2024年5月15日 |
2.0.4 | 2024年5月12日 |
#190 in 配置
每月下载 219 次
用于 2 crates
110KB
2.5K 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
来完成。
特定映射键同步
您可以使用<提供者名称>/<映射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"
}
提供者
您可以在[文档](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行为准则
版权
依赖关系
~7–28MB
~448K SLoC