You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS S3仅允许应用已认证用户访问,关闭公共访问?

解决S3私有存储桶与Firebase认证用户访问的方案

1. 先彻底关闭S3公共访问

首先确保存储桶完全私有,消除公共访问风险:

  • 登录AWS S3控制台,选中目标存储桶,进入「权限」标签页
  • 找到「阻止公共访问(存储桶设置)」,勾选全部4项阻止规则并保存
    • 阻止新的公共ACL和上传公共对象
    • 移除通过任何ACL授予的公共访问权限
    • 阻止新的公共存储桶策略
    • 阻止公共和跨账户访问(若存储桶策略允许)

2. 基于Firebase认证实现授权访问

因为你的用户通过Firebase完成认证,推荐两种安全方案:

方案一:通过后端生成S3预签名URL(推荐,低复杂度)

这是最易维护的方式,所有S3操作都通过你的后端中转,前端不直接持有AWS凭证:

  • 流程逻辑:
    1. 用户上传图片:前端先向你的后端(比如Firebase Cloud Functions)发起请求,后端验证用户Firebase身份后,生成S3预签名上传URL返回给前端,前端用该URL直接上传图片到S3
    2. 用户查看图片:前端请求后端获取目标图片的预签名下载URL,后端验证用户身份后生成URL返回,前端通过该URL加载图片
    3. 用户删除图片:前端请求后端,后端验证用户身份(确认是图片所有者)后,调用S3 API删除对应图片
  • 权限配置:给后端服务(比如Cloud Functions的服务账号)配置IAM权限,允许对S3存储桶执行s3:GetObject、s3:PutObject、s3:DeleteObject操作

方案二:Firebase认证换取AWS临时凭证(适合无后端场景)

如果想让前端直接访问S3,可通过OIDC身份提供商实现:

  • 步骤:
    1. 在AWS IAM中创建OIDC身份提供商,地址填https://securetoken.google.com/你的Firebase项目ID
    2. 创建IAM角色,信任策略设置为仅允许Firebase认证用户访问,同时给角色添加精细的S3权限:
      • 允许所有注册用户执行s3:GetObject(针对所有图片路径,或按业务需求限制)
      • 仅允许用户对user/{uid}/*路径执行s3:PutObject和s3:DeleteObject(确保用户只能操作自己的图片)
    3. 前端用户登录后,从Firebase获取ID Token,调用AWS STS的AssumeRoleWithWebIdentity接口,换取临时AWS凭证
    4. 前端用临时凭证直接调用S3 API完成图片操作

3. 优化建议:按用户ID规划存储路径

将图片按user/{用户UID}/{图片文件名}的结构存储,这样能更精准地控制权限,比如限制用户只能访问自己路径下的内容,避免越权操作。

4. 不推荐使用ACL

ACL属于老旧的权限控制方式,易出现配置混乱,AWS官方推荐用桶策略和IAM角色管理权限,所以尽量不要依赖ACL来实现用户访问控制。

内容的提问来源于stack exchange,提问作者Farid SISSINHO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:56:18