【发布时间】:2025-12-08 10:15:01
【问题描述】:
我已关注this blog,以便使用 Web Identity Federation 设置我的 AWS IAM 和 S3 账户。我能够很好地验证和接收会话凭据和令牌。我还可以下载和上传对象。但是,我得到:
访问被拒绝
关于以下 ListMultipartUploads 请求:
var request = new ListMultipartUploadsRequest()
{
BucketName = bucketName,
Prefix = $"{UserId}/"
};
var response = await s3Client.ListMultipartUploadsAsync(request);
附加到我的 IAM 角色的访问策略是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::mybucket/${myidentityprovider:userId}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::mybucket"
],
"Condition": {
"StringLike": {
"s3:prefix": "${myidentityprovider:userId}/"
}
}
}
]
}
如您所见,我拥有“s3:ListBucketMultipartUploads”权限,因此用户应该能够在他们的存储桶上执行 ListMultiPartUploads。我做错了什么?
【问题讨论】:
-
也许尝试不带结尾斜杠的前缀? (基于阅读Allow a user to get a list of objects in a bucket according to a specific prefix)
-
我试过不带前缀斜杠,但仍然返回拒绝访问。
-
去掉前缀条件能正常工作吗?
-
是的,但显然我希望用户只能列出他们已经完成的分段上传。
-
虽然我可以成功地将
s3:ListBucket与s3:prefix一起使用,但在将s3:ListBucketMultipartUploads与s3:prefix一起使用时,我的所有实验都失败了——这只是通过直接指定前缀而不是使用@987654329 @。文档表明它应该可以工作,但我无法实现。
标签: c# amazon-web-services amazon-s3 aws-sdk aws-sdk-net