Open zhu327 opened 3 years ago
在测试环境下:
总策略数量:
MySQL [bk_iam_app_dev]> select count(*) from bk_iam_dev.policy;
+----------+
| count(*) |
+----------+
| 1501174 |
+----------+
分级管理员授权范围策略数量:
1010705
策略数量过多, 影响iam后台的鉴权性能, 考虑从iam saas直接同步到iam engine
思考: 是否需要再启动一个engine实例专门来做role授权范围的搜索
回复:
1.1 是的,需要匹配每个“操作-实例”对应的分级管理员
1.2 审批粒度是“实例”,每个实例都需要不同的分级管理员审批
1.3 申请多个实例存在分级管理员交叉的问题,需要按照分级管理员合并发起审批,即实例a由A、B审批,实例b由B、C审批,c由A、C审批,那么最终合并后:A 审批 a、c,B审批a、b,C审批b、c
是的,所有分级管理员都拉进来审批,只要其中一人过了就通过
分级管理员人员范围要去掉“普通用户侧的分级管理员人员范围限制”。--待讨论
分级管理员审批默认不包含“超级管理员和系统管理员”(除非审批节点明确了由系统管理员或者超级管理员审批),找不到对应的分级管理员,就由“系统管理员”审批。
搜索问题: 目前应该会存在批量实例的问题, 如果单条单条查询, 可能查询量非常大; 并且目前还存在实例审批人这个逻辑
所以, 方案处理前, 得考虑下批量的问题, 同一个操作不同实例, 多个操作等维度; 尽量降低申请单逻辑的复杂度; 考虑汇总资源信息, 批量查询实例审批人, 批量查询分级管理员;
申请单逻辑应该尽可能简单
用户在权限中心申请自定义权限时可以选择一下几种角色作为审批人:
在使用超级管理员/系统管理员/leader作为审批人时都存在审批人责权不清的问题, 审批人需要管控的权限范围过大, 不符合细粒度权限管理的需求. 而实例审批人当前只有蓝盾系统实现, 从接入系统的角度来说也并不关注实例到底是谁来审批, 所以需要一种范围管控的角色来支持实例的细粒度审批, 这个角色必须权责清晰, 对所管理的资源有权限分配的权力与责任. 当前在权限中心分级管理员作为一种范围的管控角色, 正好符合这一需求.
本文档描述如何实现分级管理员审批实例权限.
在权限中心个人用户申请自定义权限时, 自动查找到包含申请的操作
-资源
的授权范围的分级管理员, 使用分级管理员的成员作为审批人提申请单.
基于类似于操作
-资源
的查找有权限的subject
的需求, 可以复用当前iam-search-engine
的能力, 把分级管理员作为一种新的subject
, 分级管理员的授权范围作为policy
数据导入到iam-search-engine
中, 所以以上需求可以拆分为2个:
iam-search-engine
iam-search-engine
搜索出有权限的分集管理员作为审批人创建审批单据iam-search-engine
参考当前普通的policy
如何同步到iam-search-engine
过程:
iam saas
在授权时保存了SaaS侧的表达式后, 翻译为后端的表达式push到iam backend
, iam-search-engine
定时拉取iam backend
接口获取到后端表达式翻译之后的鉴权表达式转换为ES Dock存储到引擎中.
要同步分级管理员的授权范围到iam-search-engine
, 最简单的方式是把分级管理员的授权范围作为policy调用iam backend
的alert_policies
接口存到iam backend
的数据库中, 然后iam-search-engine
走拉取逻辑.
但是查询测试环境的数据后发现, 测试环境有策略1501174
条, 同步分级管理员的授权范围有1010705
条, 评估后这些对于鉴权没有意义的数据会影响到iam backend
的鉴权性能, 所以方案1
放弃.
iam saas
直接push分级管理员的授权范围到iam-search-engine
不经过iam backend
, 需要解决2个问题:
iam saas
当前只支持到iam backend
的表达式转换, 还需要支持到iam-search-engine
的表达式转换policy_id
导致不能直接同步到iam-search-engine
的policy索引中针对第一个问题, 经评估在当前的iam saas
的表达是翻译逻辑的基础上只要少许修改就可以支持给到iam-search-engine
的表达式.
第二个问题, 可以通过使用独立的policy索引来解决, 单独为分级管理员的搜索系统相关的接口, 走独立的索引, 同时启动内存数据到快照的定时任务, 定时打快照.
iam saas
在创建修改分级管理员时调用iam-search-engine
的策略修改/删除接口更新对应的数据, 实现表达式翻译的逻辑
iam-search-engine
需要为分级管理员提供一下接口
POST /batch-search 批量search GET /stats POST /policy 批量policy创建 DELETE /policy/{subject_type}/{subject_id} 删除subject的所有policy
subject
的所有的policy再重新创建iam-search-engine
搜索出有权限的分集管理员作为审批人创建审批单据常规的逻辑:
操作
-实例
的策略操作
-实例
查询到iam-search-engine
批量查询有权限的分级管理员ID问题:
操作
-实例
比较多, 比如蓝盾, 一次申请100个操作, 每个操作5个实例, 就会产生500次的iam-search-engine
的查询, 性能问题会导致产品体验非常差需要跟进:
同步方式
使用与policy相同的方式直接写到后台是最简单的方式, 不需要作为单独的逻辑处理, 需要统计下单前可能会增加多少策略数量
问题