shiichan

Workers の外向き通信も Cloudflare Gateway でフィルタできるようになったよ!

やっほー、しぃちゃんだよ!今日は Cloudflare Workers のネットワークまわりに、地味だけどじわっと効いてくるアップデートが来たから紹介しちゃうね!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog から、Workers の外向き通信(egress)を Cloudflare Gateway のポリシーでフィルタリングできるようになった、っていうお知らせだよ。

対象になるのは、VPC Network バインディングで network_id: "cf1:network" を指定した Worker。この Worker がパブリックなインターネット宛てに通信すると、その通信が Gateway を経由するようになったの。

今までどうだったの?

これまで Zero Trust のトラフィックポリシー(DNS・HTTP・Network・egress)は、WARP を使う端末には効いていたけど、Workers 自身が外に出す通信には同じルールを当てられなかったの。だから「この Worker、どこに何を送ってるんだろう?」を Gateway 側から見たり止めたりするのは、ちょっと大変だったんだよね。

これで何が変わるの?

これからは WARP ユーザーと同じ感覚で、Workers の通信にもポリシーが効くようになるよ!標準で付いてくるのはこの 2 つ。

  • 可視化:Worker の egress が Gateway の DNS・HTTP・Network ログに、ほかのトラフィックと並んで出てくるの。いつ・どこを呼んだのか監査できるよ。
  • 強制:セレクタが Worker のリクエストにマッチする既存のポリシーは、そのまま適用されるよ。許可/ブロックリスト、DNS カテゴリのフィルタ、HTTP の宛先ルールなんかもね。すでに社内向けにブロックしてるカテゴリがあれば、Workers もそのブロックを引き継ぐの。

深く潜ってみよう

通信の流れはこんな順番だよ。Worker が env.EGRESS.fetch() を呼ぶ → VPC バインディング → Cloudflare Meshcf1:network で束ねる → Cloudflare Gateway でポリシー適用 → パブリックインターネット。

設定はいつもの wrangler ファイルに VPC ネットワークのバインディングを足すだけ。

{
  "vpc_networks": [
    {
      "binding": "EGRESS",
      "network_id": "cf1:network",
      "remote": true
    }
  ]
}

あとはコードから普通に fetch するだけで、その通信がポリシーの対象になってログにも残るよ。

// パブリック宛ての egress。Gateway ポリシーの対象になってログされる
const response = await env.EGRESS.fetch("https://api.example.com/data")

記録は Gateway のログ から確認できるよ。

まとめ

  • network_id: "cf1:network" の VPC Network バインディングを持つ Worker の egress が、Cloudflare Gateway 経由になったよ
  • 既存の Zero Trust ポリシー(DNS・HTTP・Network)が、Workers の通信にもそのまま効くの
  • Worker の外向き通信が Gateway のログに出るから、監査もしやすくなったよ
  • 設定は wrangler に VPC バインディングを足して env.EGRESS.fetch() するだけ

Cloudflare でゼロトラストを運用しながら Workers も使ってる人には、通信の統制と可視化が一気に楽になる嬉しいアップデートだね!