本文来源于阿里云社区电子书《阿里云产品四月刊》
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(3)https://developer.aliyun.com/article/1554225
服务端流程:
- 服务端在收到请求后,首先检查是否开启授权,若未开启,则不校验直接通过;若 已开启了,则进入下一步。
- 服务端对请求中和授权相关的参数进行解析和组装,这些数据包括用户信息、访问 的资源、执行的操作,以及请求的环境等。
- 通过用户名在本地数据存储中查询用户相关信息,若用户不存在,则返回错误;若 用户存在,则进入下一步。
- 判断当前用户是否是超级用户,若超级用户,则直接通过请求,无需做授权检查, 若普通用户,则进入下一步进行详细的授权检查。
- 根据用户名获取相关的授权策略列表,并对本次请求的资源、操作,以及环境进行 匹配,同时按照优先级进行排序。
- 根据优先级最高的授权策略做出决策,若授权策略允许该操作,则返回授权成功, 若拒绝该操作,则返回无权限错误。
在 ACL 2.0 中,更具操作类型和请求频率,对授权相关参数(包括资源、操作等)的解析进行了优化。
- 硬编码方式解析
对于消息发送和消费这类接口,参数相对较为复杂,且请求频次也相对较高。考虑到解 析的便捷性和性能上的要求,采用硬编码的方式进行解析。
- 注解方式解析
对于大量的管控接口,采用硬编码的方式工作量巨大,且这些接口调用频次较低,对性 能要求不高,所以采用注解的方式进行解析,提高编码效率。
在权限策略匹配方面,由于支持了模糊的资源匹配模式,可能出现同一个资源对应多个 权限策略。因此,需要一套优先级的机制来确定最终使用哪一套权限策略。
假设配置了以下授权策略,按照以上优先级资源的匹配情况如下:
认证授权策略
出于安全和性能的权衡和考虑,RocketMQ ACL 2.0 为认证和授权提供了两种策略:无状态认证授权策略(Stateless)和有状态认证授权策略(Stateful)。
无状态认证授权策略(Stateless): 在这种策略下,每个请求都会经过独立的认证和授权过程,不依赖于任何先前的会话和状态信息。这种严格的策略可以保证更高级别的安 全保证。对权限进行变更,可以更加实时的反应在随后的请求中,无需任何等待。
然而,这种策略在高吞吐的场景中可能会导致显著的性能负担,如增加系统 CPU 的使用率以及请求的耗时。
有状态认证授权策略(Stateful): 在这种策略下,同一个客户端连接,相同资源以及相同的操作下,第一次请求会经过完整的认证和授权,后续请求则不再进行重复认证和 授权。这种方法可以有效地降低性能小号,减少请求的耗时,特别适合吞吐量较高的场 景。但是,这种策略可能引入了安全上的妥协,对权限的变更也无法做到实时的生效。
在这两者策略的选择上,需要权衡系统的安全性要求和性能需求。如果系统对安全性的 要求很高,并且可以容忍一定的性能损耗,那么无状态认证授权策略可能是更好的选择。 相反,如果系统需要处理大量的并发请求,且可以在一定程度上放宽安全要求,那么有 状态认证授权策略可能更合适。在实际部署时,还应该结合具体的业务场景和安全要求 来做出决策。
《阿里云产品四月刊》—Apache RocketMQ ACL 2.0 全新升级(5)https://developer.aliyun.com/article/1554221