业务封装鉴权(证明你是你)forward-authtraefik-middlewareSSO/SAMLLDAPAD权限Authz(你能访问什么)Policy-as-codePermssionTarget-JSONOPATenant or NamespaceWrapperfull wrappereg: redash/jenkinsgroup synceg: sonarqube/artifactory/gitlabAPI Facade尽可能使用事实标准eg: OpenTelemetry/S3屏蔽非标准语法/协议eg: jenkins groovy dsl -> yaml白名单API屏蔽eg: 只使用白名单路由,降低攻击面隐私与审计特权账号审计特权账号需要单独记录常见AOP方案上述设计并没有唯一标准,而是建议参考学习开源且部分收费的项目(比如metabase,sentry,sonarqube)等系统设计。而且如果你希望项目速度快速度过EAP,尽可能采用缝合怪的形式进行包装。
比较容易的方案是基于Sidecar的思路去实现前置代理,将开源软件的安全/可用性/协议问题通过Socket进行封装,屏蔽业务系统对开源组件的直接侵入。
组网与技术维度
持续性
简单优先
优先选择代码量低,依赖少的组件,而不是功能大而全的产品。
比如在进行私有APM工具选型时,我们发现Sentry是业界Top的APM软件。然而即使它非常优秀,技术架构完美,有上百个专业的全职雇员和成熟社区,但是它实在太复杂了(29个微服务,接近上百个表),导致引入生产环境后,没人敢兜底,最终选型被否决。
社区BCM
尽可能选择有赞助的社区或者公司,要求它能贯穿整个软件的生命周期
版本元数据与漏洞
- 建议订阅各种RSS与dependency-bot对齐最新版本,比如fossa等工具
- 尽可能选择LTS版本,除非你需要的特性正在开发中
避免供应商锁定
一般采用Wrapper/sidecar进行隔离(从RPC到Common库隔离都可以,尤其注意业务前端侧的API接口不要直接用开源实现,而要封装一层。当你的软件后期想对外卖,而相关协议比较严格(比如BSL,X-Pack)的开源软件希望去掉时就比较痛苦了。同时还有安全加固的作用,限制可以传递的参数。