5 个不稳定版本
新增 0.11.0 | 2024 年 8 月 16 日 |
---|---|
0.10.2 | 2024 年 8 月 13 日 |
0.10.1 | 2024 年 8 月 13 日 |
0.10.0 | 2024 年 8 月 13 日 |
0.9.1 | 2023 年 10 月 18 日 |
#680 in 文件系统
每月 566 次下载
在 streambed-confidant-cli 中使用
54KB
901 行
confidant
Confidant 是一个小型库,它为经常位于更广网络边缘的自主系统实现了一个基于文件系统的密钥存储功能。
Confidant 实现了 Streambed 密钥存储 API,存储的密钥已加密。
快速介绍
没有什么能比代码更能快速介绍!以下是一个写入和检索密钥的示例。请参阅各种测试以获取更完整的示例。
// Let's set up the correct permissions for where all secrets will live
fs::set_permissions(&confidant_dir, PermissionsExt::from_mode(0o700))
.await
.unwrap();
let ss = FileSecretStore::new(
confidant_dir.clone(),
&[0; crypto::KEY_SIZE], // A key to encrypt the stored secrets with
Duration::from_secs(1), // Timeout for unauthorized secrets before we try again
10, // The number of secrets we cache
None, // A data field to be used to indicate a TTL - if any
);
let mut data = HashMap::new();
data.insert("key".to_string(), "value".to_string());
let data = SecretData { data };
// Write the secret out.
assert!(ss.create_secret("some.secret", data.clone()).await.is_ok());
// Read the secret
assert!(ss.get_secret("some.secret").await.unwrap().is_some());
为什么选择 Confidant?
Confidant 的主要功能用例包括
- 检索和存储用户的密钥(用户指操作系统用户);以及
- 与其他用户共享密钥。
Confidant 的主要操作用例包括
- 由资源受限的设备托管,通常具有小于 128MiB 的内存和 8GB 的存储。
什么是 Confidant?
无网络
Confidant 不理解网络的概念,依赖于文件系统和操作系统权限
无认证或授权
...除此之外,操作系统提供的。
保险库模型
Confidant 使用与 Hashicorp Vault 相同的概念进行建模。因此,使用 Confidant 的服务可以方便地移植到 Vault。
Confidant 如何实现?
Confidant 作为库实现,避免了需要服务器进程的需求。请注意,我们没有为 Windows 提供服务的需求,并希望明确利用 Unix 文件权限。写入密钥时使用的模式与 Confidant 实例化时提供的目录相同。这确保了相同的权限(包括 ACLs)传递给每个密钥文件。
使用文件系统存储密钥和主机操作系统权限(包括用户、组和 ACLs)。使用 Tokio 进行文件读写操作,以便任何挂起的操作都允许其他任务继续运行。使用 Postcard 进行序列化,因为它能够方便地表示内存中的结构,并且针对资源受限的目标进行了优化。
维护一个 TTL 缓存,以最大限度地减少频繁检索的密钥的 I/O。
何时不应使用 Confidant
当您有 Hashicorp Vault 时。
依赖项
~9–11MB
~200K SLoC