如何允许访客 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
设置的用户附加了 AdministratorAccess
和 AmazonS3ReadOnlyAccess
策略:
我错过了什么?
Amplify 使用通过 amplify configure
创建的用户来配置资源 - 您已将 AdministratorAccess
和 AmazonS3ReadOnlyAccess
策略分配给您的 Amplify 用户,但未分配给 未经身份验证的用户 角色,Amplify 来宾用户使用的角色。
首先找到未经身份验证的角色的角色名称,登录 Amazon Cognito console,选择 管理身份池 ,然后 select 身份由 Amplify 创建的池。
点击页面右上角的编辑身份池,您将看到一个类似于下图的页面,其中有一个下拉框标记为未经身份验证的角色:
guest/unauthenticated 用户当前使用的角色将在下拉列表中。
在 IAM 控制台中查找角色名称,然后将 AWS 管理的 AmazonS3ReadOnlyAccess
策略附加到该角色。
您未经身份验证的用户现在应该有权从 S3 存储桶中读取文件,您应该不会再收到 403 Access Denied
错误。
我已经使用 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 使用通过 amplify configure
创建的用户来配置资源 - 您已将 AdministratorAccess
和 AmazonS3ReadOnlyAccess
策略分配给您的 Amplify 用户,但未分配给 未经身份验证的用户 角色,Amplify 来宾用户使用的角色。
首先找到未经身份验证的角色的角色名称,登录 Amazon Cognito console,选择 管理身份池 ,然后 select 身份由 Amplify 创建的池。
点击页面右上角的编辑身份池,您将看到一个类似于下图的页面,其中有一个下拉框标记为未经身份验证的角色:
guest/unauthenticated 用户当前使用的角色将在下拉列表中。
在 IAM 控制台中查找角色名称,然后将 AWS 管理的 AmazonS3ReadOnlyAccess
策略附加到该角色。
您未经身份验证的用户现在应该有权从 S3 存储桶中读取文件,您应该不会再收到 403 Access Denied
错误。