V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

有关 OSS 开放公共读是否会造成多余流量风险

  •  
  •   LeeReamond · 2022-05-31 16:18:15 +08:00 · 2175 次点击
    这是一个创建于 915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人项目使用 OSS 归档,开了个低频读写实例,因为数据量较大自己构建稳定同步还挺麻烦的,低频 OSS 很好地解决了这方面的问题。

    目前有一个疑惑就是,为了方便业务代码开发,OSS 设置为了写入需要权限,任何人都可以读取,想问一下一般来讲现在网上是否有爬虫扫描,或者 oss 官方有接口可以查看到泄露的文件,导致出站流量被匿名第三方刷爆的风险?

    目前情况是,文件名比较长,内部加入了 hash ,第三方纯靠猜不太可能直接猜到文件名。文件敏感度也没那么高,理论上被别人看到也不会有啥严重问题,希望达到的效果是,在不被特别恶意针对的情况下,按照目前的策略(公共读,但是文件名比较难猜)是否可以确保大致上的流量安全? v 友们有类似部署的经验吗?

    顺带问一下目前用的是阿里云 oss ,看面板统计信息疑惑是不是上传不计公网流量。印象里以前看计费文档的时候看到过好像是这样的,但是刚才重新找了一遍没找到原来看到的地方

    17 条回复    2022-06-17 23:48:57 +08:00
    yEhwG10ZJa83067x
        1
    yEhwG10ZJa83067x  
       2022-05-31 16:20:59 +08:00
    可能性不大
    gam2046
        2
    gam2046  
       2022-05-31 16:22:55 +08:00
    阿里云可以设置消费预警,或者账户余额就留 10 块钱,超出了也就停了。

    另外 oss 对于流入流量(即上传到 OSS )是不计费的。仅计算流出流量(从 OSS 下载)费用和存储费用。

    如果网络条件还可以,可以考虑 Cloudflare R2 ,流量费用全免,仅需支付存储费用,大概折合人民币,120 元左右 /月 /TB
    ch2
        3
    ch2  
       2022-05-31 16:31:22 +08:00
    你不在别的地方公开,不会有那么闲得无聊的人的
    eason1874
        4
    eason1874  
       2022-05-31 16:35:20 +08:00   ❤️ 1
    Bucket 公共读权限包括 List ,文件名可以遍历出来,不用猜

    想要永久开放链接,可以把 Bucket 设为私有读写,然后文件上传后通过 Object ACL 将文件设为公共读,又或者给文件生成数十年有效期的签名链接

    会不会被刷流量,其实看运气,有时候不是恶意针对,仅仅是因为某些傻缺爬虫反复抓取也会花掉你几百块,还是得靠欠费预警什么的人工控制
    cominghome
        5
    cominghome  
       2022-05-31 16:44:39 +08:00
    不是开了什么静态网站托管这种服务的话,建议关掉公共读,改用 ACL 规则,开放指定目录的 GetObject 权限
    LeeReamond
        6
    LeeReamond  
    OP
       2022-05-31 18:17:52 +08:00
    @eason1874
    @cominghome 搜索了一下关键字 ACL ,似乎就是权限控制的意思,现在默认是对整个 bucket 进行 acl ,设置为读无限写保护。如果我没理解错的话,两位的意思是说有个 object 粒度的 acl 的 api ,操作方式是将 bucket 设置为读写都需要权限,然后上传文件后单独对文件授权 object 随意读,这样可以避免 list 被读的问题?
    LeeReamond
        7
    LeeReamond  
    OP
       2022-05-31 18:20:34 +08:00
    @gam2046 阿里云也不是很贵,我开了个最便宜的美东机器,日常单次传输是类似图片大小的文件,感觉速度也够用,储存费用是 1T10 美元,我的场景是归档储存内容量很大,实际读取流量很少
    eason1874
        8
    eason1874  
       2022-05-31 18:29:24 +08:00
    @LeeReamond 对,ACL 是权限控制配置,Object 默认继承 Bucket 的配置,也可以单独配置。可以通过 API 修改,也可以在控制台修改。具体配置语法看文档,文档里有例子

    #5 说的操作起来更简单,你可以直接改 Bucket 的 ACL ,向匿名用户只开放 GetObject 和 HeadObject ,那就不怕被 ListObjects 了
    cominghome
        9
    cominghome  
       2022-05-31 20:30:13 +08:00
    @LeeReamond 对象存储的权限优先级是这样的,1.桶的全局权限<2.桶级别的 ACL 策略<3.对象本身 ACL

    把桶设置为公共读是开在了 1 这一级
    我建议的操作是在 2 这一级别做
    3 一般是在代码里配置,针对文件单独设置,起到一个保护性作用(避免隐秘文件因继承了上一级的 ACL 被错误地公开)
    Seanfuck
        10
    Seanfuck  
       2022-05-31 20:39:51 +08:00
    读的话,api 有个 STS 临时签名,可以拼到 url 里也可以放 header 里,就是有一大大大串字符串,挺难用的。。。。
    yaoyao1128
        11
    yaoyao1128  
       2022-05-31 20:49:23 +08:00 via iPhone
    可能,但是现在我搭的下载 一个月出的流量最多也就 60g 所以感觉还好
    可以考虑套 cdn 解决或者限制访问 ip 的方式……
    kingjpa
        12
    kingjpa  
       2022-05-31 21:17:16 +08:00
    除了恶意,大概率不会。
    别被爬虫盯上,曾经做过二手房系统,流量一天几万 ip ,我还挺高兴。
    后来发现全是爬虫。真实 ip 连几十都没有. 后来网站都关了, 这些脚本还在不断请求
    xxxxxxxxxxxxx
        13
    xxxxxxxxxxxxx  
       2022-06-01 11:56:28 +08:00
    楼上朋友提到的消费预警,并不是很靠谱,因为阿里云的产品计费有一个周期,并不是实时的,像 OSS 就是一个小时、两个小时出一次账单。如果真的被攻击,你收到账单的时候可能就已经欠费一大堆了。你可以搜一下 OSS 盗刷。

    如果不是托管了静态网站,建议还是改为私有。不用签名鉴权,坚持设置公共读的话,还是建议增加预警措施。

    一个是云监控,监控请求次数和流出带宽、流出流量之类的,另外一个是日志告警。两个方案中,日志告警更具有实时性;两个都可以设置 webhook ,告警的时候进行回调操作,比如到了某个阈值就直接把 Bucket 或者文件的权限改为私有。要点就是,一旦发现风险,立即阻断。
    LeeReamond
        14
    LeeReamond  
    OP
       2022-06-16 23:46:29 +08:00
    @eason1874
    @cominghome
    @kingjpa
    @xxxxxxxxxxxxx 大佬们,再问一下,oss 有办法以我要求的权限进行鉴权分发吗?比如想实现的效果是,一个静态资源,登录了的用户才能访问,不登录用户看不了。看了一下 acl 的文档似乎只能控制所有人都能访问或者只有后端能访问,但是如果需要后端中转一层的话就失去 oss 帮助减轻分发压力的优势了。。
    cominghome
        15
    cominghome  
       2022-06-17 09:17:05 +08:00   ❤️ 1
    @LeeReamond 不套一层代理的话是做不到的,因为 AWS 取不到你的 cookie ,不在一个域里。
    只能通过预签名实现类似的效果,比如在请求资源之前先请求后端做一个校验,符合要求的话就重定向到被请求资源的预签名 url ,这个预签名的时间可以设短一点
    eason1874
        16
    eason1874  
       2022-06-17 09:56:41 +08:00   ❤️ 2
    @LeeReamond 可以用签名来鉴权。存储桶和对象私有,通过域名+对象路径无法访问,而登录用户,你的后端给他们返回带签名的 OSS 链接,他们可以访问

    需要注意的是,签名链接并不知道用户有没有登录,拿到链接的人都可以访问。所以你签名除了设置合理的有效期,最好把用户 IP 加进去 x-oss-ac-source-ip ,确保用户把链接发出去别人也访问不了(但不要缓存签名链接,大部分用户没有公网 IP ,每隔一段时间 IP 会变的)

    对象存储 OSS>API 参考>访问控制>在 URL 中包含签名 https://help.aliyun.com/document_detail/31952.html
    LeeReamond
        17
    LeeReamond  
    OP
       2022-06-17 23:48:57 +08:00
    @cominghome
    @eason1874 谢谢,两位提供的方案都很有操作性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   953 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:32 · PVG 03:32 · LAX 11:32 · JFK 14:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.