使用具有 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 授权