内容提要
Fly.io开发了名为Tokenizer的安全代理,用于处理第三方API的秘密,通过加密秘密并限制访问,降低了Rails的攻击面。同时,SSOkenizer用于处理OAuth2令牌,进一步增强安全性。这些工具已开源,方便其他开发者使用。
延伸解读
为何要减少Rails接触秘密
Fly.io将Rails视为攻击面中最不确定的部分,因为Rails曾意外将YAML当作可执行文件格式,而其他组件多用Rust和Go等内存安全语言。因此他们定下规则:秘密只能从Rails移除,不能新增。这降低了因Rails漏洞导致秘密泄露的风险,尤其针对第三方API秘密和OAuth令牌。
Tokenizer如何工作
Tokenizer是一个无状态HTTP代理,持有Curve25519私钥。第三方API秘密被加密成令牌后,Rails只能存储和传递令牌,无法解密。当需要调用API时,Rails通过Tokenizer代理请求,并附加Proxy-Tokenizer头,其中包含加密秘密和改写指令。Tokenizer解密后注入请求,还可限制目标主机,防止令牌被滥用。
SSOkenizer解决OAuth令牌暴露
在OAuth2流程中,Rails原本需要短暂处理令牌,这违背了“不新增秘密”的原则。SSOkenizer在Go中完成OAuth2舞蹈,并将获得的令牌即时加密成令牌,再交给Rails。这些令牌只能通过Tokenizer使用,从而确保Rails始终不接触原始OAuth令牌,进一步缩小了攻击面。
开源与复用价值
Tokenizer和SSOkenizer已开源,且不依赖Fly.io特定环境,其他开发者可自行部署。它们用少量代码解决了秘密管理中的常见痛点:避免在应用代码中直接处理敏感信息,同时保持对第三方API的灵活调用。这种模式适合希望降低秘密泄露风险、又不想引入复杂秘密管理系统的团队参考。
Q&A
Tokenizer是什么,它的主要功能是什么?
Tokenizer是一个无状态的HTTP代理,主要用于处理第三方API的秘密,通过加密秘密并限制访问,降低Rails的攻击面。
SSOkenizer如何增强OAuth2令牌的安全性?
SSOkenizer在OAuth2流程中处理令牌,确保Rails不直接接触敏感信息,从而增强了安全性。
Fly.io为什么开发Tokenizer和SSOkenizer?
Fly.io开发这两个工具是为了降低Rails的攻击面,并安全地处理第三方API的秘密和OAuth2令牌。
Tokenizer和SSOkenizer是开源的吗?
是的,Tokenizer和SSOkenizer这两个工具已开源,方便其他开发者使用。
Tokenizer如何处理加密的秘密?
Tokenizer通过将第三方API的秘密加密为其公钥的形式进行处理,只有Tokenizer可以解密和使用这些秘密。
使用Tokenizer有什么优势?
使用Tokenizer可以将秘密暴露在更小的攻击面上,避免Rails直接接触秘密,并简化了代码审计和管理。