【问题标题】:Lambda `AssumeRole` as Cognito Identity when authenticated using IAM on API Gateway在 API Gateway 上使用 IAM 进行身份验证时,Lambda `AssumeRole` 作为 Cognito 身份
【发布时间】:2022-11-11 10:23:23
【问题描述】:

我已经设置 API Gateway 以使用 IAM 进行身份验证,我喜欢用户获取临时凭证的想法,然后他们可以使用这些凭证来访问服务。此设置还有助于配置经过身份验证和未经身份验证的用户均可访问的端点。

承诺(至少在我看来)是我们可以使用这些临时凭证(或等效令牌)访问所有服务。

我似乎发现的限制是从 API Gateway 执行的 lamdas。虽然“事件”中有参数告诉我用户已通过身份验证,但我无法找到AssumeRole 的方法,因为 Cognito 身份已针对 API 网关进行身份验证。

我尝试使用STSAssumeRole 作为角色定义为CognitoIdentityPool 中定义的经过身份验证的用户。

AssumeRoleWithWebIdentity 感觉更合适,但是在传递给 lambda 的大量字段中,我不确定是否有 WebIdentityToken

到目前为止,我一直在使用 HTTP API 网关。我看到 API Gateway 中的 REST Endpoint 可以使用 Cognito Authoriser。据我所知,这不会允许未经身份验证的/访客用户通过 Cognito 身份池。

我可以看到,使用 AWS Amplify 和临时 IAM 凭证,客户端可以直接访问服务,这在大多数情况下都可以工作。但是,我想提供一个简化的后端来保持客户端更轻。

是否有可能出现其中一种可能的结果?

  • 让 lambda 作为 Cognito Identity IAM 角色执行
  • 在 lambda 中,代入 Cognito Identity IAM 角色。这里有一些我遗漏的令牌吗?

我不愿意让 lambda 访问整个 S3 存储桶或 DynamoDB 表,并且更愿意设置用户级策略,只有在我可以承担该身份的角色时才能应用。

任何指示、指导和帮助将不胜感激!

【问题讨论】:

  • 您如何在客户端授予临时凭据?通过身份池?如果是这样,什么身份提供者?

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


【解决方案1】:

我假设您在 Cognito 组中配置 IAM 角色,以便您可以为不同的组分配不同的权限。

我可以想到 2 个选项来实现您想要的。

选项1

  1. IAM 角色将有一个名为 Trust Policy 的部分,以允许 Cognito 代入该角色。您必须修改它以允许 Lambda 也担任该角色。

  2. 在 Lambda 执行角色中,确保它还具有允许 Lambda 代入该其他角色的权限。

  3. 在 Lambda 代码中,要调用的 API 应该是 AssumeRole(而不是像 AssumeRoleWithWebIdentity 这样的其他变体)。

    选项 2

    由于 IAM 角色控制对 AWS 服务的访问,因此您可以让客户端直接调用 AWS API,而不是使用 Lambda 来处理所有内容。

【讨论】:

  • 谢谢您的答复。遗憾的是,选项 1 不起作用,因为它不是组 - 它是我们正在寻找的对 DynamoDB 的每个用户访问。选项 2 很棘手,因为客户端是一个颤振应用程序,并且为单个 REST 端点添加 AWS Amplify 感觉就像是一把大锤来破解坚果。因此,在 Lambda 中担任 AssumeRole 的愿​​望听起来我可能会倒霉! :(
猜你喜欢
  • 2019-06-02
  • 2016-08-20
  • 2019-12-31
  • 2019-06-19
  • 1970-01-01
  • 2016-12-25
  • 2018-08-27
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多