首页 > 解决方案 > 如何使用 AWS 移动中心创建的 s3 存储桶将文件从 Swift 上传到受保护的 s3 存储桶?

问题描述

我有一个 AWS 移动集线器项目,正在尝试将文件上传到自动生成的存储桶的受保护文件夹中。

S3 存储桶

在我的用户通过身份验证后,我目前正在使用 AWSS3TransferUtility 上传文件。我查看了创建时留在文件夹中的文档和网站。他们已设置权限以以不同方式保护不同文件夹中的数据。我能够毫无问题地将文件上传到上传文件夹。然后我尝试上传到私有和受保护的文件夹,并从 API 调用中收到授权的 403。我通过 IAM 检查了存储桶的权限。

来自 IAM 的示例

桶名 | 字符串如 | appname-userfiles-mobilehub-1213213213, ObjectPath | 字符串如 | 私人的/${cognito-identity.amazonaws.com:sub}/*

所以我推断上传的密钥必须在密钥中包含认知身份。如何获取当前用户的认知身份,使其匹配并允许我将文件上传到 S3,同时确保其数据保护完整性?

标签: swiftamazon-s3amazon-iamaws-mobilehub

解决方案


我有 AWSIdentifyManager 来提取用户 ID。

// start of upload code
let transferUtility = AWSS3TransferUtility.default()
let user = AWSIdentityManager.default().identityId
let newKey = "protected/"+user!+"/"+fileURL.lastPathComponent

 transferUtility.uploadData(
     data,
     bucket: "appbucket-name",
     key: newKey,
      contentType: "text/plain",
 ...
 //rest of code from the docs

推荐阅读