微服务网关安全

微服务安全面临的挑战

  • 更多的入口点,更高的安全的风险
  • 性能问题
  • 服务间通讯安全
  • 跨多个微服务的请求难以追踪【对于一个服务来说,可观测性是一个很重要的指标,可观测性包含了三个方面的意义】
  • 容器化部署导致的证书和访问控制问题
  • 如何在微服务间共享用户登陆状态
  • 多语言架构要求每个团队都有一定的安全经验

一、 更多的入口点,更高的安全的风险

  1. 原来单块的应用场景下,我的入口点只有一个,就是我们的应用,所有的请求都会从这个入口点进来,可能是 80 端口,也可能是 443端口,反正入口点很少,在这个入口点上,只需要建立一组fitter【J2EE 原生拦截器实现】或者 interecptor【Spring 容器内拦截器的实现】,就可以控制住所有的安全风险
  2. 那么在一个微服务环境下,业务逻辑不在是在一个单一的进程,而是分散在很多的进程里面,每一个微服务都是一个 tomcat【进程】,而每一个进程 tomcat 都有自己的入口点,这会导致我们防范的攻击面比原来大的多,风险也会高的多

二、性能问题

  1. 单体应用:原来的单体应用里面所有的业务逻辑都在同一个进程里面,那么我需要的安全信息也都在里面,请求进来以后,需要验证身份、权限都是在同一个进程里面完成的
  2. 而在微服务架构里面,关于需要的安全的信息很可能在单个微服务的进程里面是没有的,比如访问订单的时候,用户的信息、权限的信息在订单系统里面是拿不到的,需要调用安全中心、用户中心来获取相关的信息,这样就需要进行一个远程调用了,就会对性能造成影响

三、微服务间通信安全

单体应用场景下只需要考虑从外部进来的请求是不是安全的,里面涉及到的服务之间相互的调用是不需要我们考虑安全的,但是在微服务场景下从订单去调用物流的时候,是需要跨网络,从一个进程进入另一个进程,所以需要考虑服务之间的通信安全

四、跨多个微服务的请求难以追踪

对于一个服务来说,可观测性是一个很重要的指标,可观测性包含了三个方面的意义

  1. log 【日志,用来记录我们系统发生了什么】
    分布式环境中,我们每个系统都会单独记录日志,所以日志是分散来记录的,这个时候需要一个机制能够把所有日志串起来
  2. metrics【把日志信息聚合起来】
    metrics 有两个关键要素,第一个是时间窗口,第二个是一个数字【比如说流量:我们一般会说在1秒钟之内有10个请求,在1分钟之内有两百个请求,过去三小时内下了50个单,过去一天的成交额是100万】最简单的metrics 是我们的流量,即每秒钟有多少个请求。在单体应用里面,我们很容易控制这个事情,但是在分布式应用中,可能我们的订单能够承受的并发量是500,物流承受的并发量是700,这个时候我们需要一个整个能够承受服务的流控,而不是单一的承受某一个微服务的流控,这也是一个要解决的问题
  3. tracing
    要解决在经过某一个服务的耗时,以及经过所有服务的耗时,然后统计性能

五、容器化部署导致的证书和访问控制问题

  1. 微服务的场景里面,我们最常用的部署手段就是容器化,在我们以前的部署里边,部一个应用,部一个集群,我们就要4台机器,然后部署4个实例,这个时候我们的IP 地址都是固定的。然后我们要做什么白名单、安装证书,然后在这4个机器上安装证书,然后根据这4个机器的IP 写白名单就可以了
  2. 而在微服务里面,我们通常是通过容器化完成部署的。容器化的一个好处就是带来了一个不可变的服务器,当一个容器一旦产生,里面的内容是不会变的,不可变的服务器意味着你可以随时干掉这个容器,然后在另外一个地方启用一个一摸一样的,当我们请求压力大的时候,立马再启用多个容器,来把压力分担掉,所以在微服务部署里面,容器化或者不可变的服务是一个很重要的原则,在这样一个情况下,就是导致我们证书、访问控制会出现一个问题。当然我们可以把证书打到镜像里面,这就要求我们服务的每个镜像是不一样的,那么这个时候,这种差异就会带来维护上的困难,当然也是可以的
  3. 当然更好的解决方案是我们有一个自动化的机制,在每个容器创建的时候,根据这个容器的属性不同,有一个自动注入的机制,把他需要的证书注入进去,这样每个应用就不用关心自己的证书问题了
  4. 另外一个访问控制:我们原来机器就4个节点,我写个简单的白名单,写个IP,针对这4个IP能对外访问。或者别人访问我们的时候,只写这4个IP 就可以了
  5. 但是在容器化的部署中,我们可能随时产生容器的调度,容器的扩缩容,IP 地址是不断变化的,这个时候如何控制白名单、黑名单进行访问控制也是我们要面临的新的问题
  6. 但是在容器化的部署中,我们可能随时产生容器的调度,容器的扩缩容,IP 地址是不断变化的,这个时候如何控制白名单、黑名单进行访问控制也是我们要面临的新的问题

六、如何在微服务间共享用户登陆状态

  1. 原来在单体应用中,我们用的是固定session,session是覆盖到所有服务
  2. 但是在微服务环境下,在进入订单服务的时候,我们需要知道用户是谁,在进入物流服务的时候,我们需要知道用户是谁
  3. 如何在多个应用之间共享用户登陆状态?在这个请求中所涉及的微服务都知道当前用户是谁?这样 一个信息

七、多语言架构要求每个团队都有一定的安全经验

常见的微服务安全整体架构

整体架构.png

OAuth 2.0 简要介绍

角色分类

用户

真正的人

客户端应用

可能是一个 Web App 或者手机 App,用户会直接访问这些应用

认证服务器
  1. 作用
    它的作用是认证,证明一个人真的是他,然后发出令牌

  2. 需要做的事情
    1)首先它需要知道有哪些客户端应用【被授权系统】要请求令牌
    2)还需要知道有哪些合法的用户【因为他是认证服务器】
    3)最后需要知道道发出去的令牌应该用于访问哪些资源服务器

  3. 认证服务器和资源服务器扮演者一对多的关系,一个认证服务器可以替无限多个资源服务器做认证

资源服务器

存储资源的服务器

OAuth.png

核心交互流程

  1. 用户在使用客户端的时候,它首先要去认证服务器做一个认证,认证服务器的作用是用来认证说自己是“张三”的真的是张三
  2. 证明了以后会发一个令牌给客户端应用,告诉客户端应用说,你拿这个令牌,这个令牌就代表了张三这个用户
  3. 下边客户端应用就会拿这个令牌去访问我们的资源服务器,也就是我们的微服务,这个时候就会带着这个令牌去访问,相当于代表用户去访问我们这个微服务
  4. 资源服务器【也就是我们的微服务】收到这个请求以后,拿到请求里面的令牌后,他会去访问认证服务器来验证请求中的令牌,问认证服务器,我现在收到一个令牌,这个令牌是谁,认证服务器告诉他,这个令牌是张三,订单服务【资源服务器】就会认为这个请求是张三这个用户发过来的

核心流程的本质

  1. 本质仍然是一个基于令牌 token 的认证方式
  2. 这个和我们基于 Cookie、Session 的本质是一样的,都是基于 token 的认证方式
  3. 本质都是认证服务器发送令牌给客户端,客户端携带令牌进行访问

OAuth 2.0 微服务架构下的问题

  1. 安全处理和业务逻辑耦合,增加复杂性和变更成本
  2. 随着业务节点增加,认证服务器压力增大
  3. 多个微服务同时暴露,增加了外部访问的复杂性

解决方案

所有请求都由网关进行转发
  1. 安全处理都放在网关,这样安全处理和业务逻辑就不会耦合了
  2. 即使业务节点增加了,认证服务器承受的压力变小了【因为业务节点增加了,网关可能也需要扩容,但是认证服务不会直接受网关的影响】
  3. 外部访问只需要访问网关即可,不需要关注具体的微服务
微服务.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容