繁体   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