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

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

  •  
  •   LeeReamond · 72 天前 · 915 次点击
    这是一个创建于 72 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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

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

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

    一个是云监控,监控请求次数和流出带宽、流出流量之类的,另外一个是日志告警。两个方案中,日志告警更具有实时性;两个都可以设置 webhook ,告警的时候进行回调操作,比如到了某个阈值就直接把 Bucket 或者文件的权限改为私有。要点就是,一旦发现风险,立即阻断。
    LeeReamond
        14
    LeeReamond  
    OP
       56 天前
    @eason1874
    @cominghome
    @kingjpa
    @xxxxxxxxxxxxx 大佬们,再问一下,oss 有办法以我要求的权限进行鉴权分发吗?比如想实现的效果是,一个静态资源,登录了的用户才能访问,不登录用户看不了。看了一下 acl 的文档似乎只能控制所有人都能访问或者只有后端能访问,但是如果需要后端中转一层的话就失去 oss 帮助减轻分发压力的优势了。。
    cominghome
        15
    cominghome  
       56 天前   ❤️ 1
    @LeeReamond 不套一层代理的话是做不到的,因为 AWS 取不到你的 cookie ,不在一个域里。
    只能通过预签名实现类似的效果,比如在请求资源之前先请求后端做一个校验,符合要求的话就重定向到被请求资源的预签名 url ,这个预签名的时间可以设短一点
    eason1874
        16
    eason1874  
       56 天前   ❤️ 1
    @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
       55 天前
    @cominghome
    @eason1874 谢谢,两位提供的方案都很有操作性
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4209 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 06:44 · PVG 14:44 · LAX 23:44 · JFK 02:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.