远程服务器上的 1Password Connect
如果你已经在运行 1Password Connect 服务器,例如在家用服务器或 Kubernetes 上,可以用它让 T3 Code 服务器通过它读取密钥。Connect 不需要桌面端批准,因此可以在无界面或远程主机上工作。
如果没有运行 Connect,用服务账号更简单。基础知识见密钥。
配置
- 在 1Password 中创建 Connect 服务器和访问令牌。把令牌限制在 T3 Code 需要的那些保险库上。
- 把 Connect API 和同步容器部署到 T3 Code 服务器能够访问的位置。
- 在运行 T3 Code 服务器的机器上安装 1Password CLI(
op)。 - 把
OP_CONNECT_HOST和OP_CONNECT_TOKEN放进服务器的环境变量。OP_CONNECT_HOST是 Connect API 的地址;如果端口不是该协议的默认端口,需要带上端口。除非 Connect 运行在同一台机器上,或运行在你信任的私有网络中,否则请使用https://地址,因为令牌和密钥会经过这条连接传输。对于后台服务,把两者都写入service.env并重启服务。参见配置服务环境。 - 在 设置 → 密钥 中选择 添加提供方(provider)。账号是必填项,但在已配置 Connect 时
op会忽略它,因此可以填写任意登录地址,例如my.1password.com。
然后照常使用引用,例如 op://Automation/provider-token/credential。
确认可用
在服务器所在的机器上,把 shell 中的 OP_CONNECT_HOST 和 OP_CONNECT_TOKEN 设为服务器使用的值。先确认该地址是一台 Connect 服务器,再用一份干净的环境读取一条密钥,这样只有 Connect 的变量能够登录:
bash
curl -s "$OP_CONNECT_HOST/health"
env -i PATH="$PATH" HOME="$(mktemp -d)" OP_CONNECT_HOST="$OP_CONNECT_HOST" OP_CONNECT_TOKEN="$OP_CONNECT_TOKEN" \
op read --no-newline "op://Automation/provider-token/credential" >/dev/null && echo "Secret read"健康检查的响应会标明这是 1Password Connect API。如果看到其他页面,说明该地址指向了别的东西,例如会对每个主机名都应答的反向代理。
这里检查的是你 shell 中的 Connect 变量,不是服务器自己的环境变量。要确认服务器能够读取该密钥,请在某项设置里使用这条引用,然后使用需要它的功能。如果服务器读不到该密钥,该功能会显示一条错误,并点明密钥提供方(provider)。
须知
- 智能体带着服务器的环境变量运行,因此智能体可以用 Connect 令牌读取它能够读取的一切。只把令牌授予那些你愿意让智能体读取其中条目的保险库。
- 通过 Connect,
op可以读取条目,但不能列出保险库或账号。请用op read测试,不要用op vault list。 - 引用中的名称可以包含字母、数字、空格、
.、_和-。标题为Service Token: CI的条目无法写成引用,请改用它的条目 ID,例如op://Automation/<item-id>/credential。 - Connect 令牌只能看到创建它时所指定的保险库。指向任何其他保险库的引用都无法读取。
- T3 Code 最多等待 1Password 45 秒。超时之后,该密钥视为不可读,需要它的功能会显示一条错误,并点明密钥提供方。
- 不要在同一环境中设置
OP_SERVICE_ACCOUNT_TOKEN。