允许API用户使用Cognito身份池中的执行角色运行AWS Lambda

问题描述 投票:4回答:1

我正在使用AWS amplify创建一个应用程序,用户可以使用私有或公共文件访问级别上传图像,如文档中所述。除此之外,我已经实现了一个lambda函数,根据请求通过API网关修改图像并返回到修改后的图像的链接。

我想要的是给定用户应该能够调用API并仅修改他自己的图像,而不是其他用户的图像;即允许AWS lambda函数使用来自cognito用户的执行角色。如果我允许lambda函数访问S3存储桶中的所有数据,那么它工作正常 - 但我不希望用户能够访问其他用户的图像。

我已经有一段时间了,尝试不同的事情无济于事。

现在我已经将API与用户池集成在一起,如下所述:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html

然后我试着遵循这个指南:https://aws.amazon.com/premiumsupport/knowledge-center/cognito-user-pool-group/

哪个不起作用,因为“cognito:roles”不存在于lambda_handler的事件变量中(可能是因为没有用户池组?)。

在AWS Amplify应用程序中,正确的方法是什么?主要是,我遵循了这个指南:https://aws.amazon.com/premiumsupport/knowledge-center/cognito-user-pool-group/

amazon-s3 aws-lambda amazon-cognito aws-amplify
1个回答
0
投票

使用API​​网关请求映射并检查Lambda本身的权限:

  1. 使用API​​网关请求映射将context.identity.cognitoIdentityId传递给Lambda。它应该是与映射(不是代理集成)的Lambda集成。另一个限制是API请求应该是POST,对于GET,如果将cognitoIdentityId映射到query string也可以。
  2. Lambda可以访问S3中的所有文件
  3. 在Lambda中实现访问控制检查。 Lambda可以读取S3中文件的所有权限。然后查看所有者是否是Cognito用户。
© www.soinside.com 2019 - 2024. All rights reserved.