![](/img/trans.png)
[英]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.