GCP 托管的 Cloud Run 的出站 IP 范围是多少?
Posted
技术标签:
【中文标题】GCP 托管的 Cloud Run 的出站 IP 范围是多少?【英文标题】:What are the outbound IP ranges for GCP managed Cloud Run? 【发布时间】:2019-11-07 21:04:00 【问题描述】:我正在使用 GCP 托管的 Cloud Run 和 MongoDB Atlas 开发应用程序。如果我允许从任何地方连接 Atlas 的 IP 白名单,Cloud Run 就可以完美地与 MongoDB Atlas 配合使用。但是,我只想限制必要 IP 的连接,但我没有找到 Cloud Run 的出站 IP。有什么方法可以知道出站 IP?
【问题讨论】:
现在有一种方法可以为 Cloud Run 分配静态 IP。更新了我的答案。 【参考方案1】:更新(2020 年 10 月): Cloud Run 现已推出 VPC egress 功能,可让您为通过 Cloud NAT 的出站请求配置静态 IP。您可以关注this step by step guide in the documentation,在MongoDB Atlas上配置静态IP加入白名单。
在 Cloud Run 开始支持 Cloud NAT 或无服务器 VPC 访问之前,很遗憾,这不受支持。
正如@Steren 所提到的,您可以通过运行ssh
客户端来创建 SOCKS 代理,该客户端通过具有静态外部 IP 地址的 GCE VM 实例路由流量。
我已在此处发布博客:https://ahmet.im/blog/cloud-run-static-ip/,您可以在以下位置找到带有工作示例的分步说明:https://github.com/ahmetb/cloud-run-static-outbound-ip
【讨论】:
我很感激我从你那里找到的一切。关于支持 Cloud Nat 的 Cloud Run 有什么新消息吗? 所以现在测试版支持无服务器 VPC 访问,但似乎 MongoDB Atlas 是一个外部服务。它适用于将 VPC 内的范围列入白名单(如 Cloud SQL),但它如何适用于外部服务? @AhmetB。我发现在某个时候找到了一个范围,现在再次需要该范围,因为 Google 安全指挥中心抱怨我将代理打开到 0.0.0.0/0 并且只需要一些更严格的东西。我似乎无法在谷歌文档中找到该范围。这是美国数据中心的范围,基本上适用于所有 google ips。知道那是什么吗?我知道我终于找到了。 更新了我的答案。 Cloud Run 现在支持静态出口 IP 地址。 @YehudaMakarov @AhmetB-Google 注意到并感谢您在此告知我们。一切顺利。【参考方案2】:Cloud Run(与所有可扩展的无服务器产品一样)不会为您提供已知为传出流量来源的专用 IP 地址。另见:Possible to get static IP address for Google Cloud Functions?
【讨论】:
这个恕我直言不应该是正确的。谷歌必须有一个它从中提取的 ips 池......当然,它们会旋转,但范围是多少是一个很好的问题。如何将所有 google 的 ips 列入白名单?这至少比将整个世界列入白名单要好。 @DeanHiller 为什么地址池不会在没有警告的情况下随时间变化? 公平点,但与此同时,像我这样的客户,今天的范围会很好,因为像我这样的大多数组织会监控故障,我们只会用谷歌搜索新的范围并修复。这种安全性比完全向世界开放要好于攻击。 @DeanHiller 听起来 Cloud Functions 不能满足您的要求。如果您需要静态 IP,还有其他服务可以满足您的需求。 效果很好(云运行而不是云功能)。 gmail 给出了它的 ips 范围,因此必须有一个 cloudrun 或所有 GCP 的“当前”范围。对于安全性,两者都比没有好。我打赌信息存在于某个地方,我希望不只是在谷歌中。【参考方案3】:Cloud Run 服务不获取静态 IP。
一种解决方案是通过具有静态 IP 的代理发送出站请求。
例如在 Python 中:
import requests
import sys
from flask import Flask
import os
app = Flask(__name__)
@app.route("/")
def hello():
proxy = os.environ.get('PROXY')
proxyDict =
"http": proxy,
"https": proxy
r = requests.get('http://ifconfig.me/ip', proxies=proxyDict)
return 'You connected from IP address: ' + r.text
使用包含您代理的 IP 或 URL 的 PROXY
environemnt 变量(参见此处set an environment variable)
对于此代理,您可以:
自行创建,例如使用静态公共 IP 地址运行 squid 的 Compute Engine 虚拟机,这可能适合 Compute Engine 免费套餐。 使用提供静态 IP 代理的服务,例如 https://www.quotaguard.com/static-ip/,起价为 $19/m我个人使用了第二种解决方案。该服务为我提供了一个包含用户名和密码的 URL,然后我使用上面的代码将其用作代理。
【讨论】:
【参考方案4】:Cloud Run 团队现已在 beta 中发布此功能:
https://cloud.google.com/run/docs/configuring/static-outbound-ip
【讨论】:
以上是关于GCP 托管的 Cloud Run 的出站 IP 范围是多少?的主要内容,如果未能解决你的问题,请参考以下文章
GCP - 无法在 Cloud Run 中使用 Google Secret Manager (@google-cloud/secret-manager)
Terraform GCP:无需用户停机即可更新 Cloud Run 服务
Cloud Scheduler 调用的 GCP Cloud Run 应用的当前最大超时是多少
我可以为 Terraform for GCP 赋予管理员角色吗? (Cloud Run 域映射示例)