机密管理
[!NOTE] 此文件夹不是关于密码管理的模块,我使用自托管的 VaultWarden 进行密码管理。
我的所有机密都使用 sops 进行管理,存储在这一文件夹下。机密可以通过我的 PGP 密钥或主机的 ssh 密钥(也就是 /etc/ssh/ssh_host_ed25519_key)进行解密,并存储在机器的 /run/secrets 目录下。
添加新主机
获取主机的 host key,此处以本机的 /etc/ssh/ssh_host_ed25519_key.pub 为例。运行 ssh-to-age 获得 age 密钥。
nix-shell -p ssh-to-age --run 'cat /etc/ssh/ssh_host_ed25519_key.pub | ssh-to-age'
在 .sops.yaml 的顶层 keys 字段下添加生成的 age 密钥,并在 creation_rules 下需要的项目中的 key_groups 字段下引用即可。随后需要使用 sops 更新所有相关机密文件。
创建机密
在终端中使用 sops 打开机密所在的文件:
sops secrets/secrets.yaml
并编辑添加新的机密字段:
this: "is a secret"
and: { a: { nest: secret } }
随后在 /secrets/base.nix 中编辑添加该字段
let
mapSecrets = keys:
builtins.listToAttrs (builtins.map (k: {
name = k;
value = {
format = "yaml";
sopsFile = ./secrets.yaml;
};
})
keys);
in {
sops.secrets = mapSecrets [
"this"
"and/a/nest"
];
}
即可在其他地方通过 config.sops.secrets.<name> 或 config.sops.placeholder.<name> 来调用机密。
创建新机密类型
在 .sops.yaml 中的 creation_rules 字段添加一个新的正则匹配组即可。