首页 > 解决方案 > 基于 Cognito 凭证为 Lambda 提供对 DynamoDB 的细粒度访问

问题描述

我目前有许多查询 DynamoDB 的 Lambda。Lambda 通过配置为使用 AWS_IAM 授权的 API Gateway REST API 公开/调用。

我的 Cognito 用户池目前正在根据各种信息分配不同的 IAM 角色,最重要的是,IAM 角色限制了对 DynamoDB 上与用户的 Cognito 身份 ID 匹配的特定行的访问。这些角色按预期工作,当直接查询 DynamoDB 时,这些角色只允许用户读取自己的行。

但是,在将数据返回给用户之前,我需要进行一些操作,因此我目前让 lambda 执行查询,而不是直接访问 dynamo。lambda 显然配置了自己的 Lambda 执行角色,该角色目前提供对整个数据库的读取访问权限。

但是,我要做的是通过 Api Gateway 将用户 Cognito 凭据传递给 Lambda,然后让 lambda 在进行 dynamo 查询之前承担登录用户的 IAM 角色,从而只允许 Lambda 从用户的DynamoDB 中的自己的行。

我花了几天时间尝试从 AWS_IAM 授权到 Cognito 用户池授权以及我在网上找到的任何其他想法,但我从未真正设法让 Lambda 承担这个角色。

目前,我为 Api Gateway 方法启用了“使用调用者凭据调用”,并且我的代码正在从事件中读取 Cognito 身份 ID,如下所示:

const cognitoIdentityId = event.requestContext.identity.cognitoIdentityId`

我将它传递给 Dynamo 查询,但是

1)我不确定这是否足够安全/是否允许某人操纵请求以访问其他人的数据。

2)我不是专家,但“感觉”我应该为此使用细粒度的 IAM 角色,而不是仅仅依靠我的 Dynamo 查询是正确的

如果有人可以建议我是否以正确的方式处理这个问题,或者是否有可能,或者是否有更好的方法会很棒。

谢谢!

标签: amazon-web-servicesaws-lambdaamazon-cognito

解决方案


您可以获取您的 cognito 身份的临时凭证,以获取临时访问密钥、秘密密钥和会话密钥。这些将在一个小时后过期,就像访问和 id 令牌一样。但是您可以使用这些凭据让 lambda 代入您登录用户的角色。您可以在此处找到获取这些凭据的文档。


推荐阅读