在API网关上使用IAM进行身份验证时,将Lambda"AssumeRole"作为Cognito标识



我已经设置了API网关,以便使用IAM进行身份验证,我喜欢用户获得临时凭据的想法,然后可以使用这些凭据访问服务。此设置还有助于配置已验证和未验证用户都可以访问的端点。

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

我发现的限制似乎是从API网关执行的lamdas。虽然在";事件";告诉我用户已经通过身份验证,我找不到AssumeRole的方法作为针对API网关进行身份验证的Cognito Identity。

我尝试使用STSAssumeRole作为在CognitoIdentityPool中定义的已验证用户的角色。

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

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

我可以看到,有了AWS Amplify和临时IAM凭据,客户可以直接访问服务,这在很大程度上是有效的。然而,我想提供一个简化的后端,以保持客户端更轻。

有可能产生其中一种可能的结果吗?

  • 让lambda作为Cognito Identity IAM角色执行
  • 在lambda中,承担Cognito Identity IAM角色。这里有我丢失的代币吗

我不喜欢让lambda访问整个S3存储桶或DynamoDB表,我更喜欢设置用户级策略,只有当我能够承担该身份的角色时,我才能应用这些策略。

任何建议、指导和帮助都将不胜感激!

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

我可以想出两种选择来实现你想要的。

选项1

  1. IAM角色将有一个名为"信任策略"的部分,允许Cognito担任该角色。您必须对此进行修改,以允许Lambda也承担该角色。

  2. 在Lambda执行角色中,确保它也具有允许Lambda承担其他角色的权限。

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

选项2

由于IAM角色控制对AWS服务的访问,因此您可以让客户端直接调用AWS API,而不是使用Lambda来引导一切。

相关内容

  • 没有找到相关文章

最新更新