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

使用Cognito的Amplify Flutter下载S3文件时出现403 Access Denied错误

解决步骤
  • 校验下载请求的访问级别配置
    受保护存储内容对应的访问级别为StorageAccessLevel.protected,未显式指定时Amplify默认使用private级别会触发403错误,正确的请求示例如下:
    try {
      final downloadResult = await Amplify.Storage.downloadFile(
        key: "目标文件的S3键名",
        localFile: File("本地存储路径"),
        options: const StorageDownloadFileOptions(
          accessLevel: StorageAccessLevel.protected,
          // 跨用户访问其他用户上传的受保护内容时需额外指定
          // targetIdentityId: "文件上传者的Cognito身份ID"
        ),
      ).result;
    } on StorageException catch (e) {
      print("下载失败:${e.message}");
    }
    
  • 修正权限授予对象
    你当前配置的IAM用户权限不生效:Amplify Storage默认通过Cognito身份池关联的IAM角色(分为认证用户角色、未认证用户角色两类)请求S3资源,权限需要绑定到对应Cognito角色而非独立IAM用户。
    对应角色需要添加的S3权限示例如下,需替换为你自己的存储桶名:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": ["arn:aws:s3:::你的存储桶名称/protected/*"]
        }
      ]
    }
    
    如果存储桶开启了KMS服务端加密,还需要额外给对应角色添加kms:Decrypt权限。
  • 校验S3存储桶配置
    检查存储桶策略是否存在显式拒绝Cognito角色访问的规则,确认存储桶的公共访问配置没有拦截合法的身份池请求。
  • 同步配置并清除过期凭证
    执行amplify push将本地的Amplify配置同步到云端,登出当前账号并清除应用缓存后重新登录测试,排除本地缓存的过期身份凭证导致的鉴权失败。

内容的提问来源于stack exchange,提问作者Sirajudheen Abdul Rahiman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:06:03