根据Cognito凭据为Lambda提供对DynamoDB的细粒度访问

时间:2019-07-28 21:38:14

标签: amazon-web-services aws-lambda amazon-cognito

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

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

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

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

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

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

import androidx.core.util.Preconditions;

ref = Preconditions.checkNotNull(anotherRef);

但是我将其传递给Dynamo查询

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

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

如果有人可以建议我是否采用这种正确的方法,或者甚至有可能,或者是否有更好的方法会很好。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以获取您的认知身份的临时凭据,以获取临时访问密钥,秘密密钥和会话密钥。它们会在一个小时后过期,就像访问和ID令牌一样。但是,您可以使用这些凭据让lambda承担您已登录用户的角色。您可以找到用于获取这些凭据here的文档。