テック技報最新号へ →
インフラ

Cloudflare Cloud Workload Security: クラウド API を叩く前にプロキシで止める(例: R2 バケットの公開を禁止)

自分の環境で cws-proxy を動かし、CLI や CI、エージェントのクラウド API リクエストをそこに通すと、Wirefilter のフィルターと Rego のチェックで危ない操作だけを 403 で弾ける(2026-10-19 にベータ公開)。

@CFchangelog · 投稿 2026-10-19
#infra#cloudflare#zero-trust#r2#aws#policy-as-code#rego#agents

どんなときに使う?

  • 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 の流れ)

  1. Linux に cws-proxy を入れる(Cloudflare の APT/DNF リポジトリを追加して apt install cws-proxy)
  2. ダッシュボードの Cloud Workload Security > Policies でポリシーを作る。フィルター例:
    txt
    application.name == "Cloudflare" and application.service == "r2" and application.operation == "r2-put-bucket-public-policy"

    Rego は「公開を オフにする リクエストだけ通す」:

    rego
    package policy.cf_r2_no_public_access
    default valid := false
    valid if {
      input.http.request.body.enabled == false
    }
  3. Policy set を作ってポリシーを付け、Enforce をオンにする
  4. Deployment を作って Policy set を付け、Default mode を Default allow(対象外の操作は通す)にする。Deployment ID と Account ID を控える
  5. Cloud Workload Security Deployment 権限のアカウント API トークンを作る(プロキシが設定を読むためだけのもの。クラウド操作の権限はクライアント側の資格情報のまま)
  6. TLS 中継用の CA を用意する(テストなら openssl で自己署名 CA)。秘密鍵はプロキシのホストから出さず、クライアントには証明書だけ配る
  7. config.yaml に account_id・deployment_id・トークンを入れる 環境変数名(api_token_env)・listen_addr・CA のパスを書き、cws-proxy --config config.yaml --config-test で検証してから起動する
  8. クライアント側でプロキシを向ける:
    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"
  9. 確かめる: 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)にまとめられる

出典

X の元の投稿を開く