AWS S3桶策略中ARN末尾添加/*的作用及文件上传权限问题咨询
S3桶策略中ARN末尾
/*的作用及上传权限解析 这是个非常典型的S3权限配置误区,我来给你拆解清楚背后的逻辑:
1. S3 ARN的两种核心层级
S3的ARN(亚马逊资源名称)在权限控制里分为两个关键层级:
- 桶级ARN:
arn:aws:s3:::sample123
这个ARN指向的是存储桶本身,对应的是对桶的整体操作,比如:- 创建/删除存储桶
- 修改桶的配置(CORS、生命周期、版本规则等)
- 列出桶内的对象(
s3:ListBucket操作)
- 对象级ARN:
arn:aws:s3:::sample123/*
这个ARN指向的是桶内所有的对象(包括未来要上传的新对象),对应的是针对对象的操作,比如:- 上传文件(
s3:PutObject) - 下载文件(
s3:GetObject) - 删除/修改对象(
s3:DeleteObject、s3:PutObjectAcl等)
- 上传文件(
2. 你的权限问题根源
你提到已经给用户授予了“存储桶的全部权限”,但最初只配置了桶级ARN作为资源:
- 此时用户能执行的是桶级操作(比如查看桶里的文件列表),但上传文件属于
PutObject,是对象级操作——这个操作的权限目标是桶内的对象,而非桶本身,所以桶级ARN的权限覆盖不到这个操作,导致上传失败。 - 当你把资源改为包含
arn:aws:s3:::sample123/*的数组后,对象级操作的权限就被明确赋予了,用户自然就能正常上传文件了。
3. 关键注意点:Action与Resource的对应关系
S3的权限策略里,不同的操作必须对应正确层级的ARN:
- 如果你的策略里包含
s3:ListBucket,资源必须指定桶级ARN - 如果包含
s3:PutObject/s3:GetObject等对象操作,资源必须指定对象级ARN(带/*) - 很多时候会同时包含两种ARN,这样既能覆盖桶的管理操作,也能覆盖对象的读写操作
内容的提问来源于stack exchange,提问作者Aravind Babu Konda
相关产品推荐
相关产品推荐

