You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS Amplify iOS SDK允许访客从S3存储桶下载文件

403错误代表S3资源访问请求被权限规则拒绝,你本地执行amplify configure创建的用户权限,和iOS应用端访问S3时使用的权限完全独立,二者没有关联。以下是常见的遗漏配置:

  • Cognito身份池关联角色未配置S3访问权限
    Amplify Storage默认通过Cognito身份池关联的IAM角色来获取S3访问权限,你需要根据业务场景,给身份池对应的**已认证用户角色(Auth Role)或未认证用户角色(Unauth Role)**绑定s3:GetObject相关权限策略,比如AmazonS3ReadOnlyAccess,或者自定义包含对应桶资源访问权限的策略。
  • 存储桶策略限制了角色访问
    检查Amplify创建的S3存储桶的桶策略,确认是否允许对应Cognito角色对目标资源执行GetObject操作。默认Amplify生成的桶策略会限制仅允许身份池角色访问桶内public/、protected/、private/三类前缀下的资源,如果你手动修改过桶策略,或者上传的文件不在上述前缀路径下,都会触发403错误。
  • 下载时访问级别与文件存储级别不匹配
    Amplify Storage默认将文件分为三类访问级别:public、protected、private,不同级别对应存储桶内不同的前缀路径。如果你存储文件时用的是非public级别,下载时需要显式指定访问级别,示例代码如下:
operation = Amplify.Storage.downloadFile(
    key: key,
    local: url,
    // 非public级别需要显式指定
    options: .init(accessLevel: .private)
) { [weak self] progress in
    guard let _ = self else { return }
    print("progress: \(progress.fractionCompleted)")
} resultListener: { [weak self] result in
    guard let _ = self else { return }
    // 结果处理逻辑
}
  • 用户登录状态不匹配
    如果你只给已认证用户角色开放了S3权限,但应用端当前没有已登录的Cognito用户,会默认使用未认证角色访问资源,就会触发403。需要先完成用户登录流程,再执行下载操作。
  • 目标文件访问控制列表(ACL)配置错误
    如果你是手动通过S3控制台上传的目标文件,而非通过Amplify Storage接口上传,文件默认的ACL可能不允许Cognito角色访问。你可以修改文件ACL,给对应角色开放读权限,或者如果是公开访问的资源,直接设置为公共可读。
  • 项目配置文件不匹配
    检查iOS项目内的amplifyconfiguration.json文件,确认其中Storage模块配置的bucket名、region、Cognito身份池ID与你AWS账号下的实际资源一致,配置错误也会导致签名验证失败返回403。

内容的提问来源于stack exchange,提问作者Danny Bravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:39:03