CloudFront路径模式配置需求:S3用户目录文件权限差异化设置
解决CloudFront针对S3用户目录的访问控制配置问题
我来帮你搞定这个CloudFront路径规则的配置问题,你之前遇到的问题大概率是路径模式写法不对,或者行为优先级没理清楚,咱们一步步来配置:
核心逻辑前提
CloudFront的行为规则是从上到下匹配的,所以一定要把「公开访问」的规则放在「默认私有」规则的前面,不然默认规则会先拦截所有请求,公开规则就失效了。另外,记得用CloudFront的Origin Access Identity(OAI)来访问S3,不要给S3桶开公开权限,所有访问都通过CloudFront走,这样权限控制更安全。
第一步:创建「用户目录下图片公开访问」的行为
这个行为要匹配所有用户根目录下的.jpg和.png文件:
- 路径模式分别设置为
/*/*.jpg和/*/*.png(CloudFront不支持/*.{jpg,png}这种扩展写法,所以得创建两个独立行为,分开写更清晰) - 关键配置:在「Restrict Viewer Access (Use Signed URLs or Signed Cookies)」选项里选择 No,允许公开访问
- 确保这个行为的源指向你的S3存储桶,并且已经关联了正确的OAI
第二步:创建「默认私有访问」的行为
这是兜底规则,匹配所有未被前面行为覆盖的请求:
- 路径模式设置为
*(这是CloudFront的默认路径模式,匹配所有剩余请求) - 关键配置:在「Restrict Viewer Access」选项里选择 Yes,然后配置你的信任签名者(可以用CloudFront密钥对或者密钥组,根据你的签名URL生成方式来选)
- 其他配置保持默认即可
必须注意的S3桶策略配置
为了让CloudFront能正常拉取S3资源,你的S3桶策略要给OAI授予读取权限,示例策略如下(替换成你的OARN和桶名):
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity YOUR-OAI-ID" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-bucket-name/*" } ] }
不要给S3桶设置任何公开访问权限,所有访问都通过CloudFront的行为规则来控制。
测试验证
配置完成后,你可以做两个测试:
- 访问用户目录下的图片:比如
https://your-cloudfront-domain/1233233/avatar.jpg,应该能直接打开,不需要签名URL - 访问用户目录下的子文件/子目录:比如
https://your-cloudfront-domain/1233233/docs/invoice.pdf,会返回403 Forbidden,只有用签名URL才能正常访问
内容的提问来源于stack exchange,提问作者Harshit
相关产品推荐
相关产品推荐

