本文作者将从产品的角度对SaaS产品设计时可能会涉及到的安全性问题进行大致的阐述,enjoy~ 对于SaaS应用,由于如下原因: SaaS服务和数据部署在云端而不是用户本地机房,可能存在不可控问题; SaaS基于多租户架构,多个租户共用一套实例,可能存在数据安全性问题; 租户基于网络进行访问,可能存在网络劫持等不确定性因素。 因此,潜在用户在考量是否采用SaaS服务时,系统安全性及稳定性必将成为一个重点考量的方向。 下面将从产品的角度对SaaS产品设计时可能会涉及到的安全性问题进行大致的阐述,首先介绍的是如何实现应用的安全性 应用安全确保租户在使用SaaS时能享有高可用性和高可靠性。为了实现应用安全,SaaS系统需要在身份认证,权限管理,日志管理等方面采取必要的措施。 身份认证 身份认证确保只有经过系统合法授权的用户才能操作和使用系统,是保证整个系统应用安全的基础。通常在系统设计时可选用三种常见的身份认证模式,分别是集中式认证,非集中式认证,混合式认证。 三种认证方式对比结果如下: 集中式身份认证 集中式身份认证的前提是通过部署一个统一的身份认证中心,该身份认证中心主要负责对登录SaaS用户的身份进行认证和维护,对应的图示如下: 虽然采用集中式身份认证方案可以很好的保证登录用户的安全性。但是,该方案需要租户在SaaS应用的身份认证中心维护自己的身份,这样必将导致租户信息不能与其他系统一起使用,更不能实现单点登录。 非集中式身份认证中心 非集中式身份认证中心就是每个租户采用自己独有的身份认证系统,各租户通过SaaS系统发布的安全令牌,也就是Token进行通信。SaaS系统的身份认证中心通过接受解析接受到的Token来获取对应用户的信息。 非集中式身份认证最大程度保证系统的灵活性,通过租户现有的身份认证中心,能够实现租户身份的统一维护,便于实现租户各个系统之间的单点登录。但这种认证方式依赖各租户自身的身份认证系统,十分容易导致SaaS应用的身份认证系统出现安全性问题。 混合式身份认证 不管是集中式身份认证抑或是非集中式身份认证,在实际生产环境中,这两种身份认证方式都会被会被广泛的使用到。而且对于SaaS应用而言,需要服务的客户千差万别,很对中小型租户并没有专门的身份认证中心,要求SaaS本身提供身份认证服务;而对于大型公司而言,已有成型的身份认证系统。所以跟进上述情况,在设计SaaS产品是,既要提供集中式的身份认证模式,已满足中小型租户的使用需求,又要提供非集中式的身份认证模式供大型客户使用。也就是提供混合型身份认证模式满足各类型用户需求。 权限管理 权限管理就是对访问SaaS系统的租户进行访问权限的控制,确保只有拥有对应权限的用户才能操作对应的功能,下面将分别从权限模型,权限分配模式,权限校验三个方向对SaaS应用的权限管理做详细的介绍 权限模型 不管是传统模式,还是SaaS模式,广泛采用的权限模式就是RBAC模型。标准RBAC模型包含四种,分别是基础模型RBAC0、角色分级模型RBAC1、角色限制模型RBAC2和统一模式RBAC3。 RBAC0:RBAC的基础,定义了用户、角色、会话、操作、操作指引的基础概念及关系。 RBAC1:在RBAC0的基础上强调角色间的继承关系。 RBAC2:在RBAC0的基础上强调角色间的限制,包含,约束关系。 RBAC3:强调继承,也强调角色间的约束。 RBAC0基础模型的基本原理图: RBAC0模型在SaaS系统中同样强调用户、会话、角色、操作、资源等基本概念。但相对传统应用所有资源都是全局属性的模式,SaaS系统有着更多的不同性和更高的复杂性。对于SaaS系统而言,用户是租户所特有的;角色既有全局的,也有租户自身的,而租户的角色是需要隔离的。 权限分配 从上面的权限模型中可以看出,权限分配主要涉及角色管理、用户到角色、角色许可分配。 角色在SaaS系统权限分配中发挥着重要的作用。对于SaaS系统而言,角色既有全局角色,也有租户相关的角色。全局角色包含系统管理员和各租户都会使用到的通用角色,系统管理员主要对系统和租户进行维护及管理。通用角色主要是为了简化租户的操作而统一定义的系统操作角色。租户相关的角色也可以进一步分为租户管理员和租户自定义的业务角色。 SaaS系统中的用户到角色主要由租户自己操作,对应的租户可根据自己的实际业务需求自定义相关的角色,也可以直接采用系统通用角色。 角色许可分配涉及到两个方面: 系统通用角色许可的分配,由系统管理员创建通用角色时统一分配; 租户自定义角色许可的分配。由租户管理员分配。 由于角色许可分配涉及具体操作权限的分配,相关实现方式可查看老鬼前几篇文章。 权限校验 权限校验主要实现验证对应请求用户是否具有操作权限。首先校验租户是否购买相应的功能,如果购买了,再来校验该用户是否被授予使用权限。需要注意的是权限校验模块作为一个通用模块,在实际应用中会被反复调用。所以在实现时,需要尽最大的努力保证高性能,高并发。 日志记录 SaaS系统获取用户信任是需要解决的核心问题,试想一下如果用户在系统中做了一些错误操作导致重要数据丢失或出错了,这个时候用户可能会怀疑这些错误是系统导致的,或者是其他租户的操作造成的。这种怀疑将会导致用户对系统安全性的不信任,不信任的产生将会产生致命的结果。所以,对于完整的SaaS系统,其在设计之初,就需要考虑到安全性问题,通过日志的形式规避这种可能存在的风险。 日志记录就是要对用户在系统的操作行为和操作数据进行记录,以便对用户在系统中进行的操作进行查证,确保用户的行为不可伪造,不可销毁,不可否认。 日志具体记录包含两部分:行为日志记录和数据日志记录。 行为日志记录:行为日志记录就是记录用户在系统中访问的每一个页面,在页面中所做的每一个行为都被记录下来,记录用户的身份和行为的时刻。例如:租户A的用户A1在2018:08:04-15:00访问了重要客户列表,做了删除客户操作。 数据日志记录:数据日志记录,就是要对用户在系统中所操作的数据进行记录,记录数据的变更过程和变更历史。这在多人操作同一个数据的系统显得尤为重要。