我正在使用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/
答案 0 :(得分:0)
使用API网关请求映射并检查Lambda本身中的权限:
使用API网关请求映射将context.identity.cognitoIdentityId传递给Lambda。只是应该是具有映射的Lambda集成(而不是代理集成)。另一个限制是API请求应为POST,如果将GET映射到query string,也可以进行GET。
Lambda可以访问S3中的所有文件
在Lambda本身中执行访问控制检查。 Lambda可以在S3中读取文件的所有权限。然后查看所有者是否是Cognito用户。