Cloudflare Cloud Workload Security: クラウド API を叩く前にプロキシで止める(例: R2 バケットの公開を禁止)
自分の環境で cws-proxy を動かし、CLI や CI、エージェントのクラウド API リクエストをそこに通すと、Wirefilter のフィルターと Rego のチェックで危ない操作だけを 403 で弾ける(2026-10-19 にベータ公開)。
どんなときに使う?
- AI エージェントや CI に Cloudflare や AWS の API トークンを渡したいが、「バケットを公開する」「本番の設定を消す」といった操作だけは確実に止めたい
- IAM やトークンのスコープでは「この API は呼べるが、このパラメータでは呼べない」を書けないとき(CWS はリクエストのボディまで見て判定する)
- 本番アカウントだけ厳しく、検証アカウントは緩く、のように環境ごとに守り方を変えたいとき
仕組み
ダッシュボードで設定を作り、自分の環境で動かすプロキシがそれを読み込んで判定する。
| 部品 | 役割 |
|---|---|
| Workload | 対象リクエストを選ぶ再利用可能なフィルター(例: 本番アカウント宛て) |
| Policy | フィルター(Wirefilter)+ Rego チェック。valid が true なら通す |
| Policy set | ポリシーの束。Workload の含める/除外で適用範囲を決める。ポリシーごとに Enforce を入れたものだけ実際に遮断 |
| Deployment | プロキシが読む設定一式。Policy set、宛先ドメインの ACL、Basic 認証の資格情報、どのポリシーにも当たらないときの Default mode を持つ |
Proxy (cws-proxy) | TLS を中継して中身を検査し、設定を約 30 秒ごとに再取得する |
やり方(公式 Get started の流れ)
- Linux に
cws-proxyを入れる(Cloudflare の APT/DNF リポジトリを追加してapt install cws-proxy) - ダッシュボードの Cloud Workload Security > Policies でポリシーを作る。フィルター例:
txt
application.name == "Cloudflare" and application.service == "r2" and application.operation == "r2-put-bucket-public-policy"Rego は「公開を オフにする リクエストだけ通す」:
regopackage policy.cf_r2_no_public_access default valid := false valid if { input.http.request.body.enabled == false } - Policy set を作ってポリシーを付け、Enforce をオンにする
- Deployment を作って Policy set を付け、Default mode を Default allow(対象外の操作は通す)にする。Deployment ID と Account ID を控える
- Cloud Workload Security Deployment 権限のアカウント API トークンを作る(プロキシが設定を読むためだけのもの。クラウド操作の権限はクライアント側の資格情報のまま)
- TLS 中継用の CA を用意する(テストなら
opensslで自己署名 CA)。秘密鍵はプロキシのホストから出さず、クライアントには証明書だけ配る config.yamlにaccount_id・deployment_id・トークンを入れる 環境変数名(api_token_env)・listen_addr・CA のパスを書き、cws-proxy --config config.yaml --config-testで検証してから起動する- クライアント側でプロキシを向ける:
sh
export HTTPS_PROXY="http://127.0.0.1:8080" export NODE_USE_ENV_PROXY=1 export NODE_EXTRA_CA_CERTS="/abs/path/ca-cert.pem" - 確かめる:
cf r2 buckets domains managed update <bucket> --enabled trueが403とCWS.Errorで失敗し、--enabled falseは通れば成功
注意点
- ベータ。Zero Trust の契約が必要(Free プランで足りる)
- プロキシを通らない経路は守れない。
NO_PROXYでapi.cloudflare.comを除外していないか、エージェントが別の資格情報で直接叩けないかを確認する。権限の最小化(IAM・トークンのスコープ)の代わりではなく、その上に重ねる柵として使う - 遮断されるはずの操作が通ったら、プロキシ経由になっているか、Deployment に Policy set が付いているか、Enforce がオンかを見る
- 対象は Cloudflare に加えて AWS もある(テナント構造で AWS の root・OU・アカウントを Rego から参照できる)
- 共通の判定は
lib.パッケージの Rego モジュールに、設定値は Rego メタデータ(共有 JSON)にまとめられる
出典
- @CFchangelog · 2026-10-20
- Changelog: developers.cloudflare.com
- ドキュメント: developers.cloudflare.com