测试阶段为了看图方便,把存储桶权限临时放开,是不少团队都做过的事。图片能直接打开,附件能直接下载,联调效率确实高。问题在于,这个“临时”很容易被忘掉。等到系统上线,桶还是公共读状态,任何拿到链接的人都能访问里面的文件,包括不该对外的内容。这类问题不一定会立刻暴露,但一旦被扫描到,处理成本远高于上线前花十分钟核对。
要核对,先要分清三类权限概念。存储桶策略作用于整个桶,决定谁能对桶内资源做什么操作,影响面最大。对象ACL作用于单个文件,粒度细,但容易在批量上传时被统一设成公开,反而成为漏点。临时访问凭证则是给前端或第三方一个带时效的访问入口,本身不改变文件的默认权限,用得好可以替代公共读。三者混用时,最常见的情况是桶策略已经收紧,但对象ACL还留着公开读,或者反过来,凭证过期了却没人发现。
上线前的核对清单可以从五项入手。第一,确认桶的默认权限是私有,新建对象继承私有属性,而不是继承“公开读”。第二,检查策略里是否存在通配符授权,比如把资源写成星号、把主体写成所有人,这类写法在测试期很常见,上线前应逐条确认必要性。第三,关闭目录列表功能,即使单个文件可访问,也不应让人通过列举接口看到桶里有什么。第四,外链是否带过期签名,需要长期公开的资源应走签名机制,而不是直接开放读权限。第五,确认访问日志已开启,出问题时能回溯谁在什么时间访问了什么。
验证方法不复杂,但要做对。用未登录状态的浏览器直接访问一个文件直链,观察返回的状态码和内容。如果返回正常文件内容,说明该文件对外可读。再开一个无痕窗口重复访问,排除缓存和登录态干扰。两步都通过,才说明权限确实收紧了。反过来,如果直链返回拒绝访问,但业务页面里的图片仍能正常显示,说明走的是签名或代理路径,这是预期结果。
权限收紧后还要做兼容性检查。公共读关掉之后,原本依赖直链的图片、附件、导出文件可能全部失效。上线前应把业务里所有引用存储地址的地方过一遍,确认它们走的是签名链接、后端代理还是公共直链。公共直链的部分要改成签名或代理,签名有效期要覆盖实际使用场景,避免用户打开页面时链接已经过期。这一步做不完整,权限是收紧了,业务也跟着断了。
把权限核对写进上线流程,比事后补救划算得多。it数运在交付中通常把这类检查列为固定项,和域名解析、证书有效期、备份策略放在同一张清单上,逐项确认后再放行。对象存储的权限问题不复杂,难的是有人记得在正确的时机检查它。







