gRPC は Remote Procedure Call(RPC)フレームワークで、クライアントアプリケーションはリモートサーバー上のメソッドを、同じローカルマシン上で動いているかのように呼び出せます。gRPC サーバーとクライアントを Cloudflare のグローバルネットワークに接続すると、異なるデータセンターや環境にあるサービスを使うアプリケーションを作りやすくなります。
Cloudflare Tunnel は、プライベートサブネットルーティング 経由の gRPC トラフィックに対応しています。パブリックホスト名でのデプロイは、現在サポートしていません。
この例では、cloudflared の デーモン を使って gRPC サーバーを Cloudflare に接続し、Gateway ポリシーでサーバーを保護し、Cloudflare One Client でサーバーへの gRPC チャネルを開きます。
-
gRPC の Python アプリケーションをセットアップするには、この クイックスタートガイド ↗ に従います。
-
サーバーを起動します。
~/grpc/examples/python/helloworld $ python3 greeter_server.py
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1721770418.373806 3677 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, event_engine_dns, event_engine_listener, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache
Server started, listening on 50051Cloudflare への安全な送信専用接続を確立するには:
-
Cloudflare ダッシュボードで Networking > Tunnels を開きます。
Tunnels を開く ↗ -
新しいトンネルを作成する か、既存の
cloudflaredトンネルを編集します。
-
Cloudflare ダッシュボードで Networking > Routes を開きます。
Routes を開く ↗ -
Create route > Tunnel CIDR を選択します。作成したトンネルを選び、サーバーのプライベート IP または CIDR アドレスを入力し、Create route を選択します。
デフォルトでは、WARP は RFC 1918 空間 ↗ 向けのトラフィックを除外します。これはプライベートネットワークでよく使われ、インターネットから到達できない IP アドレスです。Cloudflare One Client が private network へトラフィックを送るには、Split Tunnels を設定し、private network の IP/CIDR が Cloudflare One Client 経由でルーティングされるようにします。
-
まず、Split Tunnels のモード が Exclude と Include のどちらになっているかを確認します。
-
モードに応じて Split Tunnel のルートを編集します。
Exclude モードを使っている場合:
a. private network の IP/CIDR 範囲を含む ルートを削除 します。たとえば、ネットワークが AWS のデフォルト範囲
172.31.0.0/16を使っている場合は、172.16.0.0/12を削除します。b. private network が明示的に使っていない IP/CIDR 範囲を再追加 します。上記の AWS の例では、
172.16.0.0/13、172.24.0.0/14、172.28.0.0/15、172.30.0.0/16を新たに追加します。こうすると、172.31.0.0/16向けのトラフィックだけが Cloudflare One Client 経由になります。再追加する IP アドレスは、次の計算機で求められます。
計算機の使い方
- Base CIDR に、Split Tunnels から削除した RFC 1918 範囲を入力します。
- Subtracted CIDRs に、private network が使う IP/CIDR 範囲を入力します。
- 計算機の結果を Split Tunnel の Exclude モードのリストに戻します。
Cloudflare One Client に含めるプライベート IP 範囲を狭めると、ユーザーの ローカルリソースへのアクセス を壊すリスクを下げられます。
Include モードを使っている場合:
- 必要な Zero Trust ドメイン または IP アドレス を Split Tunnel の include リストに追加します。
- private network の IP/CIDR 範囲を含める ルートを追加 します。
Gateway ネットワークポリシー を設定し、gRPC サーバーへのアクセスをブロックまたは許可できます。次の例は 2 つのポリシーで構成します。1 つ目は デバイスポスチャチェック に合格したデバイスからの gRPC 接続を許可し、2 つ目はその他のトラフィックをすべてブロックします。Allow ポリシーの 優先度 を高くしてください。
| セレクター | 演算子 | 値 | 論理 | アクション |
|---|---|---|---|---|
| Destination Port | is | 50051 |
And | Allow |
| Destination IP | is | 172.31.0.133 |
And | |
| Passed Device Posture Checks | is | macOS firewall (Firewall) |
And | |
| Passed Device Posture Checks | is | macOS disk encryption (Disk encryption) |
| セレクター | 演算子 | 値 | アクション |
|---|---|---|---|
| Destination IP | in | 172.31.0.0/16 |
Block |
Gateway プロキシの設定の詳細は、Gateway でネットワークトラフィックをフィルタする を参照してください。
gRPC クライアントは、デバイスに Cloudflare One Client をインストールし、Zero Trust 組織に登録するとサーバーに接続できます。クライアントが Cloudflare Tunnel 経由で公開されたプライベート IP にリクエストすると、WARP はその接続を Cloudflare のネットワーク経由で対応するトンネルへルーティングします。
gRPC クライアントをセットアップするには:
- デバイスに Cloudflare One Client をデプロイ し、Traffic and DNS モードにします。
- デバイス登録ルールを作成 し、Zero Trust 組織に登録できるデバイスを決めます。
- この クイックスタートガイド ↗ に従い、デバイスに gRPC をインストールします。
greeter.pyを、gRPC サーバーのプライベート IP を指すように変更します。これは Cloudflare Tunnel のルート で設定したプライベート IP と同じです。例:
def run():
# NOTE(gRPC Python Team): .close() is possible on a channel and should be
# used in circumstances in which the with statement does not fit the needs
# of the code.
print("Will try to greet world ...")
with grpc.insecure_channel("172.31.0.133:50051") as channel:
stub = helloworld_pb2_grpc.GreeterStub(channel)
response = stub.SayHello(helloworld_pb2.HelloRequest(name="you"))
print("Greeter client received: " + response.message)- クライアントデバイスで、Cloudflare One Client が
Connectedであることを確認します。 - gRPC クライアントアプリケーションを実行します。
~/grpc/examples/python/helloworld $ python3 greeter_client.py
Will try to greet world ...
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
I0000 00:00:1721771484.489711 4414247 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, event_engine_dns, event_engine_listener, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache
Greeter client received: Hello, you!Tunnel ログ を確認すると、リクエストがトンネルに入り、想定どおり gRPC サーバーに届いているかを検証できます。