远程服务器上的 1Password 服务账户
当 T3 Code 服务器运行在你并不在旁边的机器上时,请使用 1Password 服务账户,例如无头主机、虚拟机,或一份 后台服务,你通过 远程访问 连接到它。
通过 1Password 桌面应用登录时,会在服务器所在的机器上请求批准。远程用户 看不到这个提示,因此无法读取该密钥。服务账户改为使用令牌登录,因此 不需要任何批准。
基本用法见 密钥。若改用自托管的 Connect 服务器,见 1Password Connect。
配置
- 在 1Password 中打开“开发者”,再打开“服务账户”,然后创建一个。
- 只授予它读取 T3 Code 所需保险库的权限。访问范围在账户创建时即已固定,而且 服务账户无法访问个人、私人或员工保险库。
- 复制该令牌。它只显示一次。
- 在运行 T3 Code 服务器的机器上安装 1Password CLI(
op)。 - 把
OP_SERVICE_ACCOUNT_TOKEN放入服务器的环境(environment)。如果是后台服务,把它加入service.env并重启该服务。参见 配置服务环境。 - 在 设置 → 密钥 中选择 添加提供方(provider)。账户为必填项,但令牌已设置时
op会忽略它, 因此可填写任意登录地址,例如my.1password.com。
之后照常使用引用,例如 op://Automation/provider-token/credential。
检查是否可用
在服务器所在的机器上,把 shell 里的 OP_SERVICE_ACCOUNT_TOKEN 设成服务器所用的同一个令牌, 然后在干净的环境(environment)中读取一个密钥,这样只有该令牌能够登录:
bash
env -i PATH="$PATH" HOME="$(mktemp -d)" OP_SERVICE_ACCOUNT_TOKEN="$OP_SERVICE_ACCOUNT_TOKEN" \
op read --no-newline "op://Automation/provider-token/credential" >/dev/null && echo "Secret read"如果打印出 Secret read,说明该令牌可以读取这个密钥。这检查的是你的 shell,而不是服务器自身的 环境。要确认服务器能读取它,请在某项设置中使用该引用,然后去用 需要它的功能。如果服务器读不到该密钥,该功能会显示一条点明密钥提供方(provider)的错误。
须知
- 智能体带着服务器的环境(environment)运行,因此智能体能用该令牌读取服务 账户所能读取的一切。只把那些你愿意让智能体读取其中条目的保险库授给它。
- 引用里的名称可以包含字母、数字、空格、
.、_和-。标题为Service Token: CI的条目无法写成引用,请改用它的条目 ID,例如op://Automation/<item-id>/credential。 - T3 Code 最多等待 1Password 45 秒。此后该密钥视为不可读,需要它的功能 会显示一条点明密钥提供方(provider)的错误。
- 不要在同一个环境里同时设置
OP_CONNECT_HOST和OP_CONNECT_TOKEN。