我已经配置了一个 REST API 网关,它通过 Lambda 集成提供服务。此 API 由 AWS Lambda 授权程序保护,该授权程序验证作为请求中标头传递的 JWT 令牌是否有效。这意味着,只有拥有有效 JWT 令牌的注册用户才能调用此 API。然而,除了用户->API之外,我们还需要提供系统->API通信,这种通信不应该依赖于“系统用户”来调用API。
到目前为止,我已将 API 网关中的所有资源配置为使用 Lambda Authorizer 函数作为授权方法,这实现了用户 -> API 通信流程。
对于系统->API 通信,我正在考虑允许通过 IAM 角色进行通信。这个想法是系统可以承担 AWS 角色并使用 AWS SigV4 签署 HTTP 请求。这样,我就能够使用 REST API 网关资源策略来允许或拒绝系统通过 AWS 策略访问 API(验证特定角色作为主体),但这需要绕过此用例的 lambda 授权。
AWS 文档并不清楚这种混合用例的选项。看来,对于通过资源策略进行 IAM 角色授权,我需要更改 API 网关资源配置以使用 AWS_IAM 作为身份验证方法而不是 LAMBDA。尽管文档甚至提到了将 API 资源策略和 Lambda Authorizer 结合起来的可能性,但它看起来仅适用于阻止不是来自特定 VPC 或 IP 范围的请求(链接)。
总而言之,我想要实现的目标是:
User's requests --(JWT)--> Lambda Authorizer ---|
(Identity via Oauth) |
|-> API Gateway
System's requests --(SigV4)--> Resource Policy --|
(Identity via IAM Role)
因此,我没有找到一种方法以独占的方式为我的两个单独的用例提供授权流程,我发现每个 API 网关资源端点只能有一个授权流程。
有谁知道使用 REST API 网关是否可以实现我的目标?如果没有,是否有其他替代方案来解决这个问题?