AWS S3 ListMultipartUploads:拒绝访问

Posted

技术标签:

【中文标题】AWS S3 ListMultipartUploads:拒绝访问【英文标题】:AWS S3 ListMultipartUploads : access denied 【发布时间】:2017-12-24 07:22:41 【问题描述】:

我已关注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:ListBuckets3:prefix 一起使用,但在将s3:ListBucketMultipartUploadss3:prefix 一起使用时,我的所有实验都失败了——这只是通过直接指定前缀而不是使用@987654329 @。文档表明它应该可以工作,但我无法实现。 【参考方案1】:

我在您的前缀语句中看到一个错误,

必须是数组,

"s3:prefix": ["$myidentityprovider:userId/*"]


"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/*"]
            
        
    
]

【讨论】:

以上是关于AWS S3 ListMultipartUploads:拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3

使用默认 aws/S3 KMS 密钥对解密对象进行跨账户访问

json AWS S3 Bucket策略#aws#aws-s3

AWS Lambda S3 访问被拒绝

aws s3 存储桶策略

我如何通过AWS SNS设置有关上传事件的AWS S3?