请问大家如何管理 api key ?

现在越来越多的 ai 命令行工具都需要 api key 才能使用,包括 Emacs 内的 gptel 等等也有类似的问题。在互联网上却搜索不到相关的讨论,请问大家是如何管理的呢?

最平凡的方法似乎就是在 .zshrc 之类的 shell profile 里写 export,但是这样有几个问题

  • 似乎不是很安全
  • 跨设备同步?同一平台也许可以同步 shell profile,不同的平台(比如 macos 和 linux)呢?
  • 可能没法注入到程序里(比如,在 macos 下默认不会把 profile 里的环境变量注入到 GUI 启动的 Emacs 里)

如果只考虑 Emacs 本身,我的解决办法是让 Emacs 通过 bitwarden 读取 api key,这样也能实现跨设备同步。

https://www.gnu.org/software/emacs/manual/html_node/emacs/Authentication.html

gptel的readme里面写了用 .authinfo 的 :joy:

1 个赞

.authinfo 的主要问题是无法跨设备同步。在不同的设备间,安全地自动同步同一个 文件,我确实不知道怎么办。

我们考虑一个场景:添加了新的 api key . 没有自动同步机制的话,必须手动在所有设备上的 .authinfo 中同时添加,这是很麻烦的。

针对 Emacs,我目前的解决办法是把 bitwarden 的 master key 放在 .authinfo 里,然后让 Emacs 通过 bitwarden 访问特定的 api key. 这样就没有同步问题了,同步问题由 bitwarden 解决。

另外,.authinfo 和我的问题其实是无关的。auth source 是 Emacs 特有的工具,我问的是一个更广泛的场景:

(命令行、GUI,包括且不限于 Emacs 的)AI 工具怎么安全地访问 api key 呢?

我的方式是这样的,设置一个统一的env.sh的文件,后续自己要添加的所有环境变量都在这个文件中,然后再用其它shell的rc来引用它。然后对环境变量的管理,只要针对env.sh这个文件来进行增删改查就好了。

Dropbox 在各个系统同步配置文件

开启 (auth-source-pass-enable),然后放进 gpg 当中自动读取。

感觉本质是【跨平台同步含有敏感信息的 dotfile】?

也许可以看看 chezmoi 的 Encryption 章节 ,虽然我自己用 dotter 但原理(软链接)都一样,你也可以搜搜其他的 dotfile 管理工具的解决方案,做这类工具的一般 issue 里都能搜到 encrypt 相关内容

.authinfo.gpg 然后纳入 dotfile 管理

这看起来是是个不错的工具

当然是用 password-store ,emacs 里可以直接读取

1 个赞

我也是这么用的

1 个赞

每台设备重新生成一个 API key,取消用不到的权限,然后只要不传到网上,明文写在本地就行

如果觉得本地存明文不放心,macOS 可以用 keychain.app 和 /usr/bin/security,设置成取用无需密码,然后定期 audit 存取记录就行

1 个赞

方便性和安全性两者本身就是一个矛盾,看具体着重点了