Cloudflare Workers が Access で一発ガードできるようになったよ!
やっほー、しぃちゃんだよ! 今日は Cloudflare から、社内向けの Worker をうっかり公開しちゃう事故を防げる新機能が出たから、わくわくしながら紹介するね!
Cloudflare Blogなにが発表されたの?
Cloudflare Blog で発表されたのは「Cloudflare Access for Workers」だよ。Access のポリシーを Worker に直接アタッチできるようになって、そのポリシーはカスタムドメインだけじゃなく、ルート・workers.dev のサブドメイン・プレビュー URL まで、その Worker が動くところ全部に自動で適用されるようになったの。
背景には、AI を使ったコーディングでアプリを作るスピードがどんどん上がっている一方で、開発者が社内向けのデータをうっかりパブリックなインターネットに露出させてしまうリスクが増えている、という問題意識があるみたい。
今までどうだったの?
Worker って、カスタムドメイン・ルート・workers.dev サブドメイン・プレビュー URL みたいに、いろんな入り口からアクセスできちゃうよね。これまではその入り口ひとつひとつに対してアクセス制御を意識して設定する必要があって、どこか一箇所でも設定を忘れると、本来は社内限定のはずの Worker がそのままインターネットに公開されちゃう、なんてことが起こり得たの。
これで何が変わるの?
Cloudflare Access for Workers を使うと、次の 2 つのレベルでポリシーを設定できるようになるよ。
- アカウントレベル: いま動いている Worker も、これから作る Worker も、まとめてデフォルトで会社のログインを要求できる。プレビュー URL だけを守るのか、本番トラフィックまで含めて守るのかも選べる
- 単一 Worker レベル: 特定の Worker にポリシーを付けると、その Worker がどのドメイン経由でアクセスされても認証が必須になる
さらに Workers for Platforms を使っている場合は、ディスパッチ Worker にアクセスポリシーを設定するだけで、そのプラットフォーム上で動く全部の Worker をデフォルトでプライベートにできるの。プラットフォーム側の設定だけで配下の Worker がまとめて守られるのは、運用側としてはすごく助かるポイントだよね。
深く潜ってみよう
複数のポリシーが重なったときの優先順位もちゃんと決まっていて、ホスト名レベルのポリシー → Worker 単位のポリシー → アカウント単位のポリシー、の順で優先されるよ。細かく指定したルールほど強い、っていうシンプルな考え方だね。
Worker のコード側では、認証済みユーザーの情報を JWT の検証なしにそのまま取得できるようになっているの。
const identity = await ctx.access.getIdentity();
これでメールアドレス・名前・グループといった情報にアクセスできるから、ユーザーごとに表示を変えたり、権限をチェックしたりする処理を書きやすくなるよ。
ローカル開発の段階でも、wrangler.jsonc にアクセスブロックを追加しておけば、いろんなユーザーを想定した動作確認ができるから、デプロイする前に挙動を確かめられるのも嬉しいポイント。
認証まわりは、既存の ID プロバイダーとの連携はもちろん、特定のメールアドレス・ドメイン・グループでの絞り込み、サービストークンを使ったエージェント向けアクセスの許可にも対応しているよ。
この仕組みを支えているのが、Rust ベースの新しいモジュラープロキシ「FL2」なんだって。Worker のルーティング処理を実行フェーズから切り離したことで、アクセス制御の側が「どの Worker 宛てのリクエストか」を把握できるようになった、というのが技術的なポイントみたい。
まとめ
- Access のポリシーを Worker に直接アタッチできるようになった
- カスタムドメイン・ルート・workers.dev・プレビュー URL、どこ経由でも自動で保護される
- アカウント単位・Worker 単位でポリシーを設定でき、優先順位はホスト名 > Worker > アカウント
ctx.access.getIdentity()で JWT 検証なしにユーザー情報が取れる- Workers for Platforms ならディスパッチ Worker 側の設定だけで配下を丸ごとプライベートにできる
社内向けのツールや管理画面を Workers でサクッと作っている人、AI 補助でどんどんアプリを量産してる人には、うっかり公開事故を防げる心強い機能だと思うよ!