您的问题可以归结为:
我正在实现一个支持群组聊天的iOS应用,用户可以在其中添加照片和其他文件。
[确定为AWS S3作为存储后端,使用Cognito联合身份验证上载/下载-数据从S3泵送入S3 /从S3泵中提取,而不通过我们的服务器。
我的实现允许用户/身份将其上载并下载到S3存储桶上的自己的文件夹中(示例策略arn:aws:s3:::mybucket/users/${cognito-identity.amazonaws.com:sub}/*
变量为identityID / user_id)。
我无法找到一种安全的方式,该方式仅允许小组讨论中的参与者从S3上该小组讨论的文件夹中上载/下载。
关于可能的流程的一些想法:
任何赞扬/想法赞赏
我正在实现一个支持群组聊天的iOS应用,用户可以在其中添加照片和其他文件。决定将AWS S3作为存储后端,使用Cognito联合身份验证上载/ ...的身份。...] >>
您的问题可以归结为:
“鉴于用户是组的一部分,我如何基于组成员身份授予用户访问特定于组的子目录的权限?”
据我所见,您有两个选择:
为每个用户提供其所属成员的所有目录的“密钥”。这可能意味着向该用户添加每个组的权限,或向他们提供对每个组的新IAM角色的访问权限。这是“提出一种对S3具有细粒度权限的策略”。
不分发任何目录特定的键。相反,当用户请求某个目录时,请检查他们是否在该目录所属的组中。这是“围绕S3构建细粒度的数据存储系统”策略。
我建议使用后一种方法,因为您没有为每个用户或每个组分配IAM角色或凭据,而是给all
用户一个凭据:发出S3包装程序请求所需的凭据。如果要跟踪用户所在的组,则包装器所需要做的就是检查user -> groups
映射以查看是否应满足请求。前端可以使用相同的映射来美化UI:仅向用户显示从其所属组中进行上传/下载的选项。在这种情况下,我将映射映射为Dynamo表,只要用户注册,加入组,离开组或删除其帐户,该表就会更新。您可以通过用户的Cognito凭据来识别用户,其中包括用户特定的字段。您的问题可以归结为: