AWS S3 Bucket配置静态网站后仍出现403错误求助
解决AWS S3托管Angular应用时的403错误
你的Bucket Policy核心问题是只授权了对桶本身的访问权限,未覆盖桶内的文件对象。S3的资源ARN规则里,桶的ARN是arn:aws:s3:::[my-bucket-name],而桶内所有文件对象的ARN需要加上/*后缀,也就是arn:aws:s3:::[my-bucket-name]/*——静态网站访问本质是读取桶内的HTML、JS等文件,必须把对象路径纳入权限范围。
修改后的Bucket Policy如下(记得替换[my-bucket-name]为你的实际桶名):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPublicRead", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::[my-bucket-name]/*" } ] }
另外没必要授权s3:*这么宽泛的权限,仅s3:GetObject就足够满足静态网站的读取需求,安全性更高。
除了Policy问题,还需要排查以下关键点:
- Angular构建产物上传是否正确:运行
ng build后,要把dist/[你的项目名]文件夹下的所有文件(而非整个dist文件夹)上传到S3桶的根目录 - 静态网站托管配置:索引文档必须设为
index.html,错误文档也建议设为index.html——Angular是单页应用,所有路由都需要通过index.html处理,否则刷新非首页路由会返回404 - 桶的「Block public access」设置:确保四项开关全部关闭,这个设置会直接覆盖Bucket Policy的公开权限配置
- 对象ACL(可选):如果Policy修改后仍无效,可临时检查单个文件的ACL是否设置为「公开读取」,不过正确的Bucket Policy会优先控制权限,这步仅作兜底排查
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

