AWS S3已配置Bucket Policy与CORS,访问URL仍遭Access Denied
问题原因及解决方案
核心原因
你的Bucket Policy仅授权给了特定IAM角色arn:aws:iam::*****:role/xyz,而浏览器直接访问对象URL属于匿名公共请求,不在该授权范围内,因此被拒绝访问。
具体配置问题分析
Bucket Policy 权限范围错误
当前策略的Principal指定了唯一的IAM角色,只有通过该角色发起的请求能访问存储桶内对象。浏览器直接打开URL时,请求没有携带任何IAM身份凭证,属于匿名访问,不符合Policy的授权条件。
若要允许公共访问,需将Principal改为"*"(代表所有用户,包括匿名用户),同时限制权限为必要的操作(比如仅GetObject,避免授予S3:*这类过度权限)。CORS配置不影响访问权限
你的CORS配置是正常的,但CORS仅用于控制跨域请求的浏览器行为(比如AJAX跨域调用),和对象的基础访问权限无关,无法解决本次的AccessDenied问题。额外检查点
虽然已关闭Block all public access,但需确认对象自身的ACL是否设置为允许公共读取。不过Bucket Policy的优先级高于对象ACL,所以核心问题仍在Bucket Policy。
修改后的Bucket Policy示例(允许匿名GET访问)
{ "Version": "2012-10-17", "Statement": [ // 新增匿名GET权限 { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::test/*" }, // 保留原IAM角色的全权限(如果仍需要) { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::*****:role/xyz" }, "Action": "S3:*", "Resource": "arn:aws:s3:::test/*" } ] }
内容的提问来源于stack exchange,提问作者AncientPro
相关产品推荐
相关产品推荐

