第二类:线上线下权限隔离没做好
案例7:2017年11月,线下环境的文件发送系统配置了线上SFTP,导致线下测试文件误传到线上环境。
案例8:2018年3月,案例7的问题再次发生。
案例9:数据质量团队在做线下环境清理时,调用API误删除了线上的正式任务,影响了3天的商户账单产出,以及部分BI报表/对账单和业务核对报表产出。
防错设计主要有以下5种。
网络隔离:生产环境的资源,例如数据库、SFTP、API等,都要尽可能地配备IP地址白名单,只有白名单上的源IP地址可以访问。不过,IP地址白名单本身也很容易出错,要非常小心,要有很好的防错设计和监控应急能力。IP白名单一旦改错,网络就无法访问,可能引起大面积故障。
权限隔离:访问线下环境的账号和访问线上环境的账号必须是两个。同一个账号
不可以同时有线上和线下的访问权限,防止出错、调串。在案例7和案例8中,如果做好了权限隔离,就只会导致文件上传失败,影响不会那么大。另外,对于工程师的生产环境访问权限,要做到授权范围最小、时间最短,必须是JIT(JustInTime),即要用的时候申请,用完之后马上回收。对范围大、有效期长的修改权限(读权限可以适当放宽)要严格管控。
防错设计要充分重视。案例8和案例7是同一个问题,案例7发生后,SFTP的网络隔离方案开始实施,但进展不够快,到2018年3月中下旬才落地。案例8的问题是在2018年3月初发生的。
在案例9中,我们的生产和测试任务都运行在同一个数据平台里,本身无法实现网络隔离,只做了租户级别的隔离。因此,这里的权限隔离尤为关键。如果数据平台的API对访问不同的资源(例如,生产的任务与测试的任务)有很好的权限检查,在运维层面遵循了对生产环境资源访问权限高度管控的原则,那么在这个案例里,就算测试脚本出了问题也没有权限修改生产环境资源,不会误删线上的正式任务。
所有的删除操作都要有一个“回收站”机制(虽然“回收站”机制在以上案例里并不能避免故障发生),要能快速恢复被删的内容。