首页 > 解决方案 > 如何允许来宾 Amplify 用户使用 AWS Amplify iOS 开发工具包从我的 S3 存储桶下载文件?

问题描述

我使用 Amplify、CLI 控制台在 Amazon AWS 上设置了一个存储桶。我遵循了 Amplify iOS SDK 的文档,并在 iOS 应用程序上有以下设置代码:

do {
    try Amplify.add(plugin: AWSCognitoAuthPlugin())
    try Amplify.add(plugin: AWSS3StoragePlugin())
    try Amplify.configure()
} catch {
    print(message: "An error occurred setting up Amplify: \(error)")
}

当我尝试下载资源时,出现以下错误:

StorageError: The HTTP response status code is [403].

我正在使用以下代码:

var url: URL = //url to download to
var key: String = //key for the file as specified in S3

operation = Amplify.Storage.downloadFile(key: key,
                                         local: url) { [weak self] progress in
    guard let _ = self else { return }
    print(message: "progress: \(progress.fractionCompleted)")
} resultListener: { [weak self] result in
    guard let _ = self else { return }
    switch result {
    case .success:
        print(message: "success!")
    case .failure(let error):
        print(message: "error: \(error)")
    }
}

我通过设置的用户附加了政策amplify configureAdministratorAccessAmazonS3ReadOnlyAccess

在此处输入图像描述

我错过了什么?

标签: iosswiftamazon-web-servicesamazon-s3aws-amplify

解决方案


Amplify 使用用户创建的 viaamplify configure来配置资源 - 您已将策略分配给您AdministratorAccessAmazonS3ReadOnlyAccessAmplify 用户,但未分配给未经身份验证的用户角色,这是 Amplify 来宾用户使用的。


首先找到未经身份验证的角色的角色名称,方法是登录Amazon Cognito 控制台,选择Manage Identity Pools,然后选择 Amplify 创建的身份池。

单击页面右上角的编辑身份池,您将看到类似于下图的页面,其中包含一个标记为Unauthenticated role的下拉框:

在此处输入图像描述

当前用于来宾/未经身份验证的用户的角色将在下拉列表中。

在 IAM 控制台中查找角色名称,然后将 AWS 托管AmazonS3ReadOnlyAccess策略附加到该角色。


您的未经身份验证的用户现在应该有权从 S3 存储桶中读取文件,并且您应该不再收到403 Access Denied错误消息。


推荐阅读