6 个稳定版本

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

#190 in 配置

Download history 204/week @ 2024-05-07 246/week @ 2024-05-14 55/week @ 2024-05-21 6/week @ 2024-05-28

每月下载 219
用于 2 crates

Apache-2.0

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

这将:

  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"
}

提供者

您可以在[文档](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行为准则

版权

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

依赖关系

~7–28MB
~448K SLoC