9.微服务设计 --- 安全

数据传输安全:
	1.边界内默认是可信赖的
	2.https
	3.客户端证书
	4.HMAC
	5.api 密钥

数据静态安全:
	1.使用众所周知的加密算法
	2.一切与密钥相关
	3.选择你的目标
	4.按需解密
	5.加密备份

深度防御:
	1.防火墙
	2.日志
	3.入侵检测
	4.网络隔离
	5.操作系统


1.身份验证和授权
	在安全领域中,身份验证是确认他是谁的过程。当我们抽象的讨论进行身份认证的人或事的时候,我们称之为主体。
	通过授权机制,可以把主体映射到他可以进行的操作中。通常,当一个主体通过身份认证后,我们将获得关于它的信息,这些信息可以帮助我们
  决定其可以进行的操作。
   
    1.常见的单点登录实现 
    	身份验证和授权的一种常见方法是,使用某种形式的SSO(Single Sign-On,单点登录)解决方案。
    	当主体试图访问一个资源的时候,他会被定向到一个身份提供者那里进行身份验证。这个身份提供者会要求他提供用户名和密码,一旦身份
      提供者确认主体已通过身份验证,它就会发信息给服务提供者,让服务提供者来决定是否允许它访问资源。

	2.单点登录网关 
		在微服务系统中,每个服务可以自己处理如何重定向到身份提供者,并与其握手。显然,这意味着大量重复的工作。使用共享库可以解决这个问题,但如果是
	  不同的技术栈,共享库也很难提高帮助。
	    你可以使用位于服务和外部世界之间的网关作为代理,而不是让每个服务管理与身份提供者的握手。基本的想法是,我们可以集中处理重定向用户的行为,并且
	  只有在一个地方执行握手。然后,我们仍然需要解决下游服务如何接受主体信息的问题。如,可以把这些信息放到 http 头中。

	3.细粒度的授权 

2.服务间的身份验证和授权 
	1.在边界内允许一切 
		在边界内对服务的任何调用都是默认可信的。
	2.HTTP(S) 基本身份验证 
		ssl 之上的流量不能被反向代理服务器(比如Varnish或Squid)所缓存。如果你想缓存信息,就不得不在服务端或者客户端内部实现。
	  你可以在负载均衡中把 https 的请求转发成 http 请求,然后在负载均衡之后,就可以使用缓存了。
	3.使用SAML 或OpenID Connect 
		客户端有一组凭证,用于向身份提供者验证自身,而服务获取所需的信息,用于任何细粒度的身份验证。这意味着你需要为客户端创建账户,
	  有时被称为服务账户,然后限制其使用范围。如果凭证被泄露,你只需要撤销有限影响的凭证即可。
	4.客户端证书 
		确认客户端身份的另外一种方式是,使用 TLS,TLS 是 SSL 在客户端证书方面的继承者。在这里,每个客户端都安装了X.509证书,用于
	  客户端和服务端之间建立通信链路。
	5.HTTP 之上的 HMAC 
		使用 HMAC(Hash-based Message Authentication Code,基于哈希的消息码)对请求进行签名,它是OAuth规范的一部分,并被广泛用于亚马逊AWS的 S3 API。
		使用 HMAC ,请求主体和私有秘钥一起被哈希处理,生成的哈希值随着请求一起发送。然后,服务器使用请求主体和自己的私钥副本重建哈希值。如果匹配,接受请求。
	  这样做的好处是,如果一个中间人修改了请求,那么哈希值会不匹配,服务器便知道该请求已经被篡改过了。并且,私钥永远不会随着请求发送,因此不存在泄露的问题。
	  额外的好处是,这个通信更容易被缓存,而且生成哈希的开销要低于处理https通信的开销。
	    缺点:客户端和服务器需要一个共享的,以某种方式交流的密钥。其次,这是一种模式,而不是标准,因此有各种不同的实现方式。可以参考AWS 的 S3 或者 JWT。	 
	6.API 密钥 
		api 密钥允许服务识别出谁在进行调用,然后对他们能做的进行限制。限制通常不仅限于特定的资源访问,还可以扩展到类似针对特定的调用者限速,以保护其他服务
	  调用的质量等。
	    具体该如何使用api密钥的方式来处理你的微服务间的访问,取决于你所使用的具体技术。一些系统使用一个共享的api密钥,并且用一种类似于刚才所说的hmac的方式。
	  更常见的方法是,使用一个公钥私钥对。
	7.代理问题 
		有一种安全漏洞叫做混淆代理人问题,指的是服务间通信的上下文,攻击者采用一些措施欺骗代理服务,让它调用其下游服务。例如,用户登录后,查看我的账户详情。但
	  如果用我的凭证,去查看其它人的信息呢?

3.静态数据的安全 
	1使用众所周知的加密算法 
		搞砸数据加密最简单的算法是,尝试自己实现加密算法。使用加盐密码哈希去加密你的密码。
	2.一切皆与密钥相关 
		密钥存储在哪里?
		一个解决方案是使用单独的安全设备来加密和解密数据。另外一个方案是,使用单独的密钥库,当你服务需要的时候可以访问它。
	3.选择你的目标 
		你需要考虑哪些数据可以被放入日志文件中,以帮助识别问题。
	4.按需解密 
		只在需要的时候进行解密,并确保解密后的数据不会存储在任何地方。
	5.加密备份 
		加密的数据需要备份,并确保备份也被加密。
4.深度防御 
	1.防火墙 
		只在特定的端口限制特定的通信类型。
	2.日志 
		聚合多个系统的日志能力很重要。
	3.入侵检测(和预防)系统 
		IDS(入侵检测系统)可以监控网络和主机,当发现可以行为时报告问题。IPS(入侵防御系统),也会监控可以行为,并进一步阻止它的发生。

	4.网络隔离 
	5.操作系统 

5.一个示例 
6.保持节俭 
7.人的因素 
8.黄金法则 
9.内建安全 
10.外部验证 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值