我正在使用AWS Cognito用户池编写一个用户策略,该应用程序需要与以前使用IAM在S3上使用的旧的临时用户管理系统兼容,同时我们要使用Cognito过渡到更好的用户管理模型。
旧系统在组策略中使用arn:aws:s3:::[Our Bucket Name]/${aws:username}/*
仅允许用户使用其用户名访问对象。我以为在Cognito中使用相同的用户名将使我们能够使用重复的角色策略,以允许Cognito用户具有相同的访问权限,但是根据this,aws:username
对于Cognito不存在;仅有aws:userid
,如果我没看错,它实际上是随机生成的唯一字符串,与用户名无关,因此不能用于此目的。
是否还有其他方法可以通过角色策略为Cognito用户授予S3中基于相同名称的给定IAM用户名文件夹的访问权限?我能想到的唯一方法是基于每个用户制定自定义策略,但我希望将对我们现有用户创建系统的更改减到最少。
答案 0 :(得分:0)
简短答案:请勿将IAM与Cognito混合使用。编写一个app / service / api,以将对象提供给授权用户。
长答案:IAM适用于AWS的管理员或服务。请勿将其与Cognito混合使用。 Cognito用于存储令牌并将其提供给您的用户。您可能会问如何在bucket-name/user-test
到user-test
中提供对象:
在S3中存储用户访问权限:对于每个用户,都有一个存储桶access-rights/user-test
。它应该缔结用户权利;例如,您可以作为Json:
{ 用户名:字符串, access-bucket-name:字符串 }
附加服务:您可以使用身份验证服务来检查用户是否已通过身份验证(使用Cognito),然后根据令牌的主体获取用户名;并检查其权限(第一步),应用程序应从用户想要访问的初始存储桶中提供对象。