我正在实现一个支持群聊的 iOS 应用程序,用户可以在其中添加照片和其他文件。
决定使用 AWS S3 作为存储后端,使用 Cognito Federated Identities 对上传/下载进行身份验证 - 向/从 S3 抽取数据,而不是通过我们的服务器。
至今
我的实现允许用户/身份上传和下载到他们自己在 S3 存储桶上的文件夹(示例策略arn:aws:s3:::mybucket/users/${cognito-identity.amazonaws.com:sub}/*
变量是 identityID/user_id)。
然而
我一直无法找到一种安全方式,只允许群聊中的参与者从 S3 上的群聊文件夹上传/下载。
有任何想法吗?
关于可能流程的一些想法:
- 首先,用户将照片上传到自己的文件夹,[我知道怎么做]
- 然后,系统将照片复制到群聊的文件夹中[我知道怎么做]
- 将群聊文件夹与参与者的身份相关联[不确定如何- 可能有数千个群组和参与者]
- 编辑 1:正如@MyStackRunnethOver 所建议的那样,可以使用一个 IAM 角色/凭据来管理用户(属于所述组)的所有上传/下载请求[如果凭据受损,则存在重大安全问题]。
- 编辑 1:可以使用预签名 URL:文件上传到用户自己的文件夹,预签名 URL 存储在群聊条目中 [尽管最大url-life 7 天]
- 客户端缓存有助于参与者频繁加入/离开组
- 需要服务器端计划作业来更新过期的预签名 URL
任何赞扬/想法表示赞赏