#secret #vault #secrets-manager #devtool

teller-core

开发者优先的多供应商密钥管理器

5 个稳定版本

2.0.7 2024年5月19日
2.0.5 2024年5月15日
2.0.4 2024年5月12日

#530模板引擎

Download history 279/week @ 2024-05-10 164/week @ 2024-05-17 20/week @ 2024-05-24 1/week @ 2024-05-31

每月 173 次下载
用于 Teller

Apache-2.0

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_1dot_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

这将

  1. 从源映射中抓取所有映射的值
  2. 对于每个目标提供者,找到匹配的映射,并将源中的值复制到其中

默认情况下,复制将更新目标映射(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行为准则

版权

版权(c)2024 @jondot。有关更多信息,请参阅LICENSE

依赖项

~14–25MB
~348K SLoC