如何对除 api 网关之外的所有人隐藏我的公共微服务?

Posted

技术标签:

【中文标题】如何对除 api 网关之外的所有人隐藏我的公共微服务?【英文标题】:How to hide my public microservices from everyone except the api gateway? 【发布时间】:2020-11-05 09:28:10 【问题描述】:

我在谷歌云上部署了容器化服务。该应用程序由几个微服务和一个 api 网关组成。由于 google cloud run 提供公共端点,我的所有微服务都是公共的。我只想公开 api 网关,其余服务只能通过网关作为反向代理访问。我怎样才能从公众的视线中隐藏微服务?应该拒绝来自除 api 网关之外的任何地方的请求。

【问题讨论】:

【参考方案1】:

您可以在您的微服务前面添加一个 API 网关并激活微服务上的安全性。

只有网关将被授权访问您的微服务,所有其他请求,即使端点是公共的,也会被 Google 前端丢弃(我的意思是,它是一个 Google 层,您无需为此支付任何费用) .

作为 API 网关,您可以例如使用云端点。 I wrote an article on this to access to secure backend with a simple API Key。在您的情况下,您可以停用 API 密钥安全性,您将拥有一个公共 API 网关,并且只有网关才能访问私有服务

编辑

在您的情况下,您不需要 API 密钥。只需删除安全定义(在文件末尾),不要将security: 定义放在后端定义中(或全局)。

然后

在公共 Cloud Run 上部署 Cloud Endpoint。此 URL 是公开的,任何人都可以访问它,无需 API 密钥 以私有模式(IAP 后面的 AppEngine)部署您的后端服务(Cloud Run、Cloud Functions)。这次只有经过身份验证和授权的帐户才能访问此服务。 授予 Cloud Endpoint 服务帐号以访问后端服务(Cloud Functions 的云函数调用程序、Cloud Run 的 Cloud Run 调用程序、AppEngine 的 IAP Web 安全访问)

最后,只有 Cloud Endpoint 服务帐号有权访问您的后端。

【讨论】:

感谢您写了一篇好文章。如果发生密钥轮换,我们是否必须将所有服务重新部署到云端? 我不明白你的评论。你说的是哪个键?什么服务? Cloud Endpoint 还是后端服务? 据我了解,您不需要它。我更新了我的答案。告诉我它是否适合您的用例。

以上是关于如何对除 api 网关之外的所有人隐藏我的公共微服务?的主要内容,如果未能解决你的问题,请参考以下文章

为啥微服务推荐使用 API 网关?

如何限制 NGINX basic_auth 对除一个 URL 之外的每个 URL 的访问?

使用 Numpy 对除第一个维度之外的所有维度进行平面索引

Angularjs:限制对除少数页面之外的所有页面的访问

对除特定路径之外的所有路径使用 Express 中的特定中间件

部署微服务于容器云平台,API网关应如何选择?