我们团队在埃及金融监管框架下,为一家持牌非银行金融机构搭建后端时,起初只觉得合规是一张写满“不能做”的清单。不能用共享的全球部署,不能接入国外的身份验证服务,连用常规数据库表来存财务记录都不行。然而开工六个月后我们发现,埃及金融监管局(FRA)施加的每一条约束,都恰好把我们推向一个本来就应该搭建的架构。这篇文章,就是那个架构的复盘。
FRA 通过第139号和第140号两项2023年决议,为安全可持续的金融科技网关划定了四条硬性边界:数据不离开埃及、身份验证不能外购、监管要查五年记录、一条UPDATE语句就构成合规违规。这四个约束共同把一个架构方向锁死。
第一条是数据必须留在埃及境内。FRA的要求很明确:硬件、数据库服务器、应用服务器和Web服务器,都必须物理上处于埃及地理边界之内。任何没有区域隔离策略的共享全球云部署,第一天就通不过。现实可行的路线只有两条:要么通过埃及本地供应商搭建数据中心,要么采用AWS Outposts这类方案,把AWS管理的基础设施部署在自己的场地里,团队继续使用熟悉的工具链,同时满足物理驻留要求。如果选Kubernetes,每次审计时站得住的模式是按监管区域建立独立集群,而不是只做命名空间隔离。命名空间共享底层节点,在严格的物理审计下,这种共享的计算资源本身就是一个不想去辩护的风险点。
第二条是不能直接采购现成的身份验证服务。FRA第140号决议明确写道,身份验证必须使用埃及国民身份证系统,这张证件在埃及所有金融和电信记录中都具有法律效力,而且用于注册的手机号必须与身份证绑定。这个绑定要求听起来像行政冗余,其实不是。多因子认证框架定义了三个类别:你知道的,即用户注册时设置的PIN或密码;你拥有的,即用户能接触到的注册手机号、邮箱或身份证件;以及你是什么,也就是活体生物特征扫描,通过人脸识别和活体检测来确认持证人是本人。FRA要求手机号关联身份证号,并不是在加第四步,而是把第二类和第三类验证压缩成一条可追溯的完整链条。手机号记录在某个身份名下,生物特征确认这个身份确实在场且是活人,“有人拿着这个号码”和“这个人就是其声称的身份”之间没有缺口。从研发角度看,身份验证接口必须可以替换,因为不同阶段会有不同供应商要求。
第三条,监管会要求提供五年的证明。这指的是每一笔金融操作都需要有完整的、不可篡改的审计轨迹,并且要能随时应对监管的数据追溯请求。因此,数据结构不能只存结果,还需要把每一次状态变更的前因后果都完整记录下来。那种直接对记录进行覆盖更新的做法会破坏可追溯性,使得历史事实再也无法还原。
第四条,一条UPDATE语句就会构成合规违规。这不是夸张,而是对前一条的技术化表达。当数据库中的财务记录被直接修改,就失去了不可否认性。正确的做法是只追加,不修改,任何一笔纠正或调整都通过新增反向记录来实现,从而让所有操作都变成可审计的不可变事件流。回头来看,这些限制并没有让系统变得脆弱,反而迫使团队从一开始就做出了更安全、更可解释的技术决策,而这正是一个金融系统本来该有的样子。
热门跟贴