簡體   English   中英

適用於iOS的AWS開發工具包:無法列出S3存儲桶中的文件

[英]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存儲桶:

  1. 切換到您的IAM控制台並找到一個名為: xxxx_auth_yyy的角色 - auth子字符串是重要的部分,因為它將角色標識為經過身份驗證的用戶的角色。
  2. 使用此角色通過以下方式為經過身份驗證的用戶分配權
  3. 創建策略(策略 - >創建策略)以提供特定存儲桶所需的訪問權限。
  4. 將此策略“附加”到經過身份驗證的角色(角色 - > xxxx_auth_yyy - >附加策略)。
  5. 您的代碼現在應該能夠列出特定S3存儲桶中的文件。

示例策略(步驟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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM