啥是AK

AK(Access Key)是一种身份证明,它解决了“资源的使用者是谁”这个问题,比方在生活中,身份证能够证实你是你,而在云计算或程序中,AK能证实你是这个利用的拥有者。

AK和明码的有啥区别呢,明码面对的主体是人,人能够应用明码登录零碎证实身份;AK的主体是程序或服务,程序或服务能够应用AK作为身份证明调用凋谢接口。

AK分类

AK分类次要和密码学的加密形式相干,常见的有两类:

  1. 对称AK(包含AKId、AKSecret)。AKId、AKSecret是成对呈现的,由AK核心提供给用户,采纳基于共享密钥的认证形式。每次调用相干接口时,用户会采纳保留的AKSecret针对某些参数做签名,凋谢网关接管到申请后会用AKId查找存储的AKSecret做签名,验签通过后在通过认证。
  2. 非对称AK(AKId、AKPrivateKey和AKPublicKey),其中AKPrivateKey和AKPublicKey是一对公私钥,用户需将AKId、AKPublicKey上传给AK核心,在调用接口时用私钥做签名,凋谢网关收到申请后调用AK核心的服务,用公钥验签,通过后则认证通过。

综上来看,无论采纳何种加密形式,AK核心始终存储一个密钥对,而且用户侧需严格保留密钥对,不要明文硬编码,需借助工具对敏感信息加密,尽可能防止敏感数据泄露。

AK核心

AK核心不是孤立存在的,在整个凋谢网关体系下AK核心是流量必经之地,因而它的重要性显而易见。
网关AK核心建设的意义在于满足更多租户、服务的定制化需要,如服务权限管控、调用方治理等,更是为了对立以后 凋谢体系中“散落在各个系统的各自定制的凋谢认证机制”,尔后所有的服务凋谢认证体系可收敛于AK核心。

AK核心架构图

为了对立团体前端的凋谢认证体系,AK核心提供了适配层解决存量利用的client_token认证体系,同时兼容BUC认证,反对用户在服务端及浏览器端的调用认证,须要留神的是浏览器端仅反对BUC认证(AK须要签名,不能在前端做签名)

权限体系

权限体系由“凋谢服务、接口管控、用户体系、调用方体系和黑名单体系”形成。调用方可设置管理员与开发者,同时调用方在申请时需指定调用的凋谢服务,审批通过后调用方应用该AK密钥对指定调用对应的凋谢服务;凋谢服务管理员可设置凋谢接口的调用权限,目前分为“外部接口与凋谢接口”,仅凋谢接口可被调用方调用;黑名单可由具体凋谢服务管理员设置某个黑名单的调用方,禁止其调用。

稳定性建设

AK核心作为网关之后的第一道基础设施,它的稳定性与性能必须失去保障,其中稳定性要求AK核心运行时要足够稳固牢靠,不因依赖的系统故障而解体。以后打算从几个方面做稳定性建设:

  1. 依赖解耦与降级
  2. 谬误兜底数据
  3. 网关层流量拦挡

对于依赖解耦,次要是DB。以后AK核心应用DB存储AK密钥对、用户、调用方以及服务方等根底信息与权限信息,其中与运行时相干的是“AK密钥对与权限数据”,且这部分数据的特点是不易扭转(设计的初衷是权限数据仅反对减少)。因而对这部分热点数据做二级缓存策略(减速层),在内存建设LRU缓存,同时建设分布式缓存(以后未实现),并制订数据刷新策略(DB回源后刷新二级缓存),若DB故障,可采纳二级缓存的数据,不影响存量业务。

若依赖的分布式缓存Tair产生故障时,主动降级为 “L1 LRU内存缓存+DB”的策略,若此时DB也产生故障则降级为 L1内存缓存,撑持热点数据与申请。

AK核心设计之初是有预估申请量的,若某些凋谢接口被攻打或大量调用导致AK核心的计算资源(加密与签名)被耗尽造成不可用,需在网关接入层进行流量过滤,针对预设的QPS进行限流,避免AK核心被搞挂。

性能优化

所有调用凋谢接口的申请都会通过AK核心,因而AK解决性能间接影响凋谢接口的性能。优化的策略依据不同的认证形式也有所不同:

  1. AK认证与client_token认证优化策略:L1 RLU内存缓存 + 三方缓存,其中内存缓存须要重点建设,因为AK及token等热点数据命中率十分高,因而内存缓存使用率十分高。因为Node多过程模型的特点,若要在每个业务过程中独自做缓存,命中率会十分差,因而须要基于Agent模型建设Work过程间共享的全局内存缓存。
  2. BUC认证优化策略:通过长久化到Cookie进行缓存,当SSO_TOKEN未超时间接从Cookie反序列化,防止调用到BUC核心