Skip to content

它能保护什么,保护不了什么 ​

Anpio Key 的目标只有一个:让 Agent 能代表你签名,但拿不走私钥,也不能超出你批准的范围。

能保护 ​

情况结果
Agent 想读私钥文件读不到;私钥在服务账号的托管目录里
Agent 想通过接口要私钥数据接口没有这个操作
Agent 想访问别的网站、路径或方法策略不匹配,拒绝签名
grant 过期或次数用光拒绝签名
Agent 想改策略、改 grant、给自己加权限管理接口只对管理员账号开放
你撤销了 grant不再产生新签名
机器重启旧 grant 全部作废,钥匙重新锁定

Linux 受保护部署还额外保证:服务、管理员、Agent 是三个系统账号,Agent 账号不能改程序、配置、状态或 socket 父目录。

保护不了 ​

情况说明
机器被 root、内核或管理员控制这一层不在防护范围内
已经发出去的签名撤销只能阻止新的签名,收不回已经到达对方的请求
你批准的权限太大如果允许“删除任意订单”,Agent 就能删除任意订单
同账号里的其他程序同一个系统账号就是同一个主体
以前导出或泄露的私钥备份软件无法收回已经复制出去的材料
对方是否真的执行了业务签名只证明请求来自这个身份

所以授权要写窄 ​

grant 应该尽量写成:

  • 只给一个 Agent 主体;
  • 只用一把热钥匙;
  • 只允许一个网站、一个路径、一个 HTTP 方法;
  • 只在一段明确的时间内有效;
  • 只允许有限的次数。

范围越窄,Agent 被控制后能造成的损失越小。解锁本身不等于授权;钥匙解锁后,Agent 仍然需要一张有效 grant。

信任前提 ​

使用受保护部署时,下面这些必须成立:

  • 管理员账号是可信的,没有被 Agent 控制;
  • root 和内核没有被攻破;
  • daemon 程序和配置没有被替换;
  • Agent 没有 sudo、宿主 Docker socket 或管理员凭据;
  • 整个 Agent 框架都在 Agent 账号下运行。

任何一条不成立,就不能把受保护部署的结论套用到这台机器上。

不同环境下的边界 ​

环境是否有账号隔离
Linux 正式 release + linux-protected-v1有,protected_supported=true
Linux preview、调试构建没有,protected_supported=false
macOS 本机预览有独立账号,但不是正式发行,protected_supported=false
同 UID 开发模式没有,任何同账号程序都能读文件

Apache-2.0 许可