web-dev-qa-db-ja.com

CloudRunサービスから発信されたGCPComputeEngineへの接続のみを許可するVM

Compute Engine VMとして実行されているDBサーバーと、CloudRunで実行されているAPIがあります。どちらも同じプロジェクトの一部です。 DB VMにCloudRunコードからのみアクセスできるようにしたい。

ファイアウォールには、プロジェクト内のすべてのマシンに適用される「default-allow-internal」ルールがあるため、最初はこれで問題ないと思いました。しかし、私はまだ接続障害を抱えていました。

次に、サービスアカウントを対象とし、サービスアカウントからの接続を許可する新しい入力ルールを追加してみました。これもうまくいきませんでした。

DB VMが機能し、ファイアウォールルールが機能し、すべてが期待どおりに機能したことを確認するためだけに、個人IPからの接続を許可するようにルールを変更しました。

最後に、「ソースタグ」によるフィルタリングを調べましたが、オプションを選択できず、CloudRunインスタンスにソースタグを追加できないようでした。

DBへのアクセスを制限するという目標を達成することは可能ですかVM Cloud Runマシンからの着信接続のみを許可する)?

1
jminardi

クラウド実行(完全に管理された)サービスは、ホワイトリストに登録される可能性のある静的IPを取得しません。さらに、ドキュメントをご覧ください サービスはまだサポートされていません

次の表に、Cloud Runでまだサポートされていないサービス(完全に管理されている)を示します。 GoogleCloud上のCloudRun for Anthosは、Google KubernetesEngineが使用できるすべてのサービスを使用できることに注意してください。

cloud_run_managed

したがって、ご覧のとおり、Cloud Run(完全に管理されている)で実行されているサービスとVPCネットワークを接続する簡単な方法はありません。

Cloud Run(完全に管理されている)でサービスの外部IPを取得するためのいくつかの回避策

  1. gCEを介してトラフィックをルーティングするsshクライアントを実行してSOCKSプロキシを作成しますVMこのような静的外部IPアドレスを持つインスタンス

  2. 静的IPを持つプロキシを介してCloudRun(完全に管理されている)からアウトバウンドリクエストを送信します。例:以下の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変数を使用します(ここを参照してください 環境変数を設定

このプロキシの場合、次のいずれかを実行できます。

  • 静的パブリックIPアドレスが実行されているComputeEngine VMを作成します Squid 、これはおそらくCompute Engine フリーティア に適合します。
  • 静的IPでプロキシを提供するサードパーティのサービスを使用する

[〜#〜]編集[〜#〜]Google公開課題追跡システムをご覧ください 機能リクエスト お気軽に参加、コメント、進行状況の追跡。

1
Serhii Rohoza