首页 > 解决方案 > 尝试从 aws s3 存储桶下载图片时访问被拒绝

问题描述

我尝试使用 AWSS3transferutility 从 aws s3 存储桶下载照片并将它们显示在 ios 应用程序的 imageView 上,但是,当它给我一个拒绝访问错误时。我确定存储桶对公众开放并且我设置了认知,所以我不知道为什么会发生这种情况有人知道吗?

func getPicture() {
        let tranferUtility = AWSS3TransferUtility.default()
        let expression = AWSS3TransferUtilityDownloadExpression()

        tranferUtility.downloadData(fromBucket: bucket, key: self.currentQuestionData!._userId!, expression: expression){ (task, url, data, error) in
            if error != nil{
                print(error!)
            }
            DispatchQueue.main.async(execute: {
                self.imageView.image = UIImage(data: data!)
            })

        }
    }


//bucket policy
{
    "Id": "Policy1562706569188",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1562706565258",
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::schooled-deployments-mobilehub-969166170",
            "Principal": "*"
        }
    ]
}

控制台中显示的错误信息是

“错误域 = com.amazonaws.AWSS3TransferUtilityErrorDomain 代码 = 2 “(空)” UserInfo = {服务器 = AmazonS3,错误 = { 代码 = AccessDenied;HostId = “GHIlY6U4nxxqKQ/Bn8lf3FWjFZZmVhxn3DDjc8YUZY2gkguT6qdqhS54PL85AL7KaSU0Q9gAAE399 =”;消息 =“4ACSU0Q9gAAE39EA” ;"

标签: swiftxcodeamazon-web-servicesamazon-s3aws-sdk

解决方案


一些操作在上执行,而其他操作在对象级别执行。

替换这一行:

"Resource": "arn:aws:s3:::schooled-deployments-mobilehub-969166170",

有了这个:

"Resource": [
    "arn:aws:s3:::schooled-deployments-mobilehub-969166170",
    "arn:aws:s3:::schooled-deployments-mobilehub-969166170/*"
]

这将允许访问对象。


推荐阅读