如何保障微服务安全

翻译 2017年11月13日 16:17:11

原文:Securing microservices
作者:SERGIUOLTEAN
翻译:无阻我飞扬

摘要:如何保护微服务,确保微服务的安全,作者从保护应用程序安全和保护容器的安全两个方面进行了阐述,以下是译文

保护微服务

实现一个微服务很难。部署一个微服务应用程序复杂性也很高。保护微服务的安全就更难更复杂。从哪里开始呢?脑海中首先出现的一些词是身份验证和授权、防火墙、授信、会话、令牌。我们需要保护应用程序的安全,也需要保护容器的安全。

保护应用程序

一种方法是构建一个单点登录(SSO)网关,像普通的网关一样,它位于应用程序的前端,但需要考虑到其与SSO服务器的握手,并执行URL重定向操作。可以用http报文头传送授权和认证信息给服务。但是除非使用https,否则这样做是不安全的。但是我们知道https有证书,维护多个微服务的证书可能会成为问题,尤其是需要补发或撤销这些证书的时候,复杂性将进一步增加,我们尽量避免这种情况。

另一种方法是用HMAC(基于哈希的消息代码)。这个请求的主体带有哈希私钥,结果是随着请求发送的。然后,服务器通过使用其私钥和请求主体的副本重新创建哈希,并将其与接收到的哈希进行比较。如果一切都匹配,那就意味着消息没有被篡改,请求可以通过。这种模式由JWT(Json Web Tokens)实现。但是,事实上网络侦听器仍然可以看到数据。

Twitter,Google等使用API密钥。使用API密钥,服务可以识别谁在调用,并可以对其设置限制。密钥是成对的(公钥和私钥),它们必须集中管理。

假定一切都准备就绪了,但是还是有一个问题,如何确保用户无法访问其他用户的数据呢?那就需要做更多的限制,可以通过限定用户只能访问他自己的数据来保护我们的服务,但是将导致在许多地方产生大量的样板代码。不幸的是,没有更好的办法。微服务意味着复杂性和一些重复预期会被减少。

还是没有解决嗅探器(sniffer,也叫数据抓包软件)的问题。怎样才能确保sniffer看不到数据呢。答案是加密。先加密,然后根据需要进行解密。这就是微服务复杂系统的另一个组件:密钥服务。

有很多库可以用,最好的选择是使用成熟的库,如OAuth或SAML。

服务可以有状态参数。为网关中初始化的所有服务保持一个全局会话,并将其传播到所有其它服务。会话可以从像KeyCloak这样的中央认证和授权服务器(SSO)获得。

我们更希望服务没有状态参数。这意味着需要将状态从服务器转移到客户端。Json的 Web令牌(JWT)非常符合这种需求。这是一种在双方之间转移声明的安全方式。基本上它的一个json作为Json Web签名(JWS)的主体或Json Web加密(JWE)的明文传递。声明可以进行数字签名,并包含发行者,用户的身份,到期时间,还可以包含自定义属性。

举一个例子,流程看起来如下图:

这里写图片描述

客户端应用程序将与UAA(用户认证和授权)服务器进行交互。它为包含一个JWT令牌的重定向URL交换其证书。令牌将提交到网关,在UAA服务器进行验证。如果一切正常,它会将该JWT令牌转发到所请求的服务,将会解码它并授予其对所请求资源的访问权限。

保护容器

现在已经知道如何保护应用程序了,是时候关注容器的安全了。Docker是一个广泛使用的容器。可以做些什么来保护它们呢?

答案是深度防御。这意味着需要防火墙;这意味着需要小心记录在日志中的信息(被攻击后,日志有助于快速恢复系统);这意味着需要监视集群的可疑行为(入侵检测系统和入侵防御系统);这意味着需要将服务分开并将它们放在不同的位置(虚拟私有云),并创建一组规则,确保它们仍然能够相互通信;这意味着保持操作系统更新(特别是安全更新)。

Aaron Grattafiori在Docker Con 2016年的演讲中谈到三个原则:

  • 最小权限原则,这意味着不以root身份运行应用程序
  • 最小意外原则
  • 最小访问原则,这意味着每个模块只能访问与其相关的数据

这里有篇文章有更多的相关细节。假设已经遵循了上述三原则,想到的下一个问题是:使用的Docker图像安全吗?怎么知道它们没有包含恶意代码呢?幸运的是,在Docker 1.8中引入了Docker Content Trust ,与此同时,Docker图像的发布者在将其推送到注册表之前进行了验证。

保护Docker安全的一个有用的工具是Calico。每个Docker网络都有Calico配置文件,必须设置规则和策略以控制流量。更多相关内容看这里

现在你应该有足够的信息来启动你的微服务安全保护了。

微服务安全和治理

在整体式架构中,由于运行应用程序的运行时环境相对隔离,所以治理和安全保护很简单。微服务架构具有典型的革新特征,给活动的治理和应用程序的安全威胁保护带来了更多挑战。 微服务架构中的安全性微服务架构通过...
  • u010039929
  • u010039929
  • 2017年04月13日 13:27
  • 2306

如何做一个优秀的微服务访问安全设计方案?

今天给大家带来的是数人云工程师文权在线上的分享实录。从传统单体应用架构到微服务架构,安全问题一直是人们关注的重点,我们来看看文权他在微服务访问安全设计方案上的探索与实践。 作者简介 ...
  • u013322876
  • u013322876
  • 2017年03月03日 13:57
  • 925

Spring Cloud中如何保证各个微服务之间调用的安全性

一.背景微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务。每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢?不是说你想调用就可以调用,一定要有认证机制,是我们内部服务...
  • u010889990
  • u010889990
  • 2017年12月02日 11:48
  • 1744

浅谈服务治理与微服务

近期都在谈微服务,本人也正在做相关的工作,应领导要求做了一个微服务的分享,本篇文章主要来源于分享的PPT。本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后再介绍微服务,微服务是服务治理的升...
  • suifeng3051
  • suifeng3051
  • 2017年01月03日 15:29
  • 22289

如何保障微服务安全

原文:Securing microservices 作者:SERGIUOLTEAN 翻译:无阻我飞扬 摘要:如何保护微服务,确保微服务的安全,作者从保护应用程序安全和保护容器的安全两个方面...
  • dev_csdn
  • dev_csdn
  • 2017年11月13日 16:17
  • 6872

Spring Cloud 保证微服务内安全

一、简介 在微服务的架构下,我们需要把系统的业务划分成多个单一的微服务。每个微服务都会提供接口供其他微服务调用,在Dubbo中可以通过rmi、nio等实现,Spring Cloud中是通过http调...
  • sunbufu
  • sunbufu
  • 2018年02月08日 11:41
  • 23

论微服务安全

每个人都在讨论微服务,每个人也都希望能够实现微服务架构,而微服务安全也日渐成为大家关注的重要问题。今天小数与大家分享的文章,就从应用层面深入探讨了应对微服务安全挑战的方案,为微服务安全提供了新的思路。...
  • linlzk
  • linlzk
  • 2017年03月23日 10:07
  • 1015

如何保证服务器的安全?

如何保证服务器安全?笔者之前做一个项目时,思考了这个问题。汽车维修公开信息项目大体上就是一个文档有偿下载打印的资源类信息网站。此类网站的价值就在于资源,所以保证资源的安全性便是重中之重了。笔者认为,最...
  • Lan_Xuan
  • Lan_Xuan
  • 2016年09月17日 17:13
  • 917

微服务那些事儿(完整版)

  • 2017年07月23日 19:39
  • 80.97MB
  • 下载

小程眼里的微服务

最近一直在研究微服务有了一点小小的成果,前段时间给公司部门同事做了分享,在此将ppt发出来与大家分享。...
  • u013970991
  • u013970991
  • 2016年12月13日 14:19
  • 4986
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何保障微服务安全
举报原因:
原因补充:

(最多只允许输入30个字)