【问题标题】:AWS API gateway - how to do S3 Cognito userpool-restricted folder access?AWS API 网关 - 如何进行 S3 Cognito 用户池限制的文件夹访问?
【发布时间】:2017-07-22 20:11:02
【问题描述】:

我的应用程序使用 Cognito 用户池来限制访问,以便每个用户都可以在“私有”存储桶中读取/写入自己的个人文件夹。在“公共”存储桶中,它是相同的,除了每个人都可以读取所有内容而只能写入自己的文件夹。当通过 JavaScript S3 SDK 访问时,这一切都可以正常工作。

我现在正尝试通过 API 网关与访问 S3 的 Lambda 函数对话来实现访问。

问题在于 Lambda 函数似乎没有使用 Cognito Userpool 身份。如果我为 Lambda 函数角色提供总 S3 访问权限,则该函数能够正常访问 S3 并且该函数可以正常工作。但是,如果我有角色策略来限制 Cognito 用户池 ID,如上所述,我会被拒绝访问。

在我看来,Userpool Cognito Identity 不是 Lambda 函数使用的。

谁能建议这个设置的正确配置?

谢谢

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito


    【解决方案1】:

    API Gateway 和 Lambda 不会自动支持此用例。

    Lambda 函数以其执行角色的身份运行,因此其上下文不会包含来自 Cognito 用户池的身份属性。 (Lambda 函数中的上下文对象包含从 Lambda 的角度来看的上下文。)

    API Gateway 通过 API Gateway 中的 $context.authorizer.claims 变量公开 Cognito 用户池身份信息。要从您的 Lambda 函数中访问此信息,您必须在 API Gateway 中修改您的正文映射模板,以通过请求正文将所需数据从 $context.authorizer.claims 传递到您的 Lambda 函数。您是 Lambda 函数,然后像任何其他字段一样从请求正文中读取此信息。

    在这种情况下,没有机制可以根据每个 Cognito 用户自动限制对 S3 存储桶/对象的权限。您可以在 Lambda 函数中实现逻辑,以使用自定义代码强制执行。

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 2019-03-21
      • 2017-11-23
      • 2019-08-18
      • 2023-03-09
      • 2021-07-25
      • 2021-01-19
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多