Swift 尝试从aws s3 bucket下载图片时拒绝访问
我尝试使用AWSS3transferutility从aws s3 bucket下载照片,并在ios应用程序的imageView上显示它们,但是,当它给我一个拒绝访问错误时。我确信这个桶是向公众开放的,我建立了cognito,所以我不知道为什么会发生这种情况,有人有想法吗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
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”。之后有如下选择
希望这对有同样问题的人有所帮助。你能在浏览器中查看照片吗?403始终是一个权限错误,即使bucket是公共的,但如果请求来自IAM角色(假设),该角色应该有S3权限。@Don yea我可以在浏览器中查看它很好“bucket是公共的”是什么意思“?您可以编辑您的问题以向我们显示桶策略吗?@JohnRotenstein我的桶策略为空,但我没有阻止公众访问。我需要桶策略吗?”?