#secret #gpg #shared-secret #vault #team #vaults #user

sheesy-vault

由'share-secrets-safely' CLI使用的Vault功能。使用它来与基于GPG的Vault进行交互。

18个稳定版本 (3个主要版本)

4.0.11 2020年8月11日
4.0.10 2020年5月3日
4.0.8 2020年4月19日
4.0.7 2019年9月23日
1.0.1 2017年12月31日

#978 in 身份验证


sheesy-cli中使用

LGPL-2.1

87KB
2.5K SLoC

https://crates.io ci

share-secrets-safely (sheesy) 是一种用于团队和构建管道中管理共享密钥的解决方案。

pass 类似,sy 允许设置一个保险库来存储密钥,并与团队成员和工具共享。然而,它希望成为一个一站式商店,在单个二进制文件中,没有任何依赖,除了安装 gpg,帮助用户使用 gpg 工具链和解决特定问题。

asciicast

安装

请在此处阅读安装说明

入门

在书中可以找到如何使用保险库的完整示例和详细说明的第一步,请参阅此处

项目目标

  • 优秀的用户体验
    • 在工具设计中,用户体验优先,使新手容易上手,同时为专家提供所有可调的旋钮
    • 作为单个二进制文件部署,无需动态链接依赖项
  • 经过验证的加密技术
    • 不要重新发明轮子,使用 gpg 进行加密。要求在主机上安装 gpg 是可以的
    • 多亏了 GPG,每个用户都可以通过其公钥单独识别
  • 自动化和脚本编写容易
    • 存储结构化密钥与在shell脚本中使它们可用一样容易
    • 原生支持常见操作,如将密钥替换到文件中
    • 适当的程序退出代码使错误处理容易
  • 用户管理
    • 轻松支持小型和大型团队,以及多个团队
    • 利用gpg的信任网络,允许跨越团队边界继承信任,并激励彻底检查密钥
  • 基本访问控制
    • 划分您的密钥,并定义谁可以访问它们
  • 支持旧轮子 - 通过兼容性
    • 某些事情 pass 做得非常好,就是用最少的基础设施和配置设置一个保险库。我们使用该基础设施,而不是重新发明轮子。
    • 这使得我们与 pass 兼容,允许你在具有默认配置的 sheesy 保险库上使用 pass

非目标

  • 直接复制 passgpg 的功能
    • 在了解了 pass 究竟是什么以及它与 gpg 一起使用时可能有多困难之后,该项目不会考虑提供的功能,而是由其项目目标来驱动。
  • 成为类似 hashicorp vault 的东西
    • 这个解决方案是严格基于文件和离线的,因此可以在没有任何额外设置的情况下使用。

为什么我会选择 sheesy 而不是...

在我们的书中,您会发现各种比较,这些比较可能是带有偏见和观点的。然而,这是一本有趣的读物,并且请随时为更正提 PR。

注意事项

  • 许多加密操作在临时文件中存储解密数据。这些会接触磁盘,并且目前可能被攻击者获取。一个修复方法是 'tempfile',它允许使用安全的临时文件 - 然而,它可能会使 MUSL 构建变得不可能。静态构建应该仍然没问题。
  • 使用 'sign-key' 操作需要 GPG2。后者是在尝试通过 vault recipients add <fingerprint> 添加新的未经验证的接收者时所需的。

通往未来的路线图

如您从版本号中看到的那样,该项目慷慨地分配了主版本。这主要是因为,为了简化,CLI 以及所有使用的库只有一个版本号。

实际上,您可以期望 CLI 不会经常改变,如果它确实改变了,那也只是为了改进用户体验。我们编写的测试越多,就越能明显地看到某些不足。

保险库库 和其类型会频繁更改,但我们预计它将从 5.0 开始稳定。

通往 4.1 的路线图

这应该会使第一个可以宣传的发布版本,因为它应该包括人们开始舒适地使用 sheesy 所需要的所有材料。

  • 以下文档的说明
    • vault init
    • ...

通往 5.0 的路线图

GPGME 依赖项也是可用性的主要缺陷,因为最终它会下降到 GPG 自身的怪癖。 SEQUOIA 是 PGP 协议的纯 Rust 实现,这将极大地帮助使 sheesy 更加可用。

  • 使用 SEQUOIA 而不是 GPGME
  • 提供 Windows 二进制文件

通往 6.0 的路线图

添加 pass 子命令

sy 力求尽可能可用,并且在需要的情况下会破坏兼容性。然而,为了允许人们利用其自包含性带来的改进的可移植性,应该让它能够充当 pass 的替代品。

尽管其输出不会匹配,但其输入和行为将完全匹配。

  • init

最后但同样重要的是,应该有一些文档,突出显示相似之处和差异。

  • 文档

一些可用性改进

  • 确保当我们找不到分区时提供的错误消息更好,并且更具体地针对用例。
  • 列表的
    • 接收者
    • 资源

开发实践

  • 测试驱动开发
    • 防止回归并使实现功能变得简单
    • 使用Docker来测试更复杂用户交互
    • 保持其实用性,因为Rust编译器已经为你处理了一些琐事,比如不快乐的代码路径。
  • 安全第一
    • 处理所有错误,永远不要直接解包
    • 提供一个错误链,并使其易于理解出错的原因。
  • 努力实现最小可行产品(MVP)和1.0版本快速...
    • ...即使那只包括最常见的用例。
  • 更愿意快速增加主版本号...
    • ...而不是在主版本0上停留时间过长。

维护指南

发布版本

作为前提,你应该确保构建是绿色的。

  • 运行 clippy 并修复所有警告,使用 cargo clippy --all-features --bin=sy
  • VERSION 文件中更改版本
  • release.md 文件中更新发布说明。
    • 只需在前面加上新功能和修复的描述
  • 运行 make tag-release
    • 需要对此存储库的推送权限
    • 需要所有部署的crate在crates.io上拥有维护者或所有者权限

部署版本

作为前提,你必须已经发布了一个版本,并且你的工作树必须干净,HEAD位于一个提交上。

为了安全起见,测试将再次运行,因为CI还不能阻止你发布红色构建。

  • 运行 make deployment
  • release.md 文件中的所有文本复制并粘贴到github上的发布文本中。
  • 将所有 tar.gz 拖放到发布中并发布。
  • doc/src/installation.md 中,更新URL以使用最新发布的版本
  • 运行 make update-homebrew - 它会为你推送
  • 运行 make update-getting-started - 它会为你推送

制作新的Asciinema录制

尽管文档目前每次推送到master都会更新(以便轻松修复现有文档),但主页上的 eye-candy 也需要重新生成。

作为前提,你需要安装 asciinema 的二进制文件。请确保你的播放器已经通过 asciinema auth 链接到你的账户。

  • 将你的终端设置为120x20的大小
    • 当你调整iterm2/3终端窗口大小时会看到这些单位
  • 运行 make asciinema-no-upload 并使用 asciicast play getting-started.cast 验证它包含你期望的内容
  • 可能使用 make asciinema-upload 上传录制
    • 输入给定的URL,并根据您的喜好配置asciicast,在描述中添加反向链接,使其更加美观。

依赖项

~5.5MB
~114K SLoC