无法通过S3 Access Point向AWS S3存储桶上传文件的问题排查
问题
我正在学习并测试S3 Access Point的工作机制,尝试让仅拥有S3存储桶只读权限的IAM用户通过S3 Access Point向存储桶上传文件,但未达到预期效果。操作步骤如下:
- 创建了名为
basic的IAM用户,通过用户组附加了AWS托管策略AmazonS3ReadOnlyAccess,该用户组仅包含此策略。 - 在S3控制台创建了名为
my-dummy-bucket的存储桶,随后为该存储桶创建了名为my-first-access-point的S3 Access Point,该接入点不在VPC内,可通过互联网访问。 - 创建接入点时使用了如下策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1234567890:user/basic" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:eu-west-2:1234567890:accesspoint/my-first-access-point/object/basic-user-directory/*" } ] }
该策略意图允许basic用户向basic-user-directory上传文件/对象。
- 用
basic用户登录AWS控制台,进入S3控制台,能看到接入点和存储桶,尝试通过接入点向basic-user-directory上传文件时出现错误。
请问我的配置中缺少了什么,该如何修复?
问题分析与修复方案
你的配置存在两个关键缺失:
1. IAM用户缺少对S3 Access Point的基础操作权限
AmazonS3ReadOnlyAccess托管策略仅授权用户对S3存储桶执行只读操作,未包含访问S3 Access Point本身的必要权限(比如列出接入点对象、获取接入点信息、执行PutObject操作等)。AWS权限遵循"默认拒绝"原则,即使接入点策略允许操作,用户自身没有显式权限的话也无法执行。
需要给basic用户所在的用户组添加一条自定义IAM策略,补充对该接入点的权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetAccessPoint", "s3:ListAccessPoints", "s3:ListObjectsV2", "s3:PutObject" ], "Resource": [ "arn:aws:s3:eu-west-2:1234567890:accesspoint/my-first-access-point", "arn:aws:s3:eu-west-2:1234567890:accesspoint/my-first-access-point/object/basic-user-directory/*" ] } ] }
其中ListObjectsV2是控制台操作必需的权限,否则用户无法在控制台查看接入点内的目录结构;PutObject则是显式授权用户执行上传操作。
2. 接入点策略缺少对目录本身的权限(可选但推荐)
当前接入点策略的Resource仅指向basic-user-directory/*,如果用户需要通过控制台自动创建该目录(上传文件时触发),可能会因权限不足失败。可以修改接入点策略的Resource范围,包含目录本身:
"Resource": [ "arn:aws:s3:eu-west-2:1234567890:accesspoint/my-first-access-point/object/basic-user-directory", "arn:aws:s3:eu-west-2:1234567890:accesspoint/my-first-access-point/object/basic-user-directory/*" ]
修复步骤总结
- 给
basic用户所在用户组添加上述自定义IAM策略,补充对接入点的操作权限。 - (可选)调整接入点策略的Resource范围,包含目录本身。
- 重新用
basic用户登录控制台,尝试上传文件。
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

