使用具有 Web 身份的假定角色执行 AWS Lambda

Posted

技术标签:

【中文标题】使用具有 Web 身份的假定角色执行 AWS Lambda【英文标题】:Executing AWS Lambda with assumed role with web identity 【发布时间】:2021-11-26 16:25:30 【问题描述】:

是否可以通过 API 网关执行 Lambda,并代表 Cognito 身份验证用户扮演角色?

现在我在 Lambda 代码中手动进行角色假设:

  const assumedRole = await sts.send(new AssumeRoleWithWebIdentityCommand(
    RoleArn: 'some role ARN',
    RoleSessionName: event.requestContext.authorizer.jwt.claims['cognito:username'],
    WebIdentityToken: event.headers.authorization
  ));

但我想避免这种情况,并且已经使用这个假定的角色执行 Lambda。

我遇到的困难是弄清楚实现这一目标需要什么 IAM 角色和策略。

谢谢!

【问题讨论】:

这可能会导致一种非常糟糕的做法。是什么阻止了恶意用户使用他们的令牌自己承担角色、直接访问资源并绕过任何验证和清理逻辑? 这个想法是只允许他们需要通过 IAM 角色和策略文档访问的资源。 【参考方案1】:

您可以将 cognito 令牌从请求的标头传递给 lambda,然后为身份调用获取 get 凭据。这将是动态承担认知用户角色的最佳方法。如果您已将 cognito 配置为根据令牌授予角色,您甚至不需要在调用中明确提供角色 arn。

【讨论】:

以上是关于使用具有 Web 身份的假定角色执行 AWS Lambda的主要内容,如果未能解决你的问题,请参考以下文章

aws sts假定角色返回被屏蔽的“ ***”的accesskeyid

AWS - JavaScript - 具有经过身份验证的 Cognito 用户对 DynamoDB 的 CRUD 操作

具有 Cognito 联合身份的 AWS AppSync IAM 授权

角色分配策略中无法识别 aws 自定义属性

我们可以在 AWS Cognito 的单个用户池中拥有多个角色吗?

AWS身份池Google登录