仅允许从 Cloud Run 服务连接到 GCP Compute Engine VM

仅允许从 Cloud Run 服务连接到 GCP Compute Engine VM

我有一个作为 Compute Engine VM 运行的 DB 服务器和一个在 Cloud Run 上运行的 API。两者都属于同一个项目。我希望 DB VM 只能从 Cloud Run 代码访问。

起初我以为这应该可以工作,因为防火墙有一个“默认允许内部”规则,应该适用于项目中的每台机器。但是我仍然遇到连接失败的问题。

然后我尝试添加一条新的入口规则,该规则针对服务帐户并允许来自服务帐户的连接。这也不起作用。

我修改了规则以允许来自我的个人 IP 的连接,只是为了确认 DB VM 正在运行、我的防火墙规则正常运行,并且一切都按预期运行。

最后,我研究了通过“源标签”进行过滤,但该选项不可选,而且我似乎无法将源标签添加到 Cloud Run 实例。

我是否可以实现限制对 DB VM 的访问以仅允许来自 Cloud Run 机器的传入连接的目标?

答案1

您可以配置无服务器 VPC 访问以将 Cloud Run 与 Compute Engine VM 连接起来,更新于 2020 年 9 月。 https://cloud.google.com/vpc/docs/configure-serverless-vpc-access

答案2

Cloud Run(全托管)服务没有获取静态 IP可以将其列入白名单。此外,请查看文档尚不支持的服务

下表列出了 Cloud Run(完全托管)尚不支持的服务。请注意,Google Cloud 上的 Cloud Run for Anthos 可以使用 Google Kubernetes Engine 可以使用的任何服务。

cloud_run_managed

因此,正如您所看到的,没有简单的方法可以连接在 Cloud Run(完全托管)和您的 VPC 网络上运行的服务和。

在 Cloud Run(完全托管)中为您的服务获取外部 IP 的一些解决方法

  1. 通过运行 ssh 客户端创建 SOCKS 代理,该客户端将流量路由到具有静态外部 IP 地址的 GCE VM 实例,如下所示例子

  2. 通过具有静态 IP 的代理从 Cloud Run(完全托管)发送出站请求,以下是 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

使用PROXY包含代理的 IP 或 URL 的环境变量(请参阅此处设置环境变量

对于此代理,您可以:

  • 创建具有静态公共 IP 地址的 Compute Engine VM 并运行乌贼,这可能适合 Compute Engine免费套餐
  • 使用提供静态 IP 代理的第三方服务

编辑查看 Google 公共问题跟踪器功能要求欢迎随时加入、评论和跟踪进度。

相关内容