Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

gRPC

最終更新 Markdown で表示Agent セットアップ

gRPC は Remote Procedure Call(RPC)フレームワークで、クライアントアプリケーションはリモートサーバー上のメソッドを、同じローカルマシン上で動いているかのように呼び出せます。gRPC サーバーとクライアントを Cloudflare のグローバルネットワークに接続すると、異なるデータセンターや環境にあるサービスを使うアプリケーションを作りやすくなります。

Cloudflare Tunnel は、プライベートサブネットルーティング 経由の gRPC トラフィックに対応しています。パブリックホスト名でのデプロイは、現在サポートしていません。



この例では、cloudflaredデーモン を使って gRPC サーバーを Cloudflare に接続し、Gateway ポリシーでサーバーを保護し、Cloudflare One Client でサーバーへの gRPC チャネルを開きます。

1. gRPC サーバーをセットアップする

  1. gRPC の Python アプリケーションをセットアップするには、この クイックスタートガイド に従います。

  2. サーバーを起動します。

~/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 50051

2. サーバーを Cloudflare に接続する

Cloudflare への安全な送信専用接続を確立するには:

  1. Cloudflare ダッシュボードで Networking > Tunnels を開きます。

    Tunnels を開く ↗
  2. 新しいトンネルを作成する か、既存の cloudflared トンネルを編集します。

  1. Cloudflare ダッシュボードで Networking > Routes を開きます。

    Routes を開く ↗
  2. Create route > Tunnel CIDR を選択します。作成したトンネルを選び、サーバーのプライベート IP または CIDR アドレスを入力し、Create route を選択します。

3. プライベートネットワーク IP を Cloudflare One Client 経由でルーティングする

デフォルトでは、WARP は RFC 1918 空間 向けのトラフィックを除外します。これはプライベートネットワークでよく使われ、インターネットから到達できない IP アドレスです。Cloudflare One Client が private network へトラフィックを送るには、Split Tunnels を設定し、private network の IP/CIDR が Cloudflare One Client 経由でルーティングされるようにします。

  1. まず、Split Tunnels のモードExcludeInclude のどちらになっているかを確認します。

  2. モードに応じて 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/13172.24.0.0/14172.28.0.0/15172.30.0.0/16 を新たに追加します。こうすると、172.31.0.0/16 向けのトラフィックだけが Cloudflare One Client 経由になります。

    再追加する IP アドレスは、次の計算機で求められます。

    計算機の使い方

    1. Base CIDR に、Split Tunnels から削除した RFC 1918 範囲を入力します。
    2. Subtracted CIDRs に、private network が使う IP/CIDR 範囲を入力します。
    3. 計算機の結果を Split Tunnel の Exclude モードのリストに戻します。

    Cloudflare One Client に含めるプライベート IP 範囲を狭めると、ユーザーの ローカルリソースへのアクセス を壊すリスクを下げられます。

    Include モードを使っている場合:

    1. 必要な Zero Trust ドメイン または IP アドレス を Split Tunnel の include リストに追加します。
    2. private network の IP/CIDR 範囲を含める ルートを追加 します。

4.(推奨)Gateway ポリシーを作成する

Gateway ネットワークポリシー を設定し、gRPC サーバーへのアクセスをブロックまたは許可できます。次の例は 2 つのポリシーで構成します。1 つ目は デバイスポスチャチェック に合格したデバイスからの gRPC 接続を許可し、2 つ目はその他のトラフィックをすべてブロックします。Allow ポリシーの 優先度 を高くしてください。

1. 保護されたデバイスを許可する

セレクター 演算子 論理 アクション
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)

2. それ以外をすべてブロックする

セレクター 演算子 アクション
Destination IP in 172.31.0.0/16 Block

Gateway プロキシの設定の詳細は、Gateway でネットワークトラフィックをフィルタする を参照してください。

5. クライアントをセットアップする

gRPC クライアントは、デバイスに Cloudflare One Client をインストールし、Zero Trust 組織に登録するとサーバーに接続できます。クライアントが Cloudflare Tunnel 経由で公開されたプライベート IP にリクエストすると、WARP はその接続を Cloudflare のネットワーク経由で対応するトンネルへルーティングします。

gRPC クライアントをセットアップするには:

  1. デバイスに Cloudflare One Client をデプロイ し、Traffic and DNS モードにします。
  2. デバイス登録ルールを作成 し、Zero Trust 組織に登録できるデバイスを決めます。
  3. この クイックスタートガイド に従い、デバイスに gRPC をインストールします。
  4. 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)

6. 接続をテストする

  1. クライアントデバイスで、Cloudflare One Client が Connected であることを確認します。
  2. 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 サーバーに届いているかを検証できます。

役に立ちましたか?