You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单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/*"
        }
      }
    }
  ]
}

关键验证步骤

  1. 尝试访问非files前缀的资源(如env1/docs/test.pdf),应返回403 Forbidden
  2. 访问合法路径(如env1/files/images/image1.jpg或files/images/image1.jpg),应正常返回资源

内容的提问来源于stack exchange,提问作者Maulik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:25:23