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

AWS S3存储桶文件无法访问:是否需配置存储桶策略?

解决S3存储桶对象访问403 Forbidden的配置方案

核心原因

S3存储桶及对象默认处于私有状态,IAM用户拥有上传权限仅代表该用户能操作桶内资源,但外部(浏览器、应用播放器)通过URL直接访问时属于匿名请求,无读取权限,因此返回403错误。

存储桶策略配置步骤

  1. 登录AWS控制台进入S3服务,找到目标存储桶
  2. 切换至权限标签页,点击存储桶策略的「编辑」按钮
  3. 粘贴以下策略代码,替换<BUCKET_NAME>为你的实际桶名:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<BUCKET_NAME>/*"
        }
    ]
}
  1. 保存策略

策略说明

  • Principal": "*":允许所有用户(含匿名用户)执行指定操作
  • "Action": "s3:GetObject":授予读取对象的权限
  • "Resource": "arn:aws:s3:::<BUCKET_NAME>/*":权限覆盖桶内所有对象;若仅需开放特定目录,可修改为arn:aws:s3:::<BUCKET_NAME>/<DIR>/*

额外必查项

  • 阻止公共访问设置:在权限标签页的「阻止公共访问(存储桶设置)」中,确保未勾选「阻止所有公共访问」(需公开访问时)
  • 对象ACL配置:若上传时未指定公共权限,需在Laravel上传代码中添加公开标识,确保对象继承可读权限:
Storage::disk('s3')->put($path, $file, 'public');

权限安全建议

  • 若文件无需公开访问,不要使用上述公开策略,改用Laravel生成的预签名URL提供临时访问权限:
$url = Storage::disk('s3')->temporaryUrl($path, now()->addMinutes(30));
  • 遵循最小权限原则:仅开放必要目录或对象的读取权限,避免过度授权

内容的提问来源于stack exchange,提问作者James Stewart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:54:27