チームにAIエージェントが加わった時代の権限設計

Cloudflare Developer Platform上では、チームメンバーだけでなくAIエージェントがアプリケーションをデプロイするケースが増えています。ここで最も避けたいのは、エージェントが必要以上の権限を持ち、本番環境を書き換えてしまう事故です。

従来はアカウント単位の権限しかなく、「このWorkerだけ触らせたい」という要件に応えられませんでした。今回のアップデートで特定のWorker単位でスコープできるようになり、ロールも4種類に細分化されました。

根拠資料: Cloudflare Workers Granular Authorization

本記事では、新ロール4種と実務での組み合わせ方を整理します。

Cloud infrastructure dashboard showing Cloudflare Workers resource-level access control settings Dev Environment Setup

追加された4つのロール

ロールできること利用シーン
Metadata Read-Onlyリソース一覧・設定・メトリクス/ログ/トレースの閲覧(コンテンツは不可)デバッグ用の可観測性データのみ付与したい場合
Content Read-OnlyWorkerコードやD1データの読み取り(変更不可)コードレビュー用エージェントやメンバーにソースを公開する場合
Editorコンテンツの読み書き・設定変更(作成・削除は不可)CI/CDやデプロイ自動化への権限付与
Adminリソースの作成・改名・削除・権限付与まで完全制御該当Workerの完全な管理が必要な場合

スコープは3階層

ロールは次のいずれかのスコープに適用されます。

  • Developer Platformレベル: 全リソースのメタデータ
  • プロダクトレベル: 特定プロダクト(例: 全Worker)のメタデータ
  • リソースレベル: 特定のWorker 1つのメタデータ

APIトークンでWorker単位の権限を付与する例

# 特定のWorkerにのみスコープされたAPIトークンを作成
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tokens" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "name": "deploy-my-worker-only",
    "policies": [{
      "effect": "allow",
      "resources": {
        "com.cloudflare.api.account.worker": {
          "<WORKER_ID>": "*"  # このWorkerにのみスコープ
        }
      },
      "permission_groups": [
        { "name": "Workers Scripts Edit" }  # Editorロール相当
      ]
    }]
  }'

このトークンであれば、仮にエージェントが侵害されても被害範囲は該当Worker 1つに限定されます。まさに最小権限の原則(Principle of Least Privilege)の実践です。

Developer configuring API token scoped to specific Cloudflare Worker with role-based permissions Software Concept Art

実務でよく使う3つのシナリオ

1. ソースを露出せずデバッグのみ

障害対応エージェントに Metadata Read-Only を付与すれば、メトリクス・ログ・トレースは閲覧可能ですがWorkerコードは見えません。GraphQL Analytics API経由でも、権限範囲内のWorkerデータのみ返却されます。

2. コードレビューは可、デプロイは不可

レビューボットに Content Read-Only を付与すれば、コードは読めてもデプロイや設定変更はできません。D1・R2・KVにも同様の分離が順次適用される予定です。

3. CI/CDにデプロイ権限だけを

ワークフローごとに Editor ロールのトークンをWorker単位で発行すれば、トークン漏洩時も他のWorkerを変更・削除できません

⚠️ 注意点: Routes & Custom Domainsは別権限

ここが落とし穴です。Workerに Editor 権限があっても、ルートやカスタムドメインの変更にはzoneレベルの Workers Routes 権限が別途必要です。本番トラフィックをリダイレクトしうる機微な操作だからです。

// wrangler.jsonc - ルート設定例
{
  "route": {
    "pattern": "example.com/*",
    "zone_name": "example.com"
  }
}

逆に、ルートが既に設定済みであれば、その接続を変更しないデプロイはzone権限なしで可能です。つまりCI/CDにドメイン権限を渡す必要はありません。

Durable ObjectsはWorker権限に従う

DOには専用ロールがなく、実装したWorkerの権限をそのまま継承します。メトリクス・ログは Metadata Read-Only で十分ですが、Data Studioで保存データを照会・変更するには Editor が必要です。

403エラーが親切になりました

権限不足時には、必要な権限とドキュメントリンクを返すようになりました。エージェント自身が必要な権限を把握できるため、過剰な権限を事前付与する必要がなくなります。

Serverless edge computing platform with granular RBAC roles for Workers D1 and R2 resources Development Concept Image

日本開発コミュニティにおける適用文脈

日本の受託開発やSIer案件では、まだ「アカウントに1つのAdminトークン」を共有する運用が残っているケースがあります。特に外部パートナーが混在するプロジェクトでは、リソース単位のスコープがセキュリティ監査対応にも有効です。ただしTerraform管理の場合は、providerバージョンとスキーマ互換性を先に確認してください。

この技術の限界

  • レガシーロール(Workers Platform Admin等)はdeprecation日程が未定。既存割り当ては継続動作するため、移行を急ぐ必要はありません。
  • D1・R2・KVへの拡張はロードマップであり、現時点ではWorkers中心です。
  • User Groupを活用すれば個別割り当てより管理負荷を軽減できます。

次の学習ステップ

  1. 公式ドキュメントでレガシー→新ロールのマッピング表を確認し、既存トークンを置換
  2. エージェントごとに最小権限トークンを発行するテンプレートを整備
  3. Terraformでリソースレベルポリシーをコード化

あわせて読みたい

本コンテンツは、信頼性の高い情報源をもとにAIツールを活用して作成され、編集者によるレビューを経て公開されています。専門家によるアドバイスの代替となるものではありません。