为 AWS S3 存储桶中的某个特定目录单独设置访问权限,使其能够被公开下载访问

实现思路

要实现 S3 目录级别的公开访问,核心是通过 Bucket Policy(存储桶策略) 来精确控制权限,而不是直接开放整个存储桶。策略会指定允许匿名用户(所有互联网用户)对特定前缀(即目录)下的所有对象执行 s3:GetObject 操作(下载操作)。

具体操作步骤

1. 编写精准的 Bucket Policy

以下是可以直接使用的策略模板,你需要替换其中的占位符:
  • your-bucket-name:你的 S3 存储桶名称
  • your-target-directory/:你要公开的目录路径(结尾必须加 /,表示该目录及所有子文件 / 子目录)
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForSpecificDirectory",
            "Effect": "Allow",
            "Principal": "*", // 表示所有用户(匿名用户)
            "Action": "s3:GetObject", // 允许下载操作
            "Resource": "arn:aws:s3:::your-bucket-name/your-target-directory/*" // 限定目录下的所有文件
        }
    ]
}

2. 应用 Bucket Policy 的操作步骤

方式 1:通过 AWS 控制台设置
  1. 登录 AWS 管理控制台,进入 S3 服务。
  2. 选择你的目标存储桶,点击 权限(Permissions) 标签。
  3. 找到 Bucket policy 选项,点击 编辑(Edit)
  4. 将上述模板替换占位符后粘贴进去,点击 保存更改(Save changes)
  5. (可选)验证:进入该目录,点击某个文件的 对象操作(Actions)查看对象 URL(View object URL),在浏览器中打开该 URL,若能直接下载 / 查看则配置成功。
方式 2:通过 AWS CLI 设置(适合批量 / 自动化场景)
先将上述策略保存为 bucket-policy.json 文件,然后执行以下命令:
# 替换占位符后执行
aws s3api put-bucket-policy --bucket your-bucket-name --policy file://bucket-policy.json

3. 注意事项(避坑关键)

  1. 关闭存储桶的 “Block public access” 限制
    • 进入存储桶的 权限(Permissions)Block public access (bucket settings) → 点击 编辑(Edit)
    • 取消勾选 Block public access to buckets and objects granted through new bucket policiesBlock public access to buckets and objects granted through any bucket policies(仅针对需要公开的存储桶),保存更改。
  2. 目录路径的写法
    • 若要公开 docs/download/ 目录,Resource 需写为 arn:aws:s3:::your-bucket-name/docs/download/** 表示该目录下所有文件)。
    • 不要遗漏结尾的 /*,否则仅匹配目录本身(S3 中目录不是实际对象,无意义)。
  3. 最小权限原则
    • 仅开放 s3:GetObject 操作,不要开放 s3:ListBucket(避免匿名用户列出目录下的所有文件)。
    • 仅限定需要公开的目录,不要开放整个存储桶。

验证是否生效

  1. 复制目录下某个文件的 对象 URL(格式:https://your-bucket-name.s3.REGION.amazonaws.com/your-target-directory/filename.txt)。
  2. 在浏览器中打开该 URL,若能直接下载 / 查看文件,说明权限配置成功。
  3. 尝试访问存储桶中其他非公开目录的文件,应返回 AccessDenied 错误(确保权限仅作用于目标目录)。

总结

  1. 核心是通过 Bucket Policy 精准限定匿名用户仅能对指定目录执行 s3:GetObject 操作,实现公开下载。
  2. 必须调整存储桶的 “Block public access” 配置,否则策略会被拦截,无法生效。
  3. 遵循最小权限原则,仅开放必要的目录和操作,避免安全风险。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/319316.html

(0)
上一篇 2026年2月5日 10:30
下一篇 2021年7月15日 23:14

发表回复

登录后才能评论