5个稳定版本

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

366Web编程

Download history 171/week @ 2024-05-07 234/week @ 2024-05-14 45/week @ 2024-05-21

169每月下载量

Apache-2.0

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_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 来实现。

特定的映射键同步

您可以使用 <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,您可以一次指定多个键值对
  • 当您指定敏感的文本值时,请确保使用环境变量,以确保敏感信息不会记录在历史中
  • --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

依赖关系

~17–29MB
~403K SLoC