ios - 如何允许来宾 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 configure
:AdministratorAccess
AmazonS3ReadOnlyAccess
我错过了什么?
解决方案
Amplify 使用用户创建的 viaamplify configure
来配置资源 - 您已将策略分配给您AdministratorAccess
的AmazonS3ReadOnlyAccess
Amplify 用户,但未分配给未经身份验证的用户角色,这是 Amplify 来宾用户使用的。
首先找到未经身份验证的角色的角色名称,方法是登录Amazon Cognito 控制台,选择Manage Identity Pools,然后选择 Amplify 创建的身份池。
单击页面右上角的编辑身份池,您将看到类似于下图的页面,其中包含一个标记为Unauthenticated role的下拉框:
当前用于来宾/未经身份验证的用户的角色将在下拉列表中。
在 IAM 控制台中查找角色名称,然后将 AWS 托管AmazonS3ReadOnlyAccess
策略附加到该角色。
您的未经身份验证的用户现在应该有权从 S3 存储桶中读取文件,并且您应该不再收到403 Access Denied
错误消息。
推荐阅读
- r - 无法获取 cookie?
- windows - 访问被拒绝执行编译的程序
- shell - 无法通过 Jenkins 作业使用 openssl 生成证书
- ios - iOS:使用 AVAssetExportSession 覆盖(混合)两个视频文件
- python-3.x - 线性回归的预测非常不准确
- html - 是否可以调用另一个定义了 SVG 的 HTML 文档,并将其用作另一个 HTML 文档中的 SVG?
- linux - 您如何打开 FTDI 串行端口 ttyUSBx 以便我们可以在其上运行 2 个应用程序?
- android - Androidx Fragments 中的 getViewLifeCycleOwner() vs 'this' vs this.getActivity()
- caching - 限制清漆过程的内存
- assert - 断言运算符在各种变量之前和之后进行计数