[英]Unable to upload files into S3 bucket through iOS 11.4.1 (AWS-IOS-SDK-2.6.24)
[英]AWS SDK for iOS: unable to list the files in an S3 bucket
我按照这里的第一步来配置凭据和S3存储桶。 然后,在我的代码中,我有:
func setupCredentialsProvider() {
let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1, identityPoolId:identityPoolIdStr)
let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
}
func listObjects() {
let s3 = AWSS3.defaultS3()
let listObjectsRequest = AWSS3ListObjectsRequest()
listObjectsRequest.bucket = S3BucketName
s3.listObjects(listObjectsRequest).continueWithBlock { (task) -> AnyObject! in
if let error = task.error {
print("listObjects failed: [\(error)]")
}
if let exception = task.exception {
print("listObjects failed: [\(exception)]")
}
}
当我运行应用程序并listObjects()
,我收到此错误:
listObjects failed:[Error Domain = com.amazonaws.AWSServiceErrorDomain Code = 11“(null)”UserInfo = {HostId =,Message = Access Denied,Code = AccessDenied,RequestId =}]
我错过了什么?
如果它与我遇到的问题类似,那么经过身份验证的Cognito用户无权访问特定的S3存储桶。 阅读理解Amazon Cognito身份验证第3部分:角色和策略为我提供了我需要的线索,具体来说:
通过Cognito控制台创建标识池时,它将为您创建两个角色,一个用于经过身份验证的用户,另一个用于未经身份验证的用户,但您可以访问IAM控制台并创建更多角色而不仅仅是这些角色。 您还可以修改现有角色以添加对其他服务(如Amazon S3或Amazon DynamoDB)的支持,具体取决于您的用例。
所以我决定为经过身份验证的用户修改创建的角色,以允许访问我的S3存储桶:
xxxx_auth_yyy
的角色 - auth
子字符串是重要的部分,因为它将角色标识为经过身份验证的用户的角色。 示例策略(步骤3):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::BUCKET_NAME*"
]
}
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.