Назад | Перейти на главную страницу

Разрешить подключение только к виртуальной машине GCP Compute Engine из службы Cloud Run

У меня есть сервер БД, работающий как виртуальная машина Compute Engine, и API, работающий в Cloud Run. Оба являются частью одного проекта. Я хочу, чтобы виртуальная машина БД была доступна только из кода Cloud Run.

Сначала я подумал, что это должно работать, потому что в брандмауэре есть правило «default-allow-internal», которое должно применяться к каждой машине в проекте. Однако у меня все еще возникали сбои подключения.

Затем я попытался добавить новое правило входа, которое нацелено на учетную запись службы и разрешает соединения из учетной записи службы. Это тоже не сработало.

Я изменил правило, чтобы разрешить соединения с моего личного IP-адреса, просто чтобы убедиться, что виртуальная машина БД работает, и мои правила брандмауэра работают, и все работает, как ожидалось.

Наконец, я изучил фильтрацию по «исходному тегу», но эту опцию нельзя было выбрать, и я не мог добавить исходные теги к экземпляру Cloud Run.

Могу ли я достичь своей цели - ограничить доступ к виртуальной машине БД, чтобы разрешить только входящие соединения с машины Cloud Run?

Сервисы Cloud Run (полностью управляемые) не получают статических IP-адресов которые могут быть внесены в белый список. Кроме того, посмотрите документацию Сервисы еще не поддерживаются:

В следующей таблице перечислены службы, которые еще не поддерживаются Cloud Run (полностью управляемый).. Обратите внимание, что Cloud Run для Anthos в Google Cloud может использовать любую службу, которую может использовать Google Kubernetes Engine.

Итак, как видите, нет простого способа подключить службу, работающую в Cloud Run (полностью управляемую), и вашу сеть VPC.

Некоторые обходные пути для получения внешнего IP-адреса для вашей службы в Cloud Run (полностью управляемый):

  1. создайте прокси-сервер SOCKS, запустив ssh-клиент, который направляет трафик через экземпляр виртуальной машины GCE, имеющий статический внешний IP-адрес, как в этом пример

  2. отправлять исходящие запросы из Cloud Run (полностью управляемый) через прокси-сервер со статическим 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

С PROXY переменная environemnt, содержащая IP или URL вашего прокси (см. здесь, чтобы установить переменную среды )

Для этого прокси вы можете:

  • создать виртуальную машину Compute Engine со статическим общедоступным IP-адресом. Кальмар, это, вероятно, подходит для Compute Engine бесплатный уровень.
  • использовать стороннюю службу, которая предлагает прокси со статическим IP

РЕДАКТИРОВАТЬ Взгляните на Google Public Issue Tracker Запрос функции и не стесняйтесь присоединяться, комментировать и отслеживать прогресс.