最佳安全实践
身份验证
AK和SK
AK(Access Key
)和 SK(Secret Key)
是用于身份验证和访问控制的安全凭证,常用于云服务提供商和其他在线平台。AK 是用户的访问密钥,类似于 用户名 ,用于标识用户身份。SK 是与 AK 关联的密钥,类似于 密码 ,用于验证用户身份和生成数字签名以确保数据的安全性。在安全领域,正确管理和使用 AK 和 SK 非常重要。以下是一些关于AK和SK安全的最佳实践:
- 保密性:AK 和 SK 应该被妥善保管,并仅在需要时向受信任的实体(如应用程序或服务)提供。不应将 AK 和 SK 存储在公开可访问的位置,如版本控制系统、公开的代码仓库或公开的文档中。
- 定期轮换:定期更换 AK 和 SK 是一种良好的安全实践,可以降低密钥被滥用的风险。推荐定期更换密钥,例如每隔几个月或根据安全政策和标准的要求。
- 权限控制:为每个 AK 和 SK 设置适当的权限和访问控制是至关重要的。仅授予所需的最小权限以执行特定任务,并定期审核和更新权限设置,以确保始终保持最小特权原则。
- 加密传输:在使用 AK 和 SK 进行身份验证时,应使用安全的传输协议(如 HTTPS)来保护凭证的传输过程,防止被中间人攻击截获或篡改。
- 强密码策略:选择强密码并遵循密码策略是保护SK的重要措施。密码应具有足够的复杂性,包括大小写字母、数字和特殊字符,并避免使用容易猜测或常见的密码。
综上所述,保护 AK 和 SK 的安全性对于保障系统和数据的安全至关重要。严格遵循安全最佳实践,合理管理和使用 AK 和 SK,可以降低安全风险并确保身份验证和访问控制的有效性。
AuthNode 验证模块
需求: 对
Master
主节点或者其他流程访问重要接口增加鉴权机制,避免未认证客户端及内部节点加入到集群中,当拉取重要信息时需要校验。原理:
Authnode
是为 CubeFS 提供通用认证和授权框架的安全节点。此外, Authnode 还充当对称密钥和非对称密钥的集中密钥存储。Authnode 采用并定制了基于票证的Kerberos
认证思想。具体来说,当客户端节点(Master、MetaNode、DataNode 或 client 节点)访问服务时,首先需要在 Authnode 中展示用于身份验证的共享密钥。如果认证成功, AuthNode 将专门为该服务颁发一个限时票证。出于授权的目的,票证中嵌入了功能,以指示谁可以在什么资源上做什么 。
- 启动 在 CubeFS 中的配置步骤(可参考 docker/run_docker4auth.sh)
- 超级管理员使用 authnode 的 key,通过
createKey API
可以为各模块生成专属 key,比如客户端是Ckey
,以及 master 是Skey
。同时, AuthNode 中会存储模块 ID 与 Key 的对应关系; - 各模块配置 ID 及 Key,启动服务。
- 扩大接口验证范围 Master 接口涉及大量的卷维度和集群维度的运营管理,为了保护集群管理的安全,可以选择在 Master 启用配置
authenticate
,这样接口操作会到 Authnode 再次验证 ckey 的正确性。
授权政策及管理
权限分级
- 权限分为 admin 权限和普通用户权限。admin权限具备普通用户的管理权限以及卷的维度管理操作权限,在系统中以
owner
字段展示;普通用户权限基于 admin 的授权,具有固定的访问路径(如根目录)和操作权限(读、写),用户只能操作自己的挂载目录及其子目录下的文件或者目录 - 从卷的维度上看,用户分为两种类型:只读用户和读写用户。只读用户只能读取文件或目录,而无法修改它们。此外,还支持限制用户仅能访问特定子目录中的文件。在挂载后,CubeFS 支持基于 Linux 用户、组和其他权限限制的权限检查。例如,给定以下文件权限:
-rwxr-xr-x 2 service service f1
,只有service
用户可以修改该文件,而其他非 root 用户只能读取它。
权限管理
创建申请走管控平台审批,可以严格控制 owner(admin)创建后的使用(有删除卷的权限)。卷的 admin 账号由管控平台创建和管理,根据命名规则自动生成。共享单个管理员帐户是不安全的,因此会为业务提供一个常规帐户。
例如: 对接中间件,授权一个普通账户,提供给业务,由管控平台保存 owner,任何删除请求都需要向管控平台申请
ladp+自动挂载
ldap 的作用
- 用户身份验证:LDAP 可用于验证用户的身份。用户的用户名和密码可以存储在 LDAP 目录中,当用户尝试进行身份验证时,系统可以通过 LDAP 协议与 LDAP 服务器通信,验证用户提供的凭据是否与存储在目录中的凭据匹配。
- 单一登录(Single Sign-On):LDAP 可以用作单一登录系统的认证后端。单一登录系统允许用户使用一组凭据登录到多个关联应用程序,而不需要为每个应用程序单独进行身份验证。LDAP 作为认证后端,可以集中管理用户凭据,实现用户在多个应用程序间的无缝登录体验。
- 用户授权和权限管理:LDAP 目录可以存储用户组织结构、角色和权限信息。基于 LDAP 的认证和授权系统可以根据用户的身份和所属组织结构,授予用户适当的权限和访问权限。这样可以确保只有经过授权的用户可以访问敏感数据和资源,提高系统的安全性。
- 集中式用户管理:LDAP 提供了一个集中式的用户管理平台。组织可以在 LDAP 目录中存储和管理用户信息,包括用户名、密码、电子邮件地址、电话号码等。通过 LDAP,管理员可以轻松地添加、修改或删除用户信息,而不需要在每个应用程序中单独进行操作,提高了管理效率和一致性。
自动挂载的优势
- AK 和 SK 应该被妥善保管,并仅在需要时向受信任的实体(如应用程序或服务)提供。不应将 AK 和 SK 存储在公开可访问的位置,如版本控制系统、公开的代码仓库或公开的文档中。
- 避免 ak、sk 等信息泄露,提高密钥的安全可用
- 基于 LDAP 的身份验证可通过 IP 和用户验证来实现。LDAP 还可以用于控制和管理权限
网关
master ip 不直接暴露,而是通过使用网关的域名方式。其优点如下:
- 方便 master 节点更换:使用域名方式可避免客户端配置变更,正常情况下上线业务变更配置重启比较麻烦
- 确保接口安全:域名开放必要的 master 接口,例如程序需要的分区信息等。但管理类接口不对外开放,保护了管理权限
- 为监控、警报和成功率统计提供服务
- 可增加缓存层
流量控制
卷维度流量 QoS
大集群多租户运营模式中可提升资源利用率,降低成本,但也给系统稳定性带来了挑战,例如某租户下的一个卷的请求突增,流量对整个存储系统造成冲击:
- 不同卷的数据及元数据分区可能会放置在同一台机器甚至同一个磁盘上。对某个卷的大量的读/写请求会影响到同节和磁盘上其它卷的访问。
- 带宽打满会影响集群节点间内部通讯,进而影响集群管理节点对数据节点状态的判断,触发例如数据均衡等行为,进一步加剧整个集群的抖动。
- 冲击集群上游交换机,不仅影响存储系统本身,还会影响同一交换机下其他非存储类系统。
因此,流量 QoS 是系统稳定运营的重要保障手段。
设计文档:https://mp.weixin.qq.com/s/ytBvK3MazOzm3uDtzRBwaw
master 请求接口QOS限制
- Master 的稳定性对于整个集群非常重要,所以为了防止意外(失败大量重试)或者恶意攻击,需要对 Master 的接口进行 qps(Queries Per Second) 限流管理。
- qps 限流对 master 每秒可接受的请求数进行了限制。对于未设置限流的接口,不做任何限制;对于设置了限流的接口,可选择为速率限制等待设置超时,防止雪崩效应。
对象服务安全相关特性
S3鉴权能力
为了保障 CubeFS 中的数据以及请求过程的安全性,所有请求要么是签名认证的,要么是匿名授权的。CubeFS 的签名能够从如下维度保护用户数据的安全:
- 请求方身份认证:请求方必须通过 AK 和 Sk 进行签名计算来验证身份,服务端可通过 AK 识别请求方的身份。
数据防篡改
- 为了防止数据传输过程中被篡改,将请求元素也参与到请求签名的计算中。当收到请求后,服务端会通过接收到的请求元素进行签名计算,如果请求元素出现篡改,那么两边的签名比较将无法通过。
- ObjectNode 支持 V2、V4 和 STS 三种兼容 S3 协议的签名算法,同时兼容 Header、Query 和 Form 三种子签名方式,能够保障用户请求过程中的数据安全性。
权限管控
- 权限管控是基于用户和资源的授权策略,对请求用户的行为进行访问控制,常用的应用场景有:对用户和 API 的组合控制、对客户端 IP、请求 Referer 等信息进行控制、内外网隔离访问控制等。
- CubeFS 针对存储桶和对象的访问,主要提供了以下权限控制策略:Bucket Policy 和 ACL。在 CubeFS 的权限管控中,首先校验的是 Bucket Policy,只有 Bucket 没有设置 Policy 或者 Policy 中没有匹配到对应权限时,才会继续进行 ACL 校验。
WORM模式
- 对象锁定(Object Lock)可以实现一次写入,多次读取 (WORM) 模式来存储对象。Object Lock 可以帮助用户满足需要 WORM 存储的法规要求,也可以增加额外的保护来防止对象被更改和删除。 为用户提供设置(取消)和获取 Bucket 对象锁定配置的接口。用户配置 Bucket 对象锁定后,所有上传的新对象都遵从此配置,存量对象不受影响。
- 为用户提供通过 HeadObject 以及 GetObject 获取对象的保留周期、保留模式的功能。
- 在对象锁定保护期内,对象不会被删除和覆盖。
S3API QoS
为保证 CubeFS 服务的可用性和规避异常用户流量的影响,ObjectNode 支持 S3API 级别下不同用户的并发/QPS/带宽维度的流控策略。
ACL IP 黑名单
- 加强端侧可控,为业务、运营管理者提供基于 IP 的可屏蔽策略。客户端挂载请求和已经挂载的客户端,所在 IP 加入黑名单后会无法继续服务。例如
- 防止未经授权的访问:ACL IP 黑名单可以用于阻止已知的恶意 IP 地址的访问,从而保护网络资源免受未经授权的访问或攻击。
- 阻止恶意流量:阻止这些来源的恶意流量,例如分布式拒绝服务(DDoS)攻击、恶意扫描或爬虫等。
具体使用方法:
./cfs-cli acl
Manage cluster volumes acl black list
Usage:
cfs-cli acl [command]
Aliases:
acl, acl
Available Commands:
add add volume ip
check check volume ip
del del volume ip
list list volume ip list
防火墙端口范围
master、datanode、metanode、authnode、objectnode、lcnode 等服务端都有监听端口范围。
建议只开放必要的端口,关闭不必要的端口。可以通过防火墙规则或系统配置来实现。例如,如果您只需要通过 SSH 进行远程管理,您可以关闭 Telnet 等其他不必要的远程管理端口。
审计日志
挂载点的操作审计流水,审计日志存放在客户端本地指定目录,方便接入第三方的日志采集平台。
- 启动客户端时,可以在客户端配置文件中修改
enableAudit
参数的值,选择开启或者关闭本地审计日志功能 - 可以通过 HTTP 发送命令到客户端主动开启或者关闭日志功能,不用重新挂载
- 客户端审计日志记录在本地,日志文件超过 200MB 会进行滚动,滚动后的陈旧日志会在 7 天后进行删除。也就是审计日志默认保留 7 天的审计流水,每小时触发一次陈旧日志文件扫描删除
客户端默认开始审计(3.3.1 版本)开始,审计日志从客户端审计日志转为服务端日志,服务端审计可以设置是否开启,默认是关闭的
删除保护
在卷维度下,可以在文件或者目录创建后为其设置一个禁止删除时间,这个禁止时间内都不允许删除该文件或目录。
用户可以通过 cli 工具设置删除锁定周期,并判断传入的参数值是否大于 0,若大于 0,则用该值更新卷的删除锁定周期。
- client 会定期到 master 拉取卷信息并缓存,拉取完成之后,client 才正式开启删除锁定功能。
- 客户端执行删除之前会判断缓存的卷信息中的删除锁定周期是否为 0,若不为零则说明已开启删除锁定功能,此时需要进行判断。若当前卷上设置的删除锁定周期小于当前时间和文件或目录创建时间的差值,则允许执行删除的后续逻辑。
- 默认情况下,卷的删除锁定功能是关闭的,要打开该功能只需要在创卷或者更新卷的过程中指定删除锁定周期为一个正数即可。cli 命令的使用:
# 创建卷
$ volume create [VOLUME NAME] --deleteLockTime=[VALUE]
# 更新卷
$ volume update [VOLUME NAME] --deleteLockTime=[VALUE]