一、5A架构中的最佳实践
针对于5A架构中的技术最佳实践,总结如下:
身份认证:
● 人员身份认证(含员工、合作伙伴、用户等)使用SSO单点登录系统,并在敏感业务上启用超时退出机制;
● 非人员身份认证(含后台之间、客户端访问后台等),To C业务推荐全程使用Ticket,其他业务推荐使用AES-GCM等机制。
授权:
● 首选在业务自身建立授权模型(基于角色的授权等);
● 其次可使用业务之外的权限管理系统(不适用于To C业务,或参数值影响权限判定的业务);
● 敏感业务的管理权限采用权限分离,不兼任多个敏感权限。
访问控制:
● 采用基于属性的访问控制、基于角色的访问控制等机制;
● 不直接向外网提供服务,经统一的应用网关接入;
● 业务不直接操作数据库,将数据库封装为数据服务;
● 对防火墙进行收缩使用。
审计:
● 敏感操作日志提交到统一的日志管理平台,平台对业务不提供删除接口,也不向管理员提供人工删除的接口。
● 按照事先配置的保存期限,自动清理过期日志。
● 平台使用应用层身份认证,如果是To C业务,可基于用户认证通过的票据,其他业务可建立后台间的身份认证机制。
● 日志在涉及可能存储个人信息或个人隐私的时候,需要业务在记录或上传前就完成敏感信息的脱敏。
资产保护:
● 配合统一的KMS对敏感的个人信息加密存储;
● 使用全站HTTPS;
● 展示脱敏;
● 构建立体安全防御体系。
二、统一接入
对于共性问题应集中在应用网关
上解决。
启用应用网关之后,通常大多数业务就不需要直接对外提供服务了,从而也就不需要配置外网网卡或外网IP地址,这一点可以在很大程度上避免对外误开高危服务端口。
应用网关上可以扩展安全功能,如身份认证、统一证书管理与HTTPS配置、授权管理、集成安全防御等。
针对微服务数据接口,也可借鉴该形式,采用API网关,来扩展安全功能。
三、收缩防火墙
传统防火墙的管理是一个老大难问题,经年累月开通的历史策略越来越多,业务又经常发生变化,导致失效策略也越来越多,时间长了之后,防火墙也变得千疮百孔,成为安全隐患。此时即便对防火墙管理较好,也付出了很高的管理成本。
对此的最佳实践是,在满足合规要求的前提下,尽可能少的建立网络分区,尽量避免从一个安全域直接路由到另一个安全域。
对于防火墙而言,可以使用以下策略进行收缩:
● 使用无边界的网络理念,生产网络的外网边界被统一的接入网关所取代,因此外网防火墙可以取消了;
● 内网方面,从办公网络访问生产网络,也可以采用统一的接入网关,这部分防火墙也可以取消了。
这样,防火墙可仅在内网不同网络安全域之间使用,且主要用于保护存放敏感数据的区域。
四、数据服务
将数据库或其他存储系统仅作为底层的基础设施,加以封装,以数据服务的形式向业务提供。
● 针对To C业务,数据服务可以跟用户SSO系统集成,统一身份认证;
● 针对To B业务,可以在数据服务这里建立基于后台的身份认证机制。
五、KMS
KMS的主要作用是让业务无法单独对数据解密,这样黑客单独攻克一个系统是无法还原数据的。要想解密加密的数据,只有业务和KMS共同完成,缺一不可。
概念说明:
DEK:数据加密密钥
KEK:密钥加密密钥
对于To B业务来说:
如果要确保业务的高可用性,KMS掉线后也不影响业务使用,可使用该方案:
1)KMS为每个业务生成唯一的KEK,并加密保存在KMS中。
2)业务可在服务启动时,向KMS申请获取KEK,然后驻留内存。
3)加密时,DEK随机生成,使用DEK加密业务数据记录,使用KEK加密DEK,加密后的两部分一起保存在业务自身的数据库中,KMS不保存DEK。
4)解密时,使用KEK解密记录对应的DEK,使用DEK解密对应的数据记录。
如果要确保KEK的保密性,可使用下面方案:
1)KMS为每个业务生成唯一的KEK,并加密保存在KMS中。
2)加密时,DEK随机生成,使用DEK加密业务数据记录,将DEK安全地传递给KMS,KMS提取该业务的密钥对其加密,向业务返回加密后的DEK,加密后的两部分一起保存在业务自身的数据库中,KMS不保存DEK或其加密形式。
3)解密时,将加密后的DEK安全地传递给KMS,KMS提取KEK解密后,向业务返回原始的DEK,使用DEK解密对应的数据记录。
这两个方案中使用的加解密算法为AES。
对于To C业务来说
由于合规要求,由于需要具备销户及删除指定用户数据的能力,参考方案如下:
● 用户敏感数据使用随机DEK加密后存储在业务侧(第一个系统)。
● 该随机DEK使用用户特定的KEK加密,随上述数据一起存储在业务侧。
● 用户特定的KEK,加密存储在用户信息表或用户专用KMS系统中(第二个系统),这里的用户KEK可以设置多个,适配不同的应用。
● 第二个系统如果采用用户信息表,将其视为一个应用,其唯一的KEK,加密存储在KMS系统(第三个系统)。
当用户要求销户及删除自己的全部数据时,删除第二个系统中用户特定的KEK即可。
六、全站HTTPS
HTTPS在防止流量劫持、保障数据的安全传输方面发挥着很大的作用。因此,全站使用HTTPS就显得尤为必要。
对于HTTPS而言,安全点主要在证书和私钥的配置,如果让各业务自行配置证书和私钥,存在私钥泄露的风险,因此推荐采用HTTPS统一接入的应用网关,统一管理证书和私钥,统一启用HTTPS。
统一应用网关功能上至少应具备:
● 负载均衡:支持多节点部署,支持用户侧负载均衡(对用户分流),以及后端负载均衡(调度到不同的后端入口);如果只有一个入口,则其中任何一个业务面临DDoS攻击的时候,全部业务都会受到影响。
● 证书及私钥管理:能够基于访问的域名,动态调用对应的证书和私钥。
● 私钥保护:私钥本身属于敏感数据,需要额外的保护,建议加密存储。
使用统一接入应用网关之后,还可以扩展更多功能,如:
● WAF(Web应用防火墙)。
● CC攻击防御。
● 跟SSO集成,这样一部分业务可以直接使用网关传递过来的身份。
● 作为流量分析的数据源(应用层流量审计)。
七、通用组件作为基础设施
推荐将通用组件(如Web服务器Nginx/Apache等、数据库服务器MariaDB等)作为基础设施建设。
● 对于业务,可通过自助申请配置的方式,直接使用现成的Web服务器(实际上是共用服务器)而不需要登录服务器从零开始安装。
● 对于数据库,可自助申请数据库实例使用,如尚未建立数据服务基础设施,也可考虑构建数据服务,对外以Restful JSON API的形式提供。
八、自动化运维
登录服务器本身属于高风险行为,很可能由于员工误操作等原因造成配置错误、数据丢失等巨大损失。所以,在能力许可的情况下,应尽可能地实施自动化运维,将日常例行的运维操作放到自动化运维平台,减少日常登录服务器的操作。
使用自动化运维平台的好处:
● 使用Web化界面,方便、效率高、体验好。
● 可屏蔽高危操作(如:rm -rf /),避免误操作。
● 方便跟SSO集成,用于员工实名认证。
● 方便执行权限管控、运维审计。
而对业务自身,可将常用的操作加以封装,纳入自动化运维平台,可大幅降低登录服务器的频次,减少Web Console的使用,减少误操作以及口令泄露的风险。
自动化运维一般提供如下功能:
● 文件上传或下载。
● 脚本批量发布。
● 配置文件批量发布。
● 内容发布(适用于内容平台业务)。
● 应急的指令通道(在网页上出现类似命令行控制台的界面,可交互操作)。