架构系列二(微服务安全体系设计思考)

113 阅读4分钟

1.引子

我们都知道,安全问题一直都是不容忽视的。今天我想跟你分享一下,在微服务体系设计中,关于安全这个话题的一些思考,当然我们在谈到微服务安全的时候,主要都是关于api的安全,我将与你一起讨论这么几个话题

  • api安全目标
  • api存在哪些安全风险
  • 有哪些机制来应对api的安全风险
  • 最后我们一起来设计一个适合中小企业的微服务安全方案

让我们开始吧!

2.案例

2.1.api安全目标

如果说关于api安全,我们来定一些安全目标的话,你首先会从哪些角度来考虑呢?我们一起来看一下,它应该包含:机密性、完整性、可用性,即我们常说的CIA

  • 机密性--->确保信息只被预期的访问者访问。题外话:不是谁都能看到,不是谁都能看懂,这就叫做机密性
  • 完整性--->防止未授权的创建、修改、删除。题外话:要在授权的前提下,才能操作
  • 可用性--->当访问者需要访问操作api的时候,api始终可用。题外话:这不就是要高可用,要稳定可靠嘛

2.2.api安全风险

明确了api的安全目标:机密性、完整性、可用性。我们再来看日常开发中,我们需要关注存在的一些api安全风险,它们有

  • 信息泄露(Information disclosure):不希望被人知道的信息,突然就曝光了。题外话:违反了机密性(本来以为挺保密,结果全世界都知道了)
  • 拒绝服务(Denial of service):不能为访问者提供正常服务。题外话:违反了可用性(被攻击了吧,DDos!)
  • 欺骗(Spoofing):通过伪装方式访问服务。题外话:借你的身份用一用
  • 否认(Repudiation):拒绝承认做过的事。题外话:这事不是我干的
  • 干预(Tampering):将不希望被修改的信息,改掉。题外话:就是这么牛气,你说气人不
  • 越权(Elevation of privilege):做了不被允许的事。题外话:你不让我干,非干给你看

2.3.api安全风险应对机制

我们现在知道了,api存在的安全风险有:信息泄露、拒绝服务、欺骗、否认、干预、越权等。针对这么多的安全风险,我们该如何应对呢?下面我将我的一些思考分享给你

  • 信息泄露--->加密,我们将确保api的入参、出参数据的私密性
  • 拒绝服务--->流控,我们将非法、不合理的请求流量挡在最外层
  • 欺骗--->认证,我们将确保你必须要证明你是你
  • 否认--->审计,我们将确保你的一切举动都有记录
  • 干预、越权--->授权,我们将确保你的行为,在允许的范围内

你看通过加密、流控、认证、审计以及授权,我们能很好的应对api的各种安全风险。

2.4.适合中小企业的微服务安全方案

理清楚了安全目标、存在的安全风险、相关的安全应对机制。最后你可能会问了,那么在实际的应用中,我们该如何设计实现这么一套行之有效的安全体系呢?

我先给你分享一个架构设计方案参考图,再配上相关的文字描述,抛砖引玉期望给你在实际应用中带来一些帮助

看图:

image.png

文字描述:

  • 最左边是用户终端应用,比如PC站点、APP应用
  • 中间是安全体系,包含:流控、认证、审计、授权
  • 最右边是提供api的微服务集群,比如:订单、商品

在这里,我们需要关注的是中间安全体系部分。你也看到了,对于请求我们是这么考虑去处理的

  • 首先不管是请求,还是响应。都需要通过加密防止信息泄露,当然加密是有代价的,因此是否需要加密机制,需要结合业务考虑
  • 一个请求从用户发起,在所有安全方案中,流控是第一位的,可以说流控是保障应用稳定、可靠、可用的第一道屏障
  • 经过流控,允许请求流量进来后,通过认证防止欺骗风险
  • 经过认证,请求流量继续处理,通过审计防止否认风险。你也看到了,不管是请求、还是响应都需要审计处理
  • 最后,通过授权防止干预、越权的风险

也就是说,在整个安全体系设计中,一次请求响应的安全处理流程依次是

流控--->认证--->审计--->授权

当然我们这里讨论的是安全方案的设计,具体在实现中关于流控、认证、审计、授权我们应该在哪里实现?我们可以考虑在网关实现、还可以考虑将业务相关的在微服务中来实现。不同的企业,不同的业务我们需要综合去考量。