《从0开始打造自己的API网关》开篇语

Publish date: 2022-04-09

你好,我叫派先生。很高兴认识你,如果你还不认识我,没关系,可以先看看这里:派先生的使用说明书

作为一名安全从业人员,我已经工作有十多年了,中间不仅做过漏洞分析、攻防测试,也负责过企业的安全建设工作,

还曾独立开发过一些安全工具和软件,比如:手机防火墙、Web扫描器、Web防火墙等。

现在的技术方向主要聚焦在Web攻防、安全建设和入侵分析三个领域,

而这次带来的「专栏内容」则是自己在Web攻防方向的一部分积累和实践,

不过它并不涉及到安全方面的理论和知识,

如果你对于安全方面的知识感兴趣,我会在「风险驱动」的话题中进行系统性介绍,欢迎关注后续内容;

而本专栏则主要以安全开发的视角来完整地介绍如何从需求设计出发,并从0到1打造自己的API网关。

关于这门课的一些背景

早在2017年,我曾写过一本关于Web扫描器的书籍;

而当时其实是要求写Web防火墙相关的内容,毕竟Web扫描器和Web防火墙都是Web攻防中的集大成者,

由于一些个人原因,并没有选择Web防火墙方向的内容,这部分内容也只是简单的总结和沉淀;

后来由于工作变动和方向重心的调整,一直都没有进行内化和输出;

而且在这期间我也深刻地感受到Web安全的攻防重心在慢慢地向API场景进行转移,

随着前端框架的发展成熟以及前后端分离模式的流行,API也正在成为服务端的主要攻击入口;同时由于云原生和微服务架构越来越多的企业接受和采用,API的数量也在急剧暴增;

ProgrammableWeb曾统计过API的增长趋势,在2006年之后,API就开始实现快速增长,尤其在2010年以后,这种趋势更加明显;全球的API数量都实现了广泛地增长,如下:

Salt Security研究部门Salt Labs的一份新报告发现,SaltSecurity的客户遭遇的API攻击流量在过去一年中增长了681%,与此同时整体API流量增长了321%,如下:

Gartner也曾在其《如何建立有效的API安全策略》报告中预测,“到2022年,API滥用将成为导致企业Web应用程序数据泄露的最常见攻击媒介”, 这里面所说的最常见却并没有之一,足以见得API的重要性;

各种现象和趋势都在表明API越来越重要,我也相信,未来API将在互联网中会占据极其重要地位,尤其是在移动互联网

中,不管是企业的内部,还是企业的外部,越来越多的应用、网站、数据都将通过API来进行数据传播,

API服务化已经是不可阻挡的趋势。毕竟:开放与连接,才是世界的主旋律。

Web防火墙主要是针对HTTP请求来进行安全过滤,当然也可以对API进行安全过滤;

而API却有一些自身的约定条件、管理方式和场景要求,

所以,API网关的功能与Web防火墙也是不同的,它们其实是两种不同的安全产品;

Web防火墙可以简单抽象为:「Web服务器」+「规则引擎」

API网关则可以抽象为:「Web服务器」+「网关逻辑」

而关于这两类产品从0到1的阶段,我自己也都是有一些实践和积累,

自己曾利用go语言开发了一款轻量级的Web防火墙,并通过它帮助到一些客户解决了安全问题;

也在三个月内用go语言快速开发出功能相对完善的API安全网关,并能有效稳定地支撑线上的业务;

也许,有的朋友会好奇地问:网关为什么能够进行快速开发,它不是应该挺复杂的吗?

确实如此,但主要还是因为它们的开发模式和设计思路大部分都是相同的,且入门阶段也都是有章法可循; 所以,我想通过API网关开发的专栏内容来给大家分享下一些具体的开发方法和思路,

让你也能够快速掌握并开发出满足自己需求的应用层网关。

为什么学习这门课

我一直觉得「安全」其实是一个综合性很强的技术方向, 它不仅要求你相对有全面的计算机理论基础知识,同时还需要有网络攻防或Web攻防的实战经验; 而很多安全的同学接触Web安全都是从渗透测试开始,也并不太关注自身的安全开发能力; 但当你不满足现状想进一步提升自己的时候, 你就会发现「安全开发能力」原来也是安全技术进阶的必备技能之一, 它能够将你的安全想法或技术思路转化为demo、工具、系统,甚至是产品; 从而能更加有效地帮助你去验证和解决实际中的问题; 如果你也有这方面的顾虑和想法,那我相信本专栏是一定能帮到你。

随着API技术被广泛使用,早在2010年「ProgrammableWeb」便预测API数量会不断增长,

大量的API也直接带来了对安全与管理的诉求,

各种API的安全风险也在层出不穷,

API场景下的开发和设计也慢慢被重视起来;

可以看出,API生态也都在向简洁、集成和规范的方向发展;

而API网关作为API生态的重要组成部分,它的价值也在逐渐地被接受和使用;

对于Web技术方向的同学而言,我们也更应该保持对其的关注和学习;

API安全网关其实已经有很多开源实现或商业产品, 当然,如果你并不仅仅满足于简单的产品使用和维护,而是希望可以对API网关技术的活学活用,

并做些功能的移植和集成,这个专栏应该可以帮助到你。

那么,学习这门课的价值又是什么呢?

你可能碰到过API网关选型的问题?究竟是选择开源,还是商业,抑或是自研?

你可能希望在大的系统中集成轻量级的API网关?

首先,选择什么样的方式来解决问题,当然要依赖问题场景,毕竟需求决定方案;

因此,对于问题的定位就很重要和关键;

如果你需要的是一个成熟的解决方案,那么,首推还是「开源」和「商业」,因为你主要目的只是「使用」;

如果你需要的是一个集成型的网关模块,那么,从「成本」和「效率」看,我会建议你来学习下这门课,

首先它的开发成本并不高,其次功能和维护的效率也会优于「开源」和「商业」;而且,你不仅能够

了解到API网关的设计和原理,还能自由快捷地扩展所需功能。

它可以帮助你从技术视角来评估你所需要功能的复杂度,选择合适的方案;

而且,应用层网关是个相对普适的需求,它的开发方法也是有章可循的,

同时,应用网关的技术开发范式也是相通的,不管是WAF,还是API网关,或者是其它场景需求的网关,

我们学会了API网关的开发实践,是可以进行快速迁移来适应其它的场景;

因此,我们可以固化下应用层网关的开发框架,提高和叠加自己的技术竞争力,

我就曾利用这套方法在一个月内完成WAF的开发,并完成客户的交付; 同样,在工作期间内,同时兼顾其它工作的同时,在三个月内完成API网关的设计开发和上线应用;

所以,我完全相信通过本专栏的学习,你也一定可以,甚至会更加优秀。

那这门课程是如何设计?

我们最终的目标是能够用Golang开发出一个属于自己的简易版轻量级API网关,为了符合完整的项目开发过程,我将这门课程分成了三个大部分,分别是:设计、实践和部署,课程大纲如下: test

第一部分「设计篇」:围绕API网关进行架构设计,分别从高性能和高可用来完成整体的架构设计

第二部分「实践篇」:按照网关的架构设计要求,首先,从一个最基础的网关框架开始, 然后依次将网关所需要的功能进行开发实践,并逐步完善直至最终完成基础版本的网关实现。

第三部分「部署篇」:网关开发完成后,我们需要对网关进行部署和优化,这样才能更完整地对网关进行测试和应用 在这部分中,我们也会对API网关进行性能测试,并通过效果对比来评估自己的网关。

每一讲中我都会为你讲解实现过程和细节,并阐述每个设计的思路和原理,希望你在学习后, 不仅可以系统性地掌握API网关的工作原理和开发技能,更能懂得API网关开发的思考过程和设计思路,从而达到举一反三的效果。

除了设计篇,其它每节课程都配有对应的实践和操作内容,每一节课程中的代码我将放在 GitHub 上了,你可以跟着课程一边学习一边实践,这样你不仅能更快地掌握和吸收,也可以更好地强化和巩固所学知识,

我相信,按照专栏课程的节奏,一步一步地为自己的网关添砖加瓦,直至完成一个基础且完整的API网关。

好了,最后,感谢你对我的信任,更希望你能学有所获,也欢迎在留言区或社群中分享你学习中的问题和痛点,咱们可以一起交流和讨论。

安全行动派