操作化马卡龙

这是一篇关于 Fly.io 公司使用 Macaroon 令牌的工程深度文章,主要内容如下:

  • 背景:Fly.io 是一家安全令牌公司,有公共云问题,已花费大量时间讨论安全令牌和 Macaroon 令牌,现正将内部 Macaroon 项目移交给新所有者,并整理操作手册,决定分享相关内容。Macaroon 令牌是一种承载令牌,可让终端用户自行缩小现有令牌的范围,具有用户可维护的插件接口。
  • tkdb 系统:Macaroon 是在线有状态的,需要数据库,Fly.io 不将其数据库放在主 API 集群中,而是创建了tkdb系统来管理令牌数据,它由约 5000 行 Go 代码组成,管理着由 LiteFS 和 Litestream 管理的 SQLite 数据库,运行在隔离硬件上,数据加密,具有亚秒级复制和时间点恢复功能,数据库写入相对较少且简单。
  • 与 tkdb 通信:由于历史原因,与tkdb通信很复杂,最初通过 NATS 导出 RPC API,后因产品安全团队不信任 NATS 而改为 HTTP/Noise 接口,tkdb是一个 Fly App,通过 FlyCast 与基础设施通信,为解决令牌验证“在线”的问题,采用了缓存机制,Macaroon 缓存效果很好。
  • 令牌撤销:撤销不是小问题,不能事后考虑,Fly.io 随时可能撤销令牌,其撤销系统很简单,通过将令牌的随机 nonce 添加到黑名单来实现,为解决缓存问题,tkdb的“验证”API 导出一个提供撤销通知的端点,客户端订阅该端点,当失去连接时会清空缓存。
  • 服务令牌:服务令牌用于代码,Fly.io 的 Macaroon 区分“权限”令牌和“认证”令牌,通过第三方附加条件来表达认证,为服务令牌设计了特殊的 API,可去除第三方认证附加条件并进一步缩小范围,类似地,在 Pet Semetary 中也采用了类似机制来管理用户秘密。
  • 令牌系统的监控:Fly.io 的令牌系统有整个平台最好的监控,得益于 OpenTelemetry 和 Honeycomb,从请求到响应有完整的叙事,除了监控指标,还有永久保留的 OpenSearch 集群索引的完整审计跟踪。
  • 总结:Macaroon 有很多巧妙的功能,用户大多不关心,但内部使用很多,工程文化中对“微服务”过敏,但tkdb系统发挥了作用,LiteFS、Litestream 和基础设施 SQLite 也取得了胜利,大部分代码是开源的。
阅读 12
0 条评论