云服务模型与责任共担:谁该为数据安全买单?

很多刚接触云安全的同学都会问一句:「数据放在云上,安全到底归谁管?」

这个问题不搞清楚,后面所有路径分析和风险评分都是扯淡。我个人习惯把这件事总结成一个简单原则:云厂商管云平台的安全,你用云的人管你在云里放的东西的安全。但这句话太笼统了,实际落地得看你选的是 IaaS、PaaS 还是 SaaS。

三种服务模型,责任边界完全不一样

先看一个最经典的对比表,这表我每次做培训都会贴出来。你想想看,同样是“数据加密”,在不同模型下谁来做,差别大了去了。

责任维度 IaaS PaaS SaaS
物理安全 云厂商 云厂商 云厂商
网络与虚拟化 云厂商 云厂商 云厂商
操作系统与中间件 客户 云厂商 云厂商
运行时与数据 客户 客户 云厂商
用户端访问控制 客户 客户 客户
数据加密(静态与传输) 客户(云厂商提供工具) 共担(平台默认加密+客户管理密钥) 云厂商(客户可配置)
合规与审计 共担 共担 云厂商主导

这张表里最有意思的是最后一行「数据加密」。我遇到过一家金融客户上了 IaaS 的裸金属服务器,以为云厂商自动给硬盘加密了,结果等审计发现数据全明文存储……嗯,IaaS 里云厂商只保证你拿到的是物理安全的硬盘,加密得你自己搞。

IaaS:你管系统,我管机房

基础设施即服务,说白了就是云厂商给你一台虚拟服务器、一块虚拟硬盘、一个虚拟网络。剩下的操作系统打补丁、装数据库、配置防火墙、加密磁盘——全都是你的事。

我曾经帮一个创业团队复盘数据泄露事件。他们用了 IaaS,把 MySQL 直接装在默认的公共子网里,连安全组都没配。我问他们为什么不做?对方回我:「云不是自带安全吗?」……这是典型的责任边界认知陷阱。

⚠️ 常见误区:在 IaaS 下,云厂商只负责物理环境和虚拟化层的隔离。你的虚拟机打了什么补丁、开放了哪些端口、数据库是否加密——这些暴露路径完全由你控制,也完全由你负责。

PaaS:不用管系统,但数据还是你的

平台即服务,比如阿里云的 RDS、AWS 的 Lambda。云厂商帮你管好了操作系统、中间件和运行时环境。你直接在上面写代码、建表、跑逻辑。

但这不代表你可以撒手不管。我问你一个场景:你在 PaaS 上建了一个 PostgreSQL 数据库,云厂商默认帮你开启传输加密(TLS),但你写代码时没校验 SQL 注入——数据照样可以通过 SQL 注入被拖走。这不是云厂商的责任,这是你应用层的暴露路径。

我记得有一次做渗透测试,目标是一个跑在 PaaS 上的 REST API。我扫了一圈,底层平台加固得很好,但我发现 API 的 JWT 里直接嵌了明文用户 ID……这就是典型的数据安全责任边界模糊点:平台安全由云厂商兜底,但应用数据安全必须你自己盯着。

SaaS:你也别闲着,配置和权限才是命门

软件即服务,Salesforce、钉钉、飞书、Google Workspace 都是例子。这时候云厂商连应用层都管了,你只管用。

等一下,那是不是完全不用操心了?当然不是。数据暴露路径最常见的重灾区就是 SaaS 里的权限配置和共享设置:

  • 不小心把一个带敏感数据的在线文档设为「公开链接可访问」
  • 离职员工的账号没及时停用
  • 第三方 OAuth 应用获取了太高的数据读取权限

这些暴露路径跟云厂商无关,纯粹是人的操作问题。说白了,SaaS 模式下你放弃了对底层和平台的控制权,但换来的是必须做好配置管理。

共享责任模型:一张图讲清楚

下面这张图是我每次讲共享责任模型都会画的。它清晰地告诉你:云厂商负责“云的安全”,你负责“在云中的安全”。两者的交界处就是最容易出问题的灰色地带。

云上数据安全共享责任模型 客户责任(数据与访问层) 数据内容与分类分级 访问控制与身份认证 加密密钥管理与客户端加密 应用代码安全与配置 合规审计与日志监控 云厂商责任(基础设施层) 物理安全与环境控制 虚拟化层隔离与网络边界 底层存储与硬件加密 平台安全补丁与漏洞修复 合规认证与第三方审计 共享责任边界 客户控制面 云厂商控制面

中间那条红色的「共享责任边界」是我重点圈出来的。很多泄露事件都出在这条线附近——比如云厂商负责网络 ACL,但你忘了关闭 3306 端口;云厂商提供 KMS,但你用了一个弱口令去保护主密钥。说白了,边界上的安全,需要双方都做好自己的那部分。

三个模型下的数据暴露路径典型场景

结合我自己的实际排查经验,整理几个最容易踩的坑:

💡 IaaS 典型暴露路径
• 未打补丁的操作系统被 CVE 漏洞利用 → 攻击者拿到 shell → 拖走数据库文件
• 安全组规则过于宽松(/0 开放 SSH) → 暴力破解成功 → 横向移动到数据盘
• 对象存储(如 AWS S3)配置为公开读写 → 数据直接暴露在公网
🔍 PaaS 典型暴露路径
• 数据库连接字符串硬编码在代码中,上传到公开的 Git 仓库 → 被爬虫抓取 → 直接登录数据库
• 云函数(Function)环境变量里存了 ,日志未脱敏 → 运维日志泄漏密钥
• 消息队列未开启访问认证 → 内部消息被第三方订阅
⚠️ SaaS 典型暴露路径
• 企业网盘分享链接设置「知道链接即可查看」 → 链接被转发到外部群组 → 数据泄露
• 第三方 OAuth 应用申请了过多的数据范围,且未定期审核 → 应用被攻破后数据大规模泄露
• 用户误将机密文档上传到公共团队空间 → 内部任何人都能访问

如何用共享责任模型做风险评分

在我做数据暴露路径分析时,会把每个发现的风险点先贴到这张责任模型图上,看它落在哪个区域:

  • 落在客户责任区的风险:评分直接给高,因为控制权在客户手里,修复成本相对可控,但一旦暴露影响极大。
  • 落在云厂商责任区的风险:评分中等偏低(毕竟云厂商有 SLA 和自动修复),但需要确认云厂商是否真正做到了承诺。
  • 落在共享边界上的风险:这是最难评分的。比如加密密钥管理——云厂商提供 KMS,但密钥由客户保管。这时候需要检查密钥的生命周期策略、是否启用自动轮换、是否有审计日志。我通常会给这类风险加个「责任归属不明确」的标签,评分时额外加权重。