如何将服务到服务和认知身份验证同时用于 API 网关



我有一个通过 AWS API Gateway 访问的 RESTful API。我希望人类用户(通过 Cognito 进行身份验证(和其他(内部(服务都能够调用 API。有很多关于如何执行其中之一的文档,但没有有关如何同时执行这两项操作的文档。

我尝试使用未经身份验证的 Cognito 联合身份来授权服务。我还使用 Cognito 用户池对人员进行身份验证。但是,API 网关仅允许单个授权方(在本例中为 AWS_IAMCognito 授权方(。但是,我看不到两者兼而有之的方法。

我想我将需要一个自定义的 Lambda 授权方,但我在找到有关如何使用 IAMCognito 编写授权方的准确信息时遇到了很多麻烦。

当然,我们不能是第一个想要允许服务和人类访问API的人。缺乏关于这样做的文档使我相信我要么错过了一些非常明显的东西,要么这是一个最好避免的用例(在这种情况下,什么是最佳实践?

有没有办法同时做到这两点?是否有 Lambda 授权方示例可以为我指明正确的方向?我缺少一些内置的东西吗?

我们拒绝了"假装"Cognito用户是人类的想法,而实际上它实际上是一项服务,因为在我们看来,这是对Cognito用户池和联合身份验证的滥用。同样,相反的情况是,Cognito 用户被联合起来充当用户和服务共享的 IAM 角色,这似乎是对用户身份验证的滥用。

有没有规范的方法可以做到这一点?如果没有,是否有有关如何编写自定义 Lambda 授权方来执行这两项操作的现有文档?

简短的回答是:对于这两种情况,您(可能(都不需要使用 API 网关。

API 网关,顾名思义,只是一个网关。它接受请求(通常是 HTTP(并将其转发到另一个位置(Lambda 函数、EC2 实例、另一个 AWS 服务或其他 HTTP 终端节点(。如果您需要没有关联 IAM 角色的用户来访问 AWS 服务,这将非常有用。

通过 Cognito进行身份验证的用户通过关联的 Cognito 身份池具有关联的 IAM 角色。只需以这种方式授予他们访问 AWS 服务的权限,无需通过 API 网关。

需要访问其他 AWS 服务的 AWS 服务不需要通过 API 网关,需要通过其 IAM 角色获得权限。

如果出于某种原因,您必须为用户和服务使用 API 网关,请创建两个指向使用不同身份验证方法的相同资源的 API 网关。

相关内容

  • 没有找到相关文章

最新更新