从单一应用程序切换到微服务时,客户端的行为不能与客户端具有该应用程序的一个入口点的行为相同。简单来说就是微服务上的某一部分功能与单独实现该应用程序时存在不同。
目前在使用微服务时,客户端必须处理微服务体系结构带来的所有复杂性,例如聚合来自各种服务的数据,维护多个端点,客户端和服务器之间的联系增加以及对每个服务进行单独的身份验证等,同时客户端对微服务的依赖性也直接导致了重构服务的困难。一种直观的方法是将这些服务隐藏在新的服务层后面,并提供针对每个客户端量身定制的API。该聚合器服务层也称为API网关,它是解决此问题的常用方法。本文将介绍API网关在解决安全性方面的优势,详情请查看全文:
来自客户端的所有请求都首先通过API网关,然后网关再将请求转到适当的微服务。
典型的API网关包括
- 安全性(身份验证和潜在的授权)
- 管理访问配额和限制
- 缓存(代理语句和缓存)
- API的组成和处理
- 路由(“中转器”)到“内部” API
- API运行状况监视(性能监视)
- 版本控制(自动化流程)
API网关的优势
- 在统一的位置管理和实施
- 将大部分问题外部化,因此简化了API源代码
- 提供API的管理中心和视图,更方便采用一致的策略
API网关的缺点
- 容易出现单点故障或瓶颈
- 由于所有API规则都在一个位置,因此存在复杂性风险
- 被锁定的风险,日后系统迁移并不简单
API的增长带来了机会和挑战
为了掌握API的飞速增长,人们只需要查看ProgrammableWeb的统计数据,该数据库自2005年以来一直在收集开放的API。2005年仅列出了大约100种API,如今已有超过10,000个公共API,这种增长越来越依赖于用户数据资料库的经济。据报道,Salesforce通过API创造了其30亿美元年收入的50%以上,以及Expedia 20亿美元年收入的近90%。
公司通过以各种方式计算对API及其背后资源的访问来获得API收入。例如,Twitter,Facebook和其他提供基于广告的API,这些API允许基于报告和分析来进行有针对性的广告,但是广告代理商和其他品牌必须为访问这些API付费。
API网关在安全性中的角色:身份验证和访问控制
访问控制是API网关技术的第一大安全驱动程序,它充当各种控制者,因此组织可以管理谁能访问API并建立有关如何处理数据请求的规则。访问控制几乎能扩展到建立其他策略,包括对某些来源的API调用的速率限制,甚至是通过API访问所有或某些资源的要求。
API网关的访问控制功能通常从身份验证机制开始,以确定任何API调用的实际来源。当前,最流行的网关是OAuth,它充当中介程序,用于访问基于Web的资源而不向服务公开密码,并且基于身份验证进行保留,在这种情况下企业可以承受丢失数据的麻烦,确保密钥完全保密。
通信安全
网关是一种通过单个通道连接所有API服务以评估,转换和保护整个组织中通讯的好方法。当所有流量都通过网关进行转接时,IT安全专家能够动态到所有的项目动态。
API网关可以在内部服务之间引入消息安全性,从而使内部服务更加安全,并且在服务之间来回传递的消息经过加密。即便使用传输层加密(TLS),忽略正确的身份验证也会导致问题。例如,在API请求中使用有效的手机号码,任何人都可以获取个人电子邮件地址和设备标识数据。像OAuth / OpenIDConnect这样的行业标准强大的身份验证和授权机制,以及TLS,都是至关重要的。
威胁防护
没有威胁防护,API网关,其API和集成服务器的本机服务基本上是不安全的。这意味着潜在的黑客,恶意软件或任何匿名的外部人员都可以轻松地尝试传播一系列攻击,例如DDoS或SQL注入。
API是企业与世界进行数字连接的网关。不幸的是,有些恶意用户旨在通过注入“额外”的命令或表达式来删除,更新甚至创建可用于API的任意数据来访问后端系统。
例如,2014年10月,Drupal宣布了一个SQL注入漏洞,该漏洞使攻击者可以访问数据库,代码和文件目录。甚至攻击最严重的程度是,攻击者可以将所有数据复制到客户端站点之外,这将对企业造成多大的影响。注入威胁的类型有很多,但最常见的是SQL注入、RegExInjection和XML注入。在现实中并不少见,我们已经不止一次地看到API在没有威胁防护的情况下上线了。
信息保护
许多API开发人员都习惯使用200代表成功请求,404代表所有失败,500代表内部服务器错误,在某些极端情况下,在详细的堆栈跟踪之上使用200代表带有失败消息的主体。当堆栈跟踪以程序包名称,类名称,框架名称,版本,服务器名称和SQL查询的形式揭示底层设计或体系结构实现时,可能会向恶意用户泄漏信息。
合适的做法是返回一个“平衡”的错误对象,该对象具有正确的HTTP状态代码,所需的最少错误消息,并且在错误情况下不进行堆栈跟踪。这将改善错误处理并保护API实施细节免受攻击者的侵害。API网关可用于将后端错误消息转换为标准化消息,从而使所有错误消息看起来都标准化,这也消除了公开后端代码结构的麻烦和危险。
白名单和允许白名单的方法
考虑IP地址级别的API流量,应该有设备,服务器,网络和客户端IP地址的已知列表。根据网络的紧密程度,此列表的大小会有所不同。
RESTful服务很常见,它允许多种方法访问该实体上不同操作的给定URL。例如,GET请求可能会读取实体,而PUT将更新现有实体,POST将创建新实体,而DELETE将删除现有实体。
对于服务来说,适当地限制允许动词很重要,这样只有允许的动词请求才能起作用,而其他所有动词都将返回正确的响应码(例如,403 Forbidden)。
讯息大小
有消息大小限制是很好的。如果你十分确认知道不会接收大文件消息(例如,超过2MB),那限制大小过滤掉大文件消息能尽可能避免一些未知攻击。
SQL注入
SQL注入保护使你可以阻止可能导致SQL注入攻击的请求。
JSON威胁防护
JavaScript对象表示法(JSON)容易受到内容级别的攻击。此类攻击试图使用巨大的JSON文件淹没解析器,并最终使服务崩溃。
XML威胁防护
对XML应用程序的恶意攻击通常涉及较大的递归有效负载,XPath / XSLT或SQL注入,以及CData,以淹没解析器并最终使服务崩溃。有关输入验证的更多信息,请访问此处。
限速
需要对所有API用户进行身份验证,并记录所有API调用,从而使API提供程序可以限制所有API用户的使用率。许多API网关都允许你限制可以对任何单个API资源进行API调用的数量,以秒,分钟,天或其他相关约束条件来指定消耗量。
结论
在谈论API安全性时,我们必须了解,安全性是公司、组织、机构和政府机构考虑向其API基础结构投资更多资源以及保护现有工作的头等大事。同时,在现有API提供商投资API基础结构方面,它也是最不足的领域。许多公司都在自行构建API作为产品,以部署Web,移动,IoT和其他应用程序,但是在此过程中的每一步都需要保护信息的安全性,而API网关是针对这些应用程序的最受欢迎且最有效的解决方案之一。