共计 1787 个字符,预计需要花费 5 分钟才能阅读完成。
啥是 AK
AK(Access Key)是一种身份证明,它解决了“资源的使用者是谁”这个问题,比方在生活中,身份证能够证实你是你,而在云计算或程序中,AK 能证实你是这个利用的拥有者。
AK 和明码的有啥区别呢,明码面对的主体是人,人能够应用明码登录零碎证实身份;AK 的主体是程序或服务,程序或服务能够应用 AK 作为身份证明调用凋谢接口。
AK 分类
AK 分类次要和密码学的加密形式相干,常见的有两类:
- 对称 AK(包含 AKId、AKSecret)。AKId、AKSecret 是成对呈现的,由 AK 核心提供给用户,采纳基于共享密钥的认证形式。每次调用相干接口时,用户会采纳保留的 AKSecret 针对某些参数做签名,凋谢网关接管到申请后会用 AKId 查找存储的 AKSecret 做签名,验签通过后在通过认证。
- 非对称 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 核心运行时要足够稳固牢靠,不因依赖的系统故障而解体。以后打算从几个方面做稳定性建设:
- 依赖解耦与降级
- 谬误兜底数据
- 网关层流量拦挡
对于依赖解耦,次要是 DB。以后 AK 核心应用 DB 存储 AK 密钥对、用户、调用方以及服务方等根底信息与权限信息,其中与运行时相干的是“AK 密钥对与权限数据”,且这部分数据的特点是不易扭转(设计的初衷是权限数据仅反对减少)。因而对这部分热点数据做二级缓存策略(减速层),在内存建设 LRU 缓存,同时建设分布式缓存(以后未实现),并制订数据刷新策略(DB 回源后刷新二级缓存),若 DB 故障,可采纳二级缓存的数据,不影响存量业务。
若依赖的分布式缓存 Tair 产生故障时,主动降级为“L1 LRU 内存缓存 +DB”的策略,若此时 DB 也产生故障则降级为 L1 内存缓存,撑持热点数据与申请。
AK 核心设计之初是有预估申请量的,若某些凋谢接口被攻打或大量调用导致 AK 核心的计算资源(加密与签名)被耗尽造成不可用,需在网关接入层进行流量过滤,针对预设的 QPS 进行限流,避免 AK 核心被搞挂。
性能优化
所有调用凋谢接口的申请都会通过 AK 核心,因而 AK 解决性能间接影响凋谢接口的性能。优化的策略依据不同的认证形式也有所不同:
- AK 认证与 client_token 认证优化策略:L1 RLU 内存缓存 + 三方缓存,其中内存缓存须要重点建设,因为 AK 及 token 等热点数据命中率十分高,因而内存缓存使用率十分高。因为 Node 多过程模型的特点,若要在每个业务过程中独自做缓存,命中率会十分差,因而须要基于 Agent 模型建设 Work 过程间共享的全局内存缓存。
- BUC 认证优化策略:通过长久化到 Cookie 进行缓存,当 SSO_TOKEN 未超时间接从 Cookie 反序列化,防止调用到 BUC 核心