单CloudFront分发适配多场景S3 Bucket files前缀访问配置问题
CloudFront 访问S3私有桶的路径限制配置方案
核心问题说明
之前配置的路径模式未生效,主要原因是行为优先级未正确设置或S3桶策略未做双向限制,需要结合CloudFront行为规则和S3桶策略实现精准管控。
场景1:单Bucket存储多环境数据(支持envX/files/...和根目录files/...)
1. CloudFront源配置
保持使用 {bucketname}.s3.{region}.amazonaws.com 作为源域名,源类型选择「S3桶」,不要选择S3静态网站托管模式(避免路径解析异常),并关联对应的CloudFront OAI(Origin Access Identity)。
2. CloudFront行为规则配置
添加两条行为规则,且优先级高于默认的/*行为(数字越小优先级越高):
- 第一条行为:路径模式设为
*/files/*,匹配所有环境目录下的files前缀资源(如env1/files/images/image1.jpg) - 第二条行为:路径模式设为
files/*,匹配根目录下的files前缀资源(如files/images/image1.jpg)
3. S3桶策略配置
通过桶策略仅允许CloudFront OAI访问指定前缀的资源,拒绝其他所有访问:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {你的OAI-ID}" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::{你的Bucket名}/*/files/*", "arn:aws:s3:::{你的Bucket名}/files/*" ] }, { "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{你的Bucket名}/*", "Condition": { "StringNotLike": { "s3:prefix": [ "*files/*", "files/*" ] } } } ] }
场景2:单Bucket存储单环境数据(仅根目录files/...)
1. CloudFront源配置
同场景1,使用S3桶域名,关联CloudFront OAI,不选静态网站托管。
2. CloudFront行为规则配置
添加一条行为规则,优先级高于默认行为:
- 路径模式设为
files/*,匹配根目录下所有files前缀资源
3. S3桶策略配置
仅允许CloudFront OAI访问files/*前缀资源:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity {你的OAI-ID}" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{你的Bucket名}/files/*" }, { "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{你的Bucket名}/*", "Condition": { "StringNotLike": { "s3:prefix": "files/*" } } } ] }
关键验证步骤
- 尝试访问非files前缀的资源(如
env1/docs/test.pdf),应返回403 Forbidden - 访问合法路径(如
env1/files/images/image1.jpg或files/images/image1.jpg),应正常返回资源
内容的提问来源于stack exchange,提问作者Maulik
相关产品推荐
相关产品推荐

