允许Cognito访问S3上的自定义前缀

3
我需要允许用户访问S3上具有特定前缀的文件,例如username1,但是我无法更改该前缀,因此无法将${cognito-identity.amazonaws.com:sub}用作前缀。我的S3存储桶已经填充了特定前缀下的内容 - 因此,用户登录到我的应用程序,然后被允许访问其中一个特定前缀。
目前在AWS上设置为使用Firebase和开发人员认证标识使用户能够在Cognito角色中进行身份验证。每个用户帐户(电子邮件/密码)都有一个关联的S3前缀,他们必须能够访问。某些用户将共享此前缀(例如,两个用户访问S3-bucket / username1)。用户不应能够列出或访问任何其他前缀,除了他们的相关前缀。
我不确定实现这一点的最佳方法是什么 - 只使用Cognito角色还是使用数据库和lambda函数 + api端点,bucket / user策略或ACL。有我忽略的简单方法吗?
对AWS相当新,非常感谢任何帮助!
tl; dr:如何仅允许用户访问具有特定前缀的S3文件,而不是${cognito-identity.amazonaws.com:sub}变量?

你是说你不能使用cognito-identity前缀,因为你需要它不改变吗?一旦你验证了Cognito身份,它就不会改变,除非你将其与另一个身份合并,而这似乎不是你正在做的。如果这是你的问题,那么你可以放心使用该前缀。 - Jeff Bailey
@JeffBailey:不,我需要使用与 cognito-identity 无关的完全不同的前缀。我已经在 S3 下载和存储特定前缀的数据,并且我想使用 cognito 允许用户访问其中一个前缀。 - math-eww
Amazon Cognito目前不支持自定义值。我们已经听到其他客户的请求,并将在未来的服务更新中考虑它。 - Mark Mercurio
@MarkMercurio:谢谢你让我知道。我理解这意味着使用Cognito无法实现我需要的功能,所以我会想出另一个解决方案。再次感谢,如果您们将来添加它,我会留意的! - math-eww
1个回答

1

如评论所述,Amazon Cognito目前不直接支持您的用例。 您可以实现以下类似内容以实现您的目标:

  1. 像往常一样使用Cognito对用户进行身份验证。 Cognito身份将具有调用API网关端点的权限。
  2. 您的API(在Lambda中运行)使用Cognito身份ID(在上下文中提供)查找Cognito身份与您的自定义S3前缀的映射。
  3. 您的API使用STS生成临时凭据来访问该前缀,并将其返回给客户端。
  4. 客户端使用这些凭据直接向S3发出请求。

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