【问题标题】:Allow API users to run AWS Lambda using execution role from Cognito identity pool允许 API 用户使用 Cognito 身份池中的执行角色运行 AWS Lambda
【发布时间】:2019-03-08 20:00:45
【问题描述】:

我正在使用 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/

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

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

【问题讨论】:

  • 你有没有弄明白?我真的很感兴趣:-)

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


【解决方案1】:

在 Lambda 本身中使用 API Gateway 请求映射并检查权限

  1. 使用 API Gateway 请求映射将 context.identity.cognitoIdentityId 传递给 Lambda。只是它应该是与映射的 Lambda 集成(而不是代理集成)。另一个限制是 API 请求应该是 POST,对于 GET,如果您将 cognitoIdentityId 映射到 query string 也是可能的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 2018-04-05
    • 1970-01-01
    • 2019-07-09
    • 2019-09-30
    • 2021-11-26
    • 2016-09-27
    • 2017-01-26
    相关资源
    最近更新 更多