【发布时间】:2022-11-11 10:23:23
【问题描述】:
我已经设置 API Gateway 以使用 IAM 进行身份验证,我喜欢用户获取临时凭证的想法,然后他们可以使用这些凭证来访问服务。此设置还有助于配置经过身份验证和未经身份验证的用户均可访问的端点。
承诺(至少在我看来)是我们可以使用这些临时凭证(或等效令牌)访问所有服务。
我似乎发现的限制是从 API Gateway 执行的 lamdas。虽然“事件”中有参数告诉我用户已通过身份验证,但我无法找到AssumeRole 的方法,因为 Cognito 身份已针对 API 网关进行身份验证。
我尝试使用STS 到AssumeRole 作为角色定义为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