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

如何使用aws s3api为S3存储桶指定路径下所有子文件夹应用ACL策略

解决方案

你可以通过组合S3列表命令递归提取目标路径下所有文件夹前缀,再逐一对每个前缀执行ACL设置命令实现需求,具体操作如下:


前置准备

先把命令中涉及的变量替换为你自己的实际值:

  • BUCKET_NAME:你的S3存储桶名称
  • TARGET_PREFIX:你要批量设置ACL的根路径,例如public/resources/
  • MYPROFILE:你本地配置的AWS CLI凭证配置名

批量执行命令

Linux/macOS 环境(Bash)

直接运行以下组合命令即可递归给所有子文件夹设置ACL:

aws s3 ls s3://BUCKET_NAME/TARGET_PREFIX --recursive --profile MYPROFILE | awk '{print $4}' | grep '/$' | while read prefix; do
  aws s3api put-object-acl --bucket BUCKET_NAME --key "$prefix" --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers --profile MYPROFILE
done

命令逻辑说明:

  • aws s3 ls --recursive:递归列出目标路径下所有对象和前缀
  • awk '{print $4}':提取输出中的路径字段
  • grep '/$':过滤出所有以/结尾的文件夹前缀,排除实际文件
  • 循环遍历所有匹配的前缀,逐行执行ACL设置命令

Windows 环境(PowerShell)

运行以下PowerShell命令:

aws s3 ls s3://BUCKET_NAME/TARGET_PREFIX --recursive --profile MYPROFILE | ForEach-Object {
  $prefix = ($_ -split '\s+',4)[3]
  if ($prefix.EndsWith('/')) {
    aws s3api put-object-acl --bucket BUCKET_NAME --key $prefix --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers --profile MYPROFILE
  }
}

注意事项

  • 如果你需要同时给路径下的所有文件也设置相同ACL,去掉命令中过滤文件夹的grep '/$'(Bash)或if ($prefix.EndsWith('/'))判断(PowerShell)即可
  • 操作前可以先验证匹配范围:把循环内的put-object-acl命令替换为echo $prefix,确认路径无误后再执行实际设置
  • S3是对象存储没有传统文件夹的概念,所谓的文件夹本质是带/后缀的空对象,单独设置文件夹ACL不会影响已有文件的权限,如果你需要新上传的对象自动继承公开读权限,建议搭配存储桶策略使用效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:54:03