如何允许访客 Amplify 用户使用 AWS Amplify iOS SDK 从我的 S3 存储桶下载文件?

How can I allow guest Amplify users to download files from my S3 bucket using the AWS Amplify iOS SDK?

我已经使用 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 configure 设置的用户附加了 AdministratorAccessAmazonS3ReadOnlyAccess 策略:

我错过了什么?

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


首先找到未经身份验证的角色的角色名称,登录 Amazon Cognito console,选择 管理身份池 ,然后 select 身份由 Amplify 创建的池。

点击页面右上角的编辑身份池,您将看到一个类似于下图的页面,其中有一个下拉框标记为未经身份验证的角色:

guest/unauthenticated 用户当前使用的角色将在下拉列表中。

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


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