# 背景介绍 信安信息可以简单理解为域名及其所属公司的基本信息,这些信息来源于新建域名时上传的附件中所填写的内容。信安信息校验是指 IBS 系统对客户在新建域名时上传附件中的字段信息进行核验。而信安信息同步则是将域名的信安信息从 IBS 系统同步至中国移动 CDN 信安系统(即 CU 系统)。 信安相关业务主要包括以下三个方面: 1. **信安附件的上传、解析与校验**:对客户提供的信安附件进行上传与解析,并核验信息的完整性与准确性。 2. **信安附件的下载**:提供信安附件的下载功能,便于信息的查阅和备份。 3. **信安信息的同步**:将校验后的信安信息同步到 CU 系统,确保系统间的数据一致性。 # 信安附件的上传、解析与校验 信安信息的上传、解析与校验的入口不同工单是不一样的。 大致分为**运营操作工单**是一个接口地址,**业务操作工单**是一个接口地址。 ## 运营操作工单 ### 1、接口位置 ```java /workorder/requestDomain/upload com.cmcc.cdn.platform.selfservice.controller.NewWorkOrderController#requestDomainUpload ``` ### 2、附件解析 IBS 项目中,有一个函数将域名上传的 excel 附件转为 String 字符串,如下: ```java com.cmcc.cdn.platform.common.util.ExcelUtil#convertToObjectFromExcel(java.io.InputStream, java.util.List, java.util.List) ``` 核心函数是 `analysisExcelFile`,其中的 `checkExcelFormat` 函数是校验 Excel 表头的函数。 `analysisExcelFile` 校验 Excel 附件大致的逻辑是:先通过 checkExcelFormat 函数提取并校验 excel 表头是否和 Contents 中记录的表头相同,如果不相同,直接返回 false,表示附件解析失败,否则一条条读取 excel 的每一行进行解析。 `@SecurityExcelAnalysis` 注解(`convertToObjectFromExcel` 函数上) IBS6.3.1 版本迭代增加,这个主要是在解析信安附件的时候判断附件中填写的业务类型是否为直播,如果是直播且用户没有填写回源地址的话,IBS 后台去华为云那边查询回源地址并填写,或者自动补齐回源地址为加速域名。 因为原来回源地址是必填项,但是 IBS6.3.1 直播业务的回源地址可以不填写,会导致上层在取值时如果不去校验是否会空的话,会导致出现空指针异常,因此,这个 AOP 的作用就是当用户没有填写直播业务的域名的回源地址时,后台这边给它补齐,用于通过上层校验。 ### 3、附件校验 信安附件校验场景(域名配置需求和cache+域名配置),地址: https://kdocs.cn/l/cp84H09h2t89 核心信安信息校验函数 ```java com.cmcc.cdn.platform.selfservice.service.impl.InformationSecurityTableManagerImpl#validateInformationSecurityInfo ``` 历史流程:[校验流程图](https://www.processon.com/diagraming/63c5d31e2a93473cd86b7759) ## 业务操作工单(页面) ​![](../../../../attachment/images-uuid/5f44a56e500840e2a744c951eb90bb3a.jpg)​ ### 1、接口位置 ```java /order/security/upload com.cmcc.cdn.platform.selfservice.controller.OrderController#uploadSecurity ``` ### 2、附件校验 ```java com.cmcc.cdn.platform.selfservice.service.impl.PortalInformationServiceImpl#validateAndSaveInfo ``` 试用单、试用变更单以及非首次开通的业务单在 IBS 界面上传的信安附件的校验 ```java com.cmcc.cdn.platform.selfservice.service.impl.BatchSelfDomainServiceImpl#checkXinAnExcelFromIBS ``` > 在 IBS 界面上传的试用单、试用变更单、业务单的信安附件,通过校验之后,信安附件结果存储至表 information_self_domain。 ## BPM 回调可承接之后从 BBOSS 拉取信安附件并校验 用户在集客大厅上传的信安附件在 BPM 回调试用可承接之后,再对信安附件中的信息进行校验,这里的信安信息校验涉及到试用单、试用变更单以及业务单。 ### 1、试用单信安附件拉取以及校验 ```java com.cmcc.cdn.platform.selfservice.service.impl.TestOrderServiceImpl#checkAndSaveInformationSecurityTable ``` 该函数中的核心校验代码为:batchSelfDomainService.checkXinAnExcelFromIBS(vos, false); ### 2、试用变更单信安附件拉取以及校验 ```java com.cmcc.cdn.platform.selfservice.service.impl.TestOrderChangeServiceImpl#checkAndSaveXinanTableFromTestChange ``` 该函数中的核心校验代码为:batchSelfDomainService.checkXinAnExcelFromIBS(vos, false); ### 3、业务受理工单信安附件拉取以及校验 ```java com.cmcc.cdn.platform.selfservice.service.impl.BusinessOrderServiceImpl#checkAndSaveXinanTableFromOrder ``` > 信安信息校验通过之后会存储至表 information_self_domain ## 前置校验 - 拉取 BBOSS 信安附件并校验及存储 ```java com.cmcc.cdn.platform.selfservice.service.impl.PreCheckServiceImpl#checkInfoSecurityTable ``` > 当信安附件校验通过之后,也存储至 information_self_domain 表中。 # 信安附件下载 ## 域名详情页 ​![](../../../../attachment/images-uuid/dfb4426892794ed297561acaadcd2ca4.png)​ ```java /configManage/getSecurity com.cmcc.cdn.platform.selfservice.controller.ConfigManageController#getInformationSecurity ``` 该接口在 ibs 界面如图所示,进入业务运维 - 配置管理界面,点击“下载已上传的附件” ## 位置二 ```java /download/exportFile com.cmcc.cdn.platform.selfservice.controller.HttpFileController#exportFile ``` 这个接口主要是在 IBS 页面下载 BBOSS 那边传的附件的接口(个人认为是试用单页面)。 # 信安信息同步 > 每 1 分钟会扫描上报一次删除,上报后需要等工信部反馈结果后,信安系统才会删除本地数据 > 工信部对上报数据的解析是自动的,正常情况下 1 分钟内就会有反馈 > 新增和修改是每天定时(晚上 23 点)上报 ## 信安同步底层代码 信安的同步主要分为企业信安的同步和域名信安的同步。 所谓企业信安也就是企业的基本信息,包括企业名,企业地址,企业单位编码等; 所谓域名信安指的就是域名的基本信息,包括域名,回源地址,分发省份等。 根据同步的操作不同,可以分为同步新增和同步修改,因此主要有以下四个函数。 ### 1、同步企业新增信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.BigCloudBasicInfoServiceImpl#createInfomationUser ``` 首先获取信安 token,然后向信安系统发起新建企业信安信息的请求,将获取的响应存储至 information_user 表中,其中 information_user 表中的 user_id_cdn 为企业的唯一标识,同步到信安系统的企业名称以及表中所存储的企业名称为附件中填写的企业名称。 ### 2、同步企业修改信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.BigCloudBasicInfoServiceImpl#updateInfomationUser ``` 这个函数的大致逻辑是,首先获取信安 token,然后向信安系统发起修改企业信安信息的请求,将获取的响应存储至 information_user 表中,其中 information_user 表中的 user_id_cdn 为企业的唯一标识 ### 3、同步域名新增信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.BigCloudBasicInfoServiceImpl#addInformationDomainInfo ``` 这个函数的大致逻辑是,首先获取信安 token,然后向信安系统发起同步域名新增信安信息的请求,将获取的响应存储至表 big_cloud_information_domain 中,其中表 big_cloud_information_domain 中的 domain_id_cdnsys 为域名的唯一标识 ### 4、同步域名修改信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.BigCloudBasicInfoServiceImpl#updateInformationDomainInfo ``` ### 5、删除域名同步信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.BigCloudBasicInfoServiceImpl#deletedInformationDomainInfo ``` 根据域名 id(domain_id_cdnsys)去删除,删除 big_cloud_information_domain 表 ### 6、删除企业同步信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.BigCloudBasicInfoServiceImpl#deletedInformationUser ``` 根据企业 id(user_id_cdn)去删除,并删除企业下所有域名的信安信息,删除 information_user 以及 big_cloud_information_domain 表 ## 封装代码 ### 同步新增企业以及域名信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.PortalInformationServiceImpl#createOrUpdateInfo ``` 通过调用上述四个信安同步底层函数写的同步新增信安或同步修改信安的函数。 一般很多工单在同步的时候不会直接调用上述四个信安同步底层函数,而直接调用这两个函数。 这个函数主要做了新增或修改企业信安,新增或修改域名信安,主要用于用户第一次上传信安附件或者域名第一次同步信安时,可以调用该函数。 ### 同步新增或修改域名信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.PortalInformationServiceImpl#updateDomainInformation ``` 这个函数主要做了新增或修改域名信安,主要是用于,当域名的信安信息已经在 BigCloudInformationDomain 中存在,则表明域名已在信安系统备案,直接同步修改信安即可。 ### 删除域名企业信安 ```java com.cmcc.cdn.platform.selfservice.service.impl.PortalInformationServiceImpl#notifyDeleteInformation ``` ## 不同工单的不同位置 ### cache+ 域名配置工单 在第一步运营经理提交 cache+ 域名配置工单的时候,即运营经理点击提交的时候。 ```java # 自助 com.cmcc.cdn.platform.selfservice.manager.WorkOrderManager#handleCacheDomainXinAnInfo # 定制化 com.cmcc.cdn.platform.selfservice.service.CacheWorkOrderServiceImpl#cacheDomainIcpUpdateSyncProcess ``` ### esop 政企客户经理提交的域名配置需求工单新增域名 政企客户经理提交的域名配置需求工单新增域名也是在第一步提交域名配置需求工单的时候。 ```java com.cmcc.cdn.platform.selfservice.order.WorkOrderServiceImpl#saveCustomWorkOrder ``` ### 新增直播域名工单(已取消此类型工单) 新增直播域名工单在运营经理新建工单点击提交之后就校验备案号并同步信安了,新增直播域名工单也是走的队列下发,直播域名同步时分发省份固定为全国。 ```java com.cmcc.cdn.platform.selfservice.rabbitmq.consumer.LiveIcpConsumer#handle ``` ### 信安补录工单 运营经理提交信安补录工单成功之后即将域名的信安信息同步到信安系统中去了。 信安补录工单的功能比较单一,其用处就是在于,当域名信安信息缺少时,可以通过运营经理(线上的话还可以通过超管账号)提交信安补录工单,将需要修改或者补充的域名信安信息同步到信安系统中去。 ```java /information/order/submit com.cmcc.cdn.platform.selfservice.controller.InformationController#submit ``` 调用链 submit -> createInformationWorkOrder -> createFrom -> checkUpInformation -> checkUnitXinan ### 试用单、试用变更单、业务单同步信安(老流程) 试用单、试用变更单、业务单老流程(即 6.3.1 版本对接 BPM 之前的流程)是在运营经理在业务运维 - 配置管理界面,点击配置域名的时候会同步信安。其实也不一定仅仅指的是这三个单子,对于那些在业务运维 - 配置管理界面点击配置的域名都会再次同步信安,无论这个域名在工单提交的时候有没有同步过信安。这样其实有的域名会同步两次信安了,其实,之前工信部那边要求未下发的域名也需要同步信安,所以域名会同步两次,同步信安也需要分为两步,第一步是域名同步新增信安,第二步是域名同步修改信安。 ```java /configManage/update/config com.cmcc.cdn.platform.selfservice.controller.ConfigManageController#update(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Boolean, com.cmcc.cdn.platform.selfservice.pojo.SelfServiceDomainConfigVO, org.springframework.validation.BindingResult) ``` 自助域名点击配置后同步信安 ​![](../../../../attachment/images-uuid/0a02041a38ed411ea403617abe70bbdf.png)​ 定制化域名点击配置后同步信安 在 updateConfig->offlineDomainHandle 函数中 ```java com.cmcc.cdn.platform.selfservice.service.impl.ConfigManageServiceImpl#offlineDomainHandle ``` ### 试用单、试用变更单、业务单同步信安(新流程) IBS6.3.1 版本点播域名对接 BPM 之后,试用单、试用变更单、业务单同步信安是在 BPM 验收反馈可承接之后。 首先,可以统一将试用单、试用变更单、业务单都理解为是从 BBOSS 那边建单的,IBS6.3.1 之后试用单、试用变更单、业务单均对接 BPM,其中试用单、试用变更单以及非首次开通的业务单对接 BPM 的适配单接口,其下发的记录存储至 `bpm_task` 表;首次开通的业务单对接 BPM 的通用运维单接口,其下发记录存储至 `bpm_dns_task` 表。 **对于试用单、试用变更单以及非首次开通的业务单对接 BPM 的适配单接口**,其信安同步在 ```java com.cmcc.cdn.platform.selfservice.service.bpm.impl.BpmManageServiceImpl#uniCastCallBackProcess ``` 这个统一处理函数中,这个统一处理函数做了配置入库、同步信安、日志订阅、同步 crs 的操作。其中同步信安的函数为:`syncXinAn`。 syncXinAn 函数中试用单,试用变更单以及非首次开通的业务单的同步信安子函数如下所示,这些函数的大致逻辑是,首先去 `information_self_domain` 表中查询是否存在域名信安信息,如果存在则直接取这张表里的数据进行同步,否则就直接取 BBOSS 那边拉取附件进行同步,从 BBOSS 那边拉取信安附件的函数为: ```java com.cmcc.cdn.platform.selfservice.service.impl.HttpFileServiceImpl#exportAndSaveFileContent ``` 对于试用单、试用变更单以及非首次开通的业务单对接 BPM 的适配单接口,其信安同步失败的信息记录在 `bpm_task` 表的 `xin_an_error_msg` 字段; 对于对于首次开通的业务单对接 BPM 的通用运维单接口,其信安同步失败的结果记录在 `bpm_dns_task` 表的 `xin_an_error_msg` 字段,目前同步失败的结果仅在数据库中记录,因此需要定期安排人员去检查有没有同步失败的域名,如果有的话需要线下调接口再次同步,或者安排运营经理提交信安补录工单,同步失败的结果仅在数据库中记录。 ### 直播控制台 - 自助域名 - 点击配置同步信安 ``` /live/config/addPlainInfo com.cmcc.cdn.platform.selfservice.service.live.impl.LiveConfigServiceImpl#manageDomain ``` 源于 6.2.0 需求,在 manageDomain 中进行了自助域名修改信安的异步同步。其大致逻辑为,先去华为云那边查询域名的源站信息,然后调用域名修改信安的同步函数 `updateDomainInformation` 将域名信安同步到信安系统中去。 # 信安接口能力 新增和删除接口目前最多支持多少数据的同步能力。 目前一次最多 100 条,后续删除会增加到 1000 条 # 信安备案号接口优化开关 XINAN_ICP_OPT_SWITCH