数据传输安全:
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.外部验证