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

如何通过CloudFront获取S3存储桶指定前缀的对象列表?

通过CloudFront列出S3指定前缀对象的解决方案

问题描述

我有一个以S3存储桶作为源的CloudFront分发,尝试列出桶内某个子目录(前缀)的内容,但返回的却是整个存储桶的全部内容。

限制与当前状态

  • 必须直接向CloudFront域名发起HTTPS请求(不能使用AWS CLI或AWS S3 API)。
  • 已通过签名Cookie完成身份验证,可正常上传/下载对象、列出全量桶内容,但无法筛选指定前缀。
  • 存储桶已授权的权限:
    • 桶级:s3:ListBucket、s3:ListBucketMultipartUploads
    • 对象级:s3:GetObject、s3:GetObjectAttributes、s3:GetObjectVersion、s3:GetObjectTagging、s3:GetObjectVersionTagging、s3:PutObject、s3:PutObjectVersionTagging、s3:PutObjectTagging、s3:DeleteObject、s3:DeleteObjectTagging、s3:DeleteObjectVersionTagging、s3:AbortMultipartUpload、s3:ListMultipartUploadParts

已尝试的无效操作

  1. 带prefix参数的请求返回全量内容:
import requests
cookies = {...} # 验证有效的CloudFront签名Cookie
res = requests.get("https://example.cloudfront.net/?prefix=myprefix/", cookies=cookies)

返回的XML中<Prefix/>字段为空,包含整个桶的对象列表。

  1. S3 API风格参数无效果:
params = {"list-type": "2", "delimiter": "/", "prefix": "myprefix"}
res = requests.get("https://example.cloudfront.net", cookies=cookies, params=params)

仍返回全量桶内容。

  1. 直接请求前缀路径返回404:
res = requests.get("https://example.cloudfront.net/myprefix/", cookies=cookies)

解决方法

1. 检查CloudFront行为的查询字符串转发设置

CloudFront默认可能会丢弃部分查询字符串,导致S3无法接收到prefix参数。需修改对应行为的查询字符串转发和缓存配置:

  • 选择转发所有查询字符串,基于所有查询字符串缓存,或至少添加prefix、delimiter、marker等ListBucket所需参数到转发选定的查询字符串列表中。

2. 使用正确的请求格式

严格按照S3 ListBucket API的参数格式构造请求,确保参数通过查询字符串传递,请求路径为CloudFront域名根路径:

import requests
cookies = {...} # 已验证的签名Cookie
params = {
    "prefix": "myprefix/",  # 保留末尾斜杠,匹配S3前缀的目录式命名
    "delimiter": "/"        # 可选,用于返回前缀下的直接子对象和子前缀,模拟目录结构
}
res = requests.get("https://example.cloudfront.net/", cookies=cookies, params=params)

此时返回的XML中<Prefix>字段会显示指定的前缀,内容仅包含匹配该前缀的对象。

3. 确认存储桶权限配置

确保S3:ListBucket权限的资源为桶级ARN(arn:aws:s3:::mybucket),而非对象级路径。如果策略中添加了Condition限制前缀,需保证请求的前缀符合条件。

4. 关于前缀路径404的说明

直接请求https://example.cloudfront.net/myprefix/返回404是因为S3不会自动为前缀生成索引文档,除非手动创建名为myprefix/的空对象并配置CloudFront索引文档,但这种方式无法返回对象列表,仅能返回自定义索引内容,不适合用于列表查询。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:41