Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 尝试从aws s3 bucket下载图片时拒绝访问_Swift_Xcode_Amazon Web Services_Amazon S3_Aws Sdk - Fatal编程技术网

Swift 尝试从aws s3 bucket下载图片时拒绝访问

Swift 尝试从aws s3 bucket下载图片时拒绝访问,swift,xcode,amazon-web-services,amazon-s3,aws-sdk,Swift,Xcode,Amazon Web Services,Amazon S3,Aws Sdk,我尝试使用AWSS3transferutility从aws s3 bucket下载照片,并在ios应用程序的imageView上显示它们,但是,当它给我一个拒绝访问错误时。我确信这个桶是向公众开放的,我建立了cognito,所以我不知道为什么会发生这种情况,有人有想法吗 func getPicture() { let tranferUtility = AWSS3TransferUtility.default() let expression = AWSS3Tran

我尝试使用AWSS3transferutility从aws s3 bucket下载照片,并在ios应用程序的imageView上显示它们,但是,当它给我一个拒绝访问错误时。我确信这个桶是向公众开放的,我建立了cognito,所以我不知道为什么会发生这种情况,有人有想法吗

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 “(null)”UserInfo={Server=AmazonS3,错误={ 代码=访问被拒绝; HostId=“GHIlY6U4nxxqKQ/Bn8lf3FWjFZZmVhxn3DDjc8YUZY2gkguT6qdqhS54PL85AL7KaSU0Q9gSckw=”; Message=“访问被拒绝”; RequestId=EA34AC42C00AE399;”


一些操作在bucket上执行,而其他操作在object级别执行

替换此行:

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

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

这将允许访问对象。

好的,我遇到了同样的错误,一直在想为什么我应该公开存储桶来避免这个错误。然后我意识到了一种愚蠢的错误,我犯了。当我通过Amplify CLI($Amplify add storage)添加存储时,有一个选项要求“Auth users”或“Auth&Guest”。之后有如下选择

  • 创建/更新
  • 阅读
  • 删除
  • 我只选择了选项1,创建/更新,假设所有能够创建的用户仍然能够看到。这是一个错误。我需要同时选择选项1和选项2。哪种类型现在才有意义

    我不得不删除我的存储并添加回去调试这个。然后它开始工作下载和上传也。请记住,公共,受保护的文件夹也很重要


    希望这对有同样问题的人有所帮助。

    你能在浏览器中查看照片吗?403始终是一个权限错误,即使bucket是公共的,但如果请求来自IAM角色(假设),该角色应该有S3权限。@Don yea我可以在浏览器中查看它很好“bucket是公共的”是什么意思“?您可以编辑您的问题以向我们显示桶策略吗?@JohnRotenstein我的桶策略为空,但我没有阻止公众访问。我需要桶策略吗?”?