安全
验证与授权
- 验证:用来确定你是谁
- 授权:确定你能做什么
单点登录SSO
单点登录是指当主题视图访问某一资源时,会被重定向到一个身份提供者,这个提供者负责鉴别主体,鉴别完成之后将通知服务提供者采取相应操作
单点登录网关
使用一个统一的网关来鉴别主体,有效地减少重复编码。
但是需要解决的一个问题是,随着服务间的调用,如何在服务间传递这个身份信息?
使用HTTP头携带是个不错的办法
深度防御
把所有鸡蛋放在一个篮子里是不安全的,深度防御的理念是对系统中的每一层做防御,以避免单点故障带来的严重后果
细粒度的授权
当授权角色细分达到一定的粒度时,对系统的管理维护来说是很复杂的。
整体来说,权限的粒度划分应该要以组织的结构为依据
服务间的验证与授权
- 边界内信任
就如局域网内的通信,在边界内的服务通信,通常都被默认为安全的
- HTTP(S)身份认证
使用HTTP是不安全的,但是如果使用HTTPS则需要考虑证书的管理问题以及HTTPS无法被缓存等
- 证书
- 哈希
- API密钥
- 通过服务端管理密钥来识别服务调用者以及对调用者进行管理
静态数据的安全
- **选择一个众所周知的加密算法,而非自己实现**
- 加密算法应取决于密钥的复杂性,而非算法的保密性
- 选择应该加密的数据
- 按需解密
- 密钥管理
深度防御
- 防火墙
不同的范围使用不同的防火墙
- 日志
日志虽然无法预防,但是可以事后检测发生了什么
- IDS
IDS通常是在可信范围内尽力查找可疑目标
- 网络隔离
微服务可以利用分布部署的优点来进行网络隔离
- 操作系统
操作系统的漏洞仍然不可小视
保持节俭
真的需要存储那么多数据吗?
为了安全,或者为了用户的隐私,只需要存取必须的数据即可
内建安全
可以将一些自动化的安全工具集成的CI中
外部验证
外包出去给第三方进行渗透测试