一组Cognito身份的S3对象访问控制

5
我们正在使用Cognito进行身份管理和S3进行对象存储来编写图像共享应用程序。当用户上传图像时,他们可以将图像权限设置为私有、公开或好友,其中好友是应用程序用户的一组。
当S3对象的访问控制仅为私有或公开时(例如使用预设ACL),设置方法似乎很清晰。但是,我们不清楚如何使对象仅对Cognito身份组中的一组身份可访问。
我们已经查看了标签、元数据和存储桶策略。标签和存储桶策略仅适用于存储桶级别,而我们希望它们适用于对象级别。元数据可以针对单个对象进行设置,但我认为我们无法在Cognito角色内设置元数据作为条件。我们能否找到一种方法来解决这个问题?
似乎问题的关键在于,我们无法创建Cognito身份的子组,并将这些组分配给资源的访问权限。
非常感谢您的任何帮助。
简而言之,我们如何使S3对象仅对Cognito身份组中的一组身份可访问?
1个回答

3

很遗憾,Cognito目前没有允许访问任意流动的ID组的方法。截至目前,唯一允许授予一组ID访问权限的方式为此博客所描述的方式,该方式需要将ID硬编码到角色中:

"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:12345678-dead-beef-cafe-123456790ab",
"cognito-identity.amazonaws.com:sub": [
        "us-east-1:12345678-1234-1234-1234-123456790ab",
        "us-east-1:98765432-1234-1234-1243-123456790ab"
] }

谢谢您能够迅速回复我。具体来说,我们唯一可以为S3对象提供组访问权限的方式是使用IAM组,这是正确的吗? - trisha
通过Cognito实现您想要的唯一方法是通过IAM角色(角色和组是两个不同的IAM实体)Cognito会扮演。要以您所描述的动态方式执行此操作,您需要使用一些额外的独立机制。 - Jeff Bailey
感谢你的帮助。 - trisha
1
一个可能的解决方案是使用同步数据。您可以将S3签名URL发送到某个后端,然后让该后端使用您的开发者凭据使用该签名URL更新用户与该签名URL相关联的朋友组的同步数据。私有数据可以由创建用户保留,而公共数据则可进行配置。 - Jeff Bailey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接