蚂蚁金服在过去十五年重塑支付改变生活,为全球超过十二亿人提供服务,这些背后离不开技术的支撑。在 2019 杭州云栖大会上,蚂蚁金服将十五年来的技术沉淀,以及面向未来的金融技术创新和参会者分享。我们将其中的优秀演讲整理成文并将陆续发布在“ 金融级分布式架构”公众号上,本文为其中一篇。
在云原生发展趋势之下,金融行业想要应用云原生技术,安全问题是一个非常大的拦路虎,而云原生社区对安全问题的重视程度远远不够。蚂蚁金服在落地云原生的时候,解决安全问题是重中之重,经过探索与实践,我们沉淀出了一套从底层硬件到软件、从系统到应用层的全链路金融级云原生安全架构。
金融行业最重要的就是信任,我们认为,安全所带来的信任,是一种无形的产品,支撑着所有金融业务。
顺应互联网时代发展,金融行业与机构也发生了很多的变化,包括 App、小程序等更多的访问渠道,更快的业务变化,更多的第三方供应商。但是,不管怎么变化,金融行业有一点始终不变,那就是 Zero Fault,对错误的零容忍,也就是对稳定性和安全性的极高要求。
这里,我还想澄清大家对金融行业的一个错误看法,就是,大家都说金融机构有很多遗留系统,很多技术是十几年前的,就认为金融机构的技术是落后的。但其实,金融行业一直是科技含量非常高的。前段时间有一部电影上映,叫《蜂鸟计划》,根据真实事件改编,讲一帮做高频交易的人,为了降低从堪萨斯到纽约交易所的时间,建造了一条上千英里直通两地的光纤,想尽办法去争取那最后一毫秒。所以,金融行业并不只有平庸保守的科技,它同样也在追逐最前沿最先进的技术,我们的使命就是要用科技来进一步武装金融行业,为金融科技注入更多的活力。
云原生架构其实代表一种新的生产力,金融行业肯定是需要云原生的,它为我们带来了节约成本和敏捷开发的能力,但是在它前面还需要加一个定语,就是安全的云原生架构,它里面不仅仅包含之前的相对简单的安全方案,而是一个从端到端的全链路可信的安全解决方案。包括明晰代码所有权,做到可信启动,对镜像的制作和发布收口,配合账号体系,明晰应用的所有权和访问权限;以及安全可独立部署的精细化隔离方案,将安全策略和实施集成在基础架构中,对软件开发和测试透明。
这里我们着重分享蚂蚁金服正在实践的几项云原生安全技术,包括云原生网络安全 Service Mesh,安全容器,以及机密计算。
云原生网络安全:SOFAMesh
当前,云原生里除了容器之外第二大技术其实就是 Service Mesh,从蚂蚁的实践来看,其实它对金融安全有非常高的帮助。它至少可以做到三点:
- 策略化高效流量控制,可以帮助运维迅速适应业务快速变化;
- 全链路加密,保护端到端数据安全;
- 流量劫持与分析,当发现异常流量与容器时,进行流量阻断。
并且,这些工作对业务是透明的,不需要给业务开发增加负担,同时我们还可以对流量进行实时的语义分析等等,做比传统的防火墙更多的事情。
蚂蚁金服在对 Service Mesh 的探索中,推出了自己用 Golang 打造的 SOFAMesh,并且已经对外开源,希望和社区一起努力,让 Service Mesh 的理念和技术更加普及。
SOFAMesh 是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案。在继承 Istio 强大功能和丰富特性的基础上,为满足大规模部署下的性能要求以及应对落地实践中的实际情况,所做的改进包括采用 Golang 编写的 SOFAMosn 取代 Envoy,极大降低了 Mesh 本身的开发难度,并做了一些创新性工作,例如合并Mixer到数据平面以解决性能瓶颈,增强 Pilot 以实现更灵活的服务发现机制,增加对 SOFARPC、Dubbo 的支持,等等。
更多详情可查看 SOFAMesh 的 GitHub 主页:https://github.com/sofastack/...
蚂蚁金服率先在生产环境中大规模落地 SOFAMesh,超过 10W+ 容器做到了 Mesh 化,平稳支撑了 618 大促,给我们带来了多协议支持、UDPA、平滑升级、安全等多方面的好处,并且对性能仅有轻微的影响,单跳 CPU 增加 5% 损耗,RT增加不到 0.2ms,甚至部分业务经过 Mesh 化改造将业务链路下沉,RT 反而下降 7%。
安全容器:Kata Containers
提云原生大家肯定都会提容器,传统容器从虚拟机到容器,其实是牺牲了隔离性的,从上图可以很清楚的看到,当我们的应用在容器里,其实共享着同一个 CPU、内存、网络和存储,只是从外面看起来是不同的。这会导致安全上的问题,就是不同的容器之间不存在真正的隔离,一旦一个容器发生安全问题,很可能影响到其它容器,甚至入侵整个系统。蚂蚁金服在这方面做的工作就是安全容器,具体就是 Kata Containers。
安全容器架构
Kata Containers 安全容器是 OpenStack 基金会的顶级开放基础设施项目,由蚂蚁金服和 Intel 共同主导开发。在安全容器里,每个 Pod 运行在独立的沙箱中,彼此不共享内核,提供强安全保障。这里给大家分享一下 Kata Containers 的近期进展,针对大家最关注的性能问题有了非常大的提升:
- 引入 shimv2 每 Pod 辅助进程数量从 2N+2 减少到 1 个;
- 引入 virtiofs,提升文件系统性能约 70% 到 90%;
- 引入 Firecracker, VMM 内存开销从 60MB 降到约 15MB;
- 改用 rust 实现 agent,占用内存从 11MB 下降到约 1MB。
我们也会和社区一起继续共建 Kata Containers,让安全容器成为云原生的标配。
安全容器可以有效的保护主机,但是,金融业务本身仍然需要更强的隔离保护,蚂蚁金服引入了机密计算,并根据实际场景研发了大规模落地解决方案 SOFAEnclave。
机密计算中间件:SOFAEnclave
所谓机密计算,也就是基于例如 Inte SGX,ARM Trustzone 等可信执行环境(Trusted Execution Environment, TEE),也称为 Enclave ,访问计算机内存时隔离用户数据,以避免将数据暴露给其他应用程序、操作系统或其他云服务器租户的解决方案。
Enclave 是运行时的双向保护,比如说你的金融业务跑在 Enclave 上的时候,操作系统都看不到 Enclave 里的内存,同时会进行完整性检查,保证访问 Enclave 的代码不被替换。
但是 Enclave 目前存在一些问题,阻碍了它在实际生产环境中的应用。总结这些问题包括:
第一,需要改写应用,因为可信执行环境里面没有内核和基础库,所以没法把应用直接在 Enclave 中执行;第二,需要分割应用,需要把业务程序划分为 Enclave 内和 Enclave 外的部分;第三,未集群化,与客户端场景不同,Enclave 中的应用如何 failover,容灾也是阻止其在数据中心中大规模使用的一个原因。
蚂蚁金服针对这些问题的答案就是 SOFAEnclave 机密计算中间件。
SOFAEnclave 由三个组件组成,第一个是 Occlum LibOS,另外一个是 SOFAst,以及 KubeTEE。Occlum 是蚂蚁和英特尔、清华主导开发的一个内存安全的多任务 Enclave 内核,把系统内核的功能通过 lib 的方式链接过去,通过这种方式给 Enclave 增加功能。同时我们也创新性的解决了在 Enclave 跑多进程的方式,让 Enclave 真正适配大型的应用。
想详细了解 SOFAEnclave 的技术细节,可以参考这篇文章:《SOFAEnclave:蚂蚁金服新一代可信编程环境,让机密计算为金融业务保驾护航102年》
SOFAEnclave 开源组件 Occlum GitHub 主页:https://github.com/occlum/occlum
当我们把这些安全组件与云原生框架编织在一起,构成一个全景,就是我们正在构建的金融服务的安全云原生安全架构——基于阿里云和 Kubernetes,以端到端的安全性保障金融服务。
上述这些组件有些是蚂蚁金服在实践检验之后开源并与合作伙伴和社区共同发展的,有些从开始就是在社区中开发的。与传统金融行业的技术发展不同,我们提倡建立一个开放的架构,并相信开放的开源治理对于这个架构是不可或缺的,我们会持续参与和支持社区化的开放开发,与社区一起打造下一代金融级云原生技术。
延伸:蚂蚁金服在云原生领域的贡献
SOFAMosn
https://github.com/sofastack/sofa-mosn
SOFAMosn(Modular Observable Smart Network),是一款采用 GoLang 开发的 Service Mesh 数据平面代理,旨在为服务提供分布式、模块化、可观察、智能化的代理能力。SOFAMosn 通过 XDS API 与 SOFAMesh 集成,同时 SOFAMosn 可以作为独立的4、7层负载均衡使用,未来 SOFAMosn 将支持更多云原生场景,并支持 nginx 的核心转发功能。
今年 618 蚂蚁金服已经完成核心系统上到 SOFAMosn 的验证工作,在马上来临的今年的双 11,阿里巴巴和蚂蚁金服将会在核心系统大规模上线 Service Mesh。
ElasticDL
ElasticDL 是蚂蚁金服发布的新一代基于云原生的开源 AI 学习平台,它的架构基于原生的 Kubernetes 体系,因此具有强大的容错能力和弹性调度能力。另外,ElasticDL 能够支持新一代的 TensorFlow 2.0 框架,也希望引领 AI 开发者走向新一代的机器学习。
未来,ElasticDL 会支持更多的 AI 模型,让它本身变得更强大,也会更好地融入云原生体系和 Kubernetes 体系。