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

时间:2018-10-03 14:38:40

标签: amazon-s3 aws-lambda amazon-cognito aws-amplify

我正在使用AWS Amplify创建一个应用程序,用户可以按照文档中的描述使用私有或公共文件访问级别上传图像。除此之外,我还实现了一个lambda函数,该函数应通过API网关的请求修改图像,并返回指向修改后的图像的链接。

我想要的是给定的用户应该能够调用API并仅修改自己的图像,而不能修改其他用户的图像;即允许AWS lambda函数使用来自认知用户的执行角色。如果我允许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/

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

在AWS Amplify应用程序中进行此操作的正确方法是什么?  首先,我遵循了该指南: https://aws.amazon.com/premiumsupport/knowledge-center/cognito-user-pool-group/

1 个答案:

答案 0 :(得分:0)

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

  1. 使用API​​网关请求映射将context.identity.cognitoIdentityId传递给Lambda。只是应该是具有映射的Lambda集成(而不是代理集成)。另一个限制是API请求应为POST,如果将GET映射到query string,也可以进行GET。

  2. Lambda可以访问S3中的所有文件

  3. 在Lambda本身中执行访问控制检查。 Lambda可以在S3中读取文件的所有权限。然后查看所有者是否是Cognito用户。