AWS CloudFront签名URL访问被拒问题排查求助
排查CloudFront签名URL返回Access Denied的问题
我来帮你一步步排查这个签名URL访问被拒的问题,结合你给出的配置和策略信息,可能的原因主要有以下几点:
1. 签名URL的参数分隔符错误
你给出的签名URL格式是:
image.png?policy=xxxxx@signature=xxx@Key-Pair-Id=XXXXXXX
这里用@作为参数分隔符是错误的!CloudFront要求签名URL的参数必须用&来分隔,正确格式应该是:
image.png?policy=xxxxx&signature=xxx&Key-Pair-Id=XXXXXXX
错误的分隔符会导致CloudFront无法正确解析签名参数,这大概率是直接触发Access Denied的原因。
2. CloudFront签名策略的Resource路径不匹配
你的CloudFront策略中指定的Resource是:
"Resource": "XXXXXXXXXX.cloudfront.net/standard/f7cecd92-5314-4263-9147-7cca3041e69d.png"
需要确认:
- 这个路径和你实际请求的URL路径完全一致,包括大小写(S3和CloudFront路径区分大小写)、是否有多余/缺失的斜杠
- CloudFront域名
XXXXXXXXXX.cloudfront.net没有拼写错误 - 路径中的
standard/f7cecd92-5314-4263-9147-7cca3041e69d.png和S3中实际存储的对象路径完全匹配
3. 签名时间范围已失效
你的策略中设置了时间限制:
"DateLessThan": { "AWS:EpochTime": 1555021200 }, "DateGreaterThan": { "AWS:EpochTime": 1554848400 }
这两个时间戳对应的是2019年4月9日到4月11日的区间,如果当前时间不在这个范围内,签名URL会直接失效,返回Access Denied。请确认生成签名时设置的时间范围是否符合预期,或者当前时间是否在策略指定的区间内。
4. OAI(源访问身份)关联不匹配
虽然你已经配置了OAI,但需要验证:
- CloudFront分发的源设置中,选择的OAI的ARN和存储桶策略里的Principal ARN完全一致:
存储桶策略中的Principal是arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXXX,要确保这个ARN和分发配置里的OAI ARN完全匹配,没有字符错误 - 确认存储桶策略已经正确应用到目标S3存储桶,存储桶名称
bucket_name替换成了实际的存储桶名称,Resource字段arn:aws:s3:::bucket_name/*和arn:aws:s3:::bucket_name没有拼写错误
5. S3对象的ACL冲突
即使存储桶策略允许OAI访问,如果目标对象的ACL设置了拒绝访问(比如对象私有且未给OAI授权),也会导致Access Denied。可以:
- 查看该S3对象的ACL,确认是否允许对应的CloudFront OAI拥有读取权限
- 或者确保存储桶策略的优先级覆盖了对象ACL的限制(桶级策略通常优先级更高,但需确认没有冲突配置)
快速验证步骤
- 先尝试用CloudFront OAI直接访问S3对象,确认OAI拥有读取权限
- 按照正确格式重新生成签名URL(用
&分隔参数),再次测试访问
内容的提问来源于stack exchange,提问作者veilupearl
相关产品推荐
相关产品推荐

