# 云服务安全防护实践

> 我被刷了几万元后总结的 7 条血泪经验



你好，我是程序员鱼皮。

在 Vibe Coding 时代，用 AI 做出一个网站、部署上线变得特别容易，快的话十几分钟就搞定了。但很多同学只顾着把产品做出来，却忽略了一件很重要的事 —— **上线之后的安全防护**。结果产品刚上线没几天，就被恶意攻击刷了一大笔云服务费，白白损失几千甚至几万块。

曾经有一个无辜的程序员，他想要上线自己的网站给别人用。

他听说使用云服务可以很轻松地存储网站文件，于是他试了下，发现果真如此。

从那天起，他仿佛发现了一个新世界，云服务器、对象存储、CDN，一个个开箱即用的云产品，让他如沐春风、开发效率嘎嘎倍增。

他乐此不疲地用着各种云服务。直到有一天，记得那是一个风雨交加的夜晚，他收到了一条短信：“您的云账户已欠费 x 万元”。

那一刻，他发如雨下，终于意识到了：世道险恶，人心不古啊！使用云服务，就意味着有被小人攻击的风险。

![](https://pic.yupi.icu/1/image-20240319150858177.png)

没错，这位无辜的程序员就是在下。

我从大学开始做网站，至今快 10 年了，经历过无数的网络攻击，也损失过数万元的米。但也正因如此，我积累了丰富的实战经验。

这篇文章鱼皮会以最容易造成大额损失的、按量计费的云服务 —— 对象存储和 CDN 为例，给大家分享一些安全使用云服务的方法，希望能帮助更多的开发者避坑。

友情提示：不要以为攻击不会发生在自己身上，建议读完这篇文章，不要让自己成为下一位 “无辜的程序员”。

> 也可以观看视频版：https://www.bilibili.com/video/BV19D421L7Ud



## 如何安全使用云服务？

#### 1、能不用就不用！

一定要根据自己的需求和实际情况选用云服务，不要为了用技术而用技术。

比如你做的是学习练手的项目或者免费网站，那么就慎用像对象存储、CDN 这种按量计费的服务。

的确，对象存储是很方便、CDN 能给网站加速，但真的有必要么？你服务器的带宽不足以支撑那点儿用户了么？不用 CDN 网站就要违背 8 秒原则了么？

> 8 秒原则是互联网的一个著名的原则：用户在访问网页时，如果时间超过 8 秒就会感到不耐烦；如果下载需要太长时间，他们就会放弃访问。

其实再加一点点成本给服务器增大带宽，也能提高网站的加载速度。

以前鱼皮就很喜欢用 CDN，觉得不给网站套 CDN 加速就浑身难受，但其实大多数网站没什么并发访问量，用了 CDN 也快不了多少，反而增加了成本和被攻击的风险。别跟我说什么 Cloudflare CDN，国内用免费版本堪称 “网站减速器”。

之前也给大家推荐过一些免费的网站部署服务，像 Vercel、GitHub Pages、Railway 等等，都是省成本的好方法，可以试试。但是一旦部署到这些平台的网站被攻击，平台大概率会把你封号。毕竟他们没必要关注谁是攻击者，只要你的服务产生了流量，把你的服务和账号封了，也算是解决问题了。



#### 2、保护好唯一标识！

唯一标识是一个比较广泛的定义，对于不同的云服务，唯一标识也不同。

- 云服务器：服务器的 IP
- 对象存储：对象存储的存储桶名称
- CDN：CDN 服务的域名
- 开发者账号：accessKey
- 应用：appId



这点非常重要，因为大多数云服务的唯一标识是 **不可更改的** ，一旦暴露给攻击者，他就可以一直打你。

比如知道了你的服务器 IP，就可以对服务器进行 DDOS 攻击；知道了对象存储的桶名，就能够拼接出对象存储的域名，然后刷你的流量。

![](https://pic.yupi.icu/1/image-20240319155850380.png)

有同学会问了，服务器的 IP 不是通过网站的请求或者 DNS 解析就能看到么？

![](https://pic.yupi.icu/1/image-20240319155924361.png)

如果你的网站部署在单台服务器，那的确是这样，但如果你背后接了负载均衡服务（服务器集群）或者 CDN，那么得到的 IP 可能是动态变化的，攻击者无法直接攻击到背后的某台服务器。

所以，一定要保护好服务的唯一标识，不要主动暴露！



#### 3、严格控制权限

尽量遵循 “最小权限原则”，默认关闭全部权限，然后根据需要逐个放开。

比如使用对象存储服务，控制权限的方法有：存储桶访问权限设置、防盗链设置、按需分配权限等。

1）在创建存储桶的时候，就要将权限设置为 “私有读写”。如果需要给团队成员开放权限，尽量使用子账号，不要直接把自己的主账号分享出去。

![](https://pic.yupi.icu/1/1705978130876-edf05ae2-93b9-401d-83fe-909594685066.png)



2）防盗链设置，拒绝空 Referer，并且只添加自己网站的域名到白名单中。

![](https://pic.yupi.icu/1/1705972980906-712c8bb3-fe95-4115-a683-3e7ef9f53a07.png)



3）按需配置权限。比如存储桶内有很多目录，可以只允许特定的用户公开读取其中一部分目录（比如公开的图片）。

![](https://pic.yupi.icu/1/1704184426557-2fd77f75-8e0a-4644-b63a-1e0f4ec48302.png)



#### 4、配置监控告警

前面提到的策略是为了防止受到攻击，但如果真的出现了攻击，我们一定要在第一时间能够收到 “被攻击” 的通知，而不是直接收到 “欠费” 通知。

所以每个云服务，都必须配置监控告警，而且一定要综合考虑多种维度和告警策略，不能随便配置一条就完事。

比如可以配置多个指标的组合，服务错误、流量过大、或者客户端错误请求过多时，都会进行告警。

![](https://pic.yupi.icu/1/image-20240319161121251.png)

在之前我出了被刷量的那个事情后，给腾讯云官方提了不少改进建议，官方也是做出了改进，现在创建桶时就会提醒你告警，这点我觉得非常 nice~

值得一提的是，官方还补充了一条公告，说对象存储已经自动支持流量防盗刷功能了：

![](https://pic.yupi.icu/1/image-20240319160736142.png)

emmm，无论是真是假，还是建议大家手动配置下权限和告警吧，双保险。



#### 5、紧急管控措施

如果我们通过告警发现云服务正在被攻击，其实可以采取一些紧急的措施来防止损失继续扩大。

比如。。。关闭服务！

别笑，如果你服务继续运行的收益还不如被攻击的损失，临时关闭服务可能是最好的选择，打不过就战术撤退~

一般云服务平台都提供了限制或封禁攻击的手段，比如 IP 黑白名单、IP 访问限频、禁止某区域用户访问、禁止某些请求等。

![](https://pic.yupi.icu/1/image-20240319161622687.png)

如果你要使用对象存储，一定不要直接使用对象存储的域名，而是使用 CDN 域名来访问存储桶。因为 CDN 不仅提供的能力更多，还可以保护对象存储（源站）的地址。

当然了，CDN 本身一样可以被攻击，所以也要做好上述防护措施。其中，必须要配置 IP 访问限频，而且如果面向国内用户的项目，建议直接封禁国外地域的访问。



#### 6、存储迁移

这一点我相信 90% 以上的同学没有经验。

举一个之前我遇到的场景吧，有攻击者持续请求某个对象存储桶来刷流量。被我发现后，很快禁止了他的访问，他的所有请求都变成了 403 Forbidden（被服务器拒绝）。

结果你猜怎么着？他依然持续不断地发送请求。

天坑的是，对象存储服务的计费不仅有流量，也会按照请求数计费！也就是说，即使把攻击者的请求全部拒绝了，只要他继续请求，依然会对我造成损失！

对了，还有个值得分享的经历，为了查询出攻击者的 IP，需要给对象存储开通日志记录功能。但你猜怎么着？日志文件是存储在你自己的对象存储桶内的，也就是说，攻击者的每次请求，都相当于在给你的存储桶写入文件！好家伙，被刷个几天，日志的数量比正常的文件都多！而且日志存储也是要计费的哦~

我也咨询过客服，这种情况下怎么办？就让他一直刷？

客服给出的解决方案是：存储迁移。

也就是说，换一个新的桶名，不要让攻击者知道就可以了。

嗯，的确是一种解决方案，虽然代价有点大。

所以再次强调，对象存储的桶名不要泄露！保护好服务的唯一标识！



#### 7、按需充值

大白话：不要一次性给云账户充太多！

因为网络攻击这件事防不胜防，即使你配置了告警，但也不是完全可控的。假如凌晨 3 点给我发了短信告警，还是得第二天才能看到，说不定为时已晚。

这个时候，如果账户还有余额，就会接着扣除；如果欠费了，就不会继续扣除了，能够更快地发现问题、及时止损。



## 写在最后

以上就是我总结的 7 条云服务安全经验。最后再次强调，不要以为网络攻击不会发生在自己身上，攻击者盯上你根本不需要理由。

AI 让做产品变得越来越容易，但安全意识不能因此放松。花 10 分钟做好防护，可能帮你省下几万块。

如果你想进一步了解产品安全相关的内容，推荐阅读本板块的《网站数据保护实践》和《系统监控告警实践》。



## 推荐资源

1）鱼皮 AI 导航网站：[AI 资源大全、最新 AI 资讯、免费 AI 教程](https://ai.codefather.cn)

2）编程导航学习圈：[学习路线、编程教程、实战项目、求职宝典、交流答疑](https://www.codefather.cn)

3）程序员面试八股文：[实习/校招/社招高频考点、企业真题解析](https://www.mianshiya.com)

4）程序员写简历神器：[专业模板、丰富例句、直通面试](https://www.laoyujianli.com)

5）1 对 1 模拟面试：[实习/校招/社招面试拿 Offer 必备](https://ai.mianshiya.com)
