如何保护云 运行 gRPC 服务

How to Secure A Cloud Run gRPC Service

article 解释了如何使用 Identity Platform 处理来自 end-user 的身份验证。

问题的症结似乎在于客户端应该通过 Identity Platform 进行身份验证以获取令牌。这很简单,我已经能够从客户端代码中检索令牌。 server side 应该在请求 header 中从客户端接收令牌。但是这篇文章似乎并没有解释在这一点之后该做什么。我们可以通过 Identity Platform SDK 获取用户,但如果令牌无效怎么办?我们是否应该抛出一个异常以便 gRPC 调用出错?

有一个 Java 示例,您可以做到这一点 here。在示例中,它 return 是禁止访问的 403 HTTP 状态。

但是,我的假设是 Cloud 运行 的集成程度会比这更高。这需要 Cloud 运行 网关向 gRPC 服务发送请求,并获得响应。从理论上讲,这将允许恶意行为者使用可能会花费金钱的垃圾邮件令牌不断攻击网关。如果我们只是 return 一个错误,我们如何防止恶意行为者攻击我们的服务?如果 gRPC 服务 return 错误太多,网关是否会自动阻止 IP 地址?它怎么知道应该触发哪些错误? HTTP 错误 403 可以提醒网关端点受到攻击,但是 gRPC 呢?

第一部分

所以让我们澄清一些事实以了解为什么您需要另一层。

Cloud 运行 只是 HTTP 服务。正如你提到的,如果你让流量命中它,你将支付所有流量,这就是为什么你需要在“设计”之前为特定目的添加另一层。还有其他层可以放在前面,例如 Cloud Armor, Load Balancer, Identity-Aware-Proxy。这些是独立的产品,有自己的 docs/config 和自己的按使用付费模式。

第二部分

另请查看 API Gateway for gRPC, you can use the API management capabilities of API Gateway to add monitoring, hosting, tracing, authentication,以及更多有关云 运行 上的 gRPC 服务的信息。

此外,一旦您指定了特殊的映射规则,API 网关就会通过 HTTP 将 RESTful JSON 转换为 gRPC 请求。这意味着您可以部署由 API 网关管理的 gRPC 服务器,并使用 gRPC 或 JSON/HTTP 客户端调用其 API,从而为您提供更大的灵活性和与其他系统集成的便利性。

您可以使用任何支持 gRPC 的语言为 API 网关创建 gRPC 服务。