🧾

AIエージェントを組織で使い始めると、最初は慎重に権限を絞ります。けれど、数週間たつと「このリポジトリだけ」「このMCP serverだけ」「このautomationだけ」という例外が増えます。最初は妥当だった allow、長めに入れた token、調査のために開けた internet access、急ぎで許可した MCP write scope が、そのまま残ります。

この記事では、AIエージェントの 権限棚卸し を permission review として整理します。実行直前の承認は AIエージェント承認フロー設計ガイド、tool の危険度分類は AIエージェント tool risk tier 設計ガイド、ルールを配布する source-of-truth は AIエージェント policy as code 設計ガイド、MCP server 台帳は MCP サーバーカタログ設計ガイド に分けています。

今回の論点は、一度許可した権限を、いつ、何を見て、縮小・失効・継続するかです。

先に結論: 権限は設定ではなく期限付きの貸与にする

AIエージェントの権限を「設定ファイルに書いたら終わり」と扱うと、確実に広がります。便利な作業ほど、次も使うかもしれないという理由で残るからです。

私なら、AIエージェント向けの権限は次の5項目を持つ貸与として扱います。

項目ないと起きること
ownerplatform team / repo owner誰も失効判断しない
purposeweekly PR review / docs research別用途へ流用される
scoperepo、MCP server、domain、tool許可範囲が説明できない
expires_at2026-08-16例外が恒久化する
review_evidenceaudit log、usage、失敗理由感覚で継続される

権限棚卸しは、AIエージェントを疑うための儀式ではありません。運用が進んだあとも、最小権限へ戻せる状態を保つための設計です。

既存記事との役割分担

このテーマは既存記事と近く見えますが、責務を分けます。

記事扱うこと扱わないこと
承認フローsensitive tool call の直前に approve / reject する許可済みルールを月次で見直す
tool risk tiertool を read / write / external action へ分類する実際に使われた権限を失効させる
policy as codeルールを AGENTS.md、settings、eval、監視へ配る例外が残ってよいか判断する
MCP server catalogserver、owner、scope、review date を台帳化するClaude Code / Codex / automation 全体の権限を横断棚卸しする
permission review許可済み権限、例外、secrets、network、MCP scope を定期的に縮小する実行直前の yes / no 承認

つまり permission review は、運用後の掃除です。最初にきれいなルールを作っても、例外が増える現場では棚卸しがないと安全側へ戻れません。

棚卸し対象を5つに分ける

権限棚卸しで見る対象は、tool の許可だけでは足りません。最低でも次の5つに分けます。

対象見るもの判断
permission ruleallow / ask / deny、sandbox rule広すぎる allow を ask / deny へ戻す
MCP scopeserver、tool、OAuth scope、token owner未使用 server と write scope を外す
networkdomain allowlist、HTTP method、proxy log調査用 domain を閉じる
secret / envsetup secret、agent phase env、API tokenagent phase から外す、短命化する
automation lanescheduled task、background run、review queue無人実行に残す権限を絞る

ここで重要なのは、設定ファイルだけを見ないことです。設定上は狭く見えても、実際には環境変数、MCP token、connector、network allowlist、plugin、automation が別の面で広がっていることがあります。

Claude Code では managed settings と sandbox を別々に見る

Claude Code では、権限の面が複数あります。公式 docs では managed scope が最上位で、組織横断の security policy や compliance requirement に使うものとして説明されています。allowedMcpServersallowManagedMcpServersOnlyallowManagedPermissionRulesOnlystrictKnownMarketplacesstrictPluginOnlyCustomization のような設定もあります。

棚卸しでは、次の順で見ます。

claude_code_permission_review:
  managed_settings:
    - allowedMcpServers
    - deniedMcpServers
    - allowManagedMcpServersOnly
    - allowManagedPermissionRulesOnly
    - strictKnownMarketplaces
    - strictPluginOnlyCustomization
  project_settings:
    - permissions.allow
    - permissions.ask
    - permissions.deny
    - hooks
  sandbox:
    - filesystem.allowWrite
    - filesystem.denyRead
    - network.allowedDomains
    - network.deniedDomains
  evidence:
    - claude doctor
    - audit log
    - MCP usage log
    - denied / approved tool calls

たとえば .env の read を deny していても、別の shell command や MCP server から同等の情報へ到達できるなら、実質的には守れていません。Claude Code の sandbox は subprocess にも効く境界として扱えるため、permission rule だけでなく OS-level の filesystem / network 境界も一緒に棚卸しします。

Codex では environment と agent phase を分ける

Codex cloud では environment 設計が重要です。公式 docs では、environment variables は task 全体、つまり setup script と agent phase の両方に設定されます。一方で secrets は追加の暗号化で保存され、task execution のために復号されますが、setup scripts だけで使われ、security reasons により agent phase 前に削除されると説明されています。

これは permission review の基準として使えます。

置き場所棚卸し判断
setup script secretpackage install や private registry に必要なら残す。ただし owner と expiry を持つ
environment variableagent phase から見えてよい通常設定だけにする
production secretagent phase には原則置かない
staging token短命 token にし、work log review 前提で使う

Codex の agent internet access も同じです。公式 docs では agent phase の internet access は default off で、必要時に environment 単位で有効化します。リスクとして prompt injection、code / secret exfiltration、malware、license restriction が挙げられています。

棚卸しでは、domain allowlist を「今も必要か」で見ます。

codex_environment_review:
  environment: docs-research
  agent_internet_access:
    mode: allowlist
    domains:
      - developers.openai.com
      - docs.anthropic.com
      - modelcontextprotocol.io
    methods:
      - GET
      - HEAD
      - OPTIONS
  remove:
    - registry.npmjs.org # setup script onlyで十分
    - api.github.com # 今回のdocs調査には不要
  evidence:
    last_used_at: "2026-07-12"
    work_log_checked: true

調査のために開けた domain は、調査が終わったら閉じます。package install のために必要な通信は setup script に寄せ、agent phase には残さない方が棚卸ししやすいです。

MCP は server ではなく scope と token で見る

MCP では、server を許可して終わりにしない方がよいです。MCP Security Best Practices は token passthrough を anti-pattern として扱い、監査や trust boundary を壊すリスクを説明しています。

permission review では、MCP server ごとに次を見ます。

項目確認
server_idまだ使っているか
owner障害時と棚卸し時の責任者がいるか
toolsread tool と write tool が混ざっていないか
oauth_scopedownstream API に対して広すぎないか
token_audienceMCP server 向け token か
last_used_at直近で必要だったか
review_after次回棚卸し日があるか
kill_switch止め方が分かるか

特に write tool を持つ MCP server は、server allowlist だけでは粗すぎます。GitHub MCP なら read-only の issue 取得と comment 投稿は別物です。Notion や Slack でも、検索と投稿、draft 作成と公開は分けて見ます。

例外は必ず期限付きにする

AIエージェント運用で一番残りやすいのは例外です。

  • 今週だけ外部 docs を広く読ませたい
  • この repository だけ write を許可したい
  • この MCP server だけ beta のまま使いたい
  • この automation だけ夜間に PR を作らせたい

こういう例外は、禁止するより期限を持たせた方が現実的です。

permission_exception:
  id: ex-20260716-codex-docs-research
  owner: platform-team
  reason: "Codex cloud environment docs refresh"
  scope:
    environment: docs-research
    network_domains:
      - learn.chatgpt.com
      - code.claude.com
      - modelcontextprotocol.io
  allowed_until: "2026-07-30"
  review_evidence:
    - "work log has no secret exposure"
    - "no POST / PUT / PATCH / DELETE network requests"
  after_expiry: "remove domains unless renewed by owner"

例外に after_expiry がないと、期限が来ても誰も何をすればよいか分かりません。継続、縮小、削除のどれかまで書きます。

月次レビューで見る指標

最初から重い GRC workflow にしなくても、月次レビューはできます。私なら、まずこの8項目だけ見ます。

指標見る理由
allow rule count便利さで広がっていないか
deny / block countルールが現実に合っているか
approval override count承認が多すぎる権限を分類し直す
unused MCP server使われていない接続を外す
write tool usage外部副作用が増えていないか
agent internet domains調査後に閉じ忘れていないか
secret exposure eventagent phase に残っていないか
expired exception期限切れ例外が残っていないか

大事なのは、棚卸しを「全部読む会」にしないことです。監査ログ、MCP catalog、environment 設定、Claude Code managed settings、Codex work log から差分だけ見ます。

permission review record を残す

棚卸し結果は、長い議事録ではなく短い record にします。

permission_review:
  review_id: pr-20260716-agent-permissions
  period: "2026-06-16..2026-07-16"
  reviewer: platform-team
  scope:
    - claude_code_managed_settings
    - codex_cloud_environments
    - mcp_server_catalog
    - scheduled_automations
  decisions:
    - target: "codex environment docs-research"
      decision: "shrink_network_allowlist"
      reason: "npm registry was setup-only; agent phase did not need it"
    - target: "github MCP write tools"
      decision: "keep_with_approval"
      reason: "used by PR review automation; all writes had approval IDs"
    - target: "temporary slack webhook"
      decision: "revoke"
      reason: "expired exception and no usage in 30 days"
  follow_up:
    - "update managed settings"
    - "rotate revoked webhook token"
    - "add eval for denied secret read"

この record は、監査ログほど細かくなくてよいです。ただし、何を継続し、何を縮小し、何を失効したかは残します。次回レビューで「なぜこの allow が残っているのか」を掘り返さなくて済むからです。

よくある失敗

1. 使われた権限だけを正当化する

使われたから必要、とは限りません。agent が楽をするために広い権限を使っただけかもしれません。棚卸しでは、同じ成果が narrower scope でできないかを見ます。

2. deny を増やして安心する

deny は必要ですが、deny だけで全体の安全性は決まりません。sandbox、MCP scope、network、secrets、automation lane を合わせて見ます。

3. MCP server を一括許可する

server を許可すると、その中の tool がまとめて安全になるわけではありません。read、draft、write、external action を分けます。

4. 例外をチケットだけで管理する

チケットに例外理由があっても、実際の設定に expires_atowner がなければ残ります。設定と catalog の両方に期限を持たせます。

5. レビュー結果を policy に戻さない

棚卸しで「これは危ない」と分かっても、managed settings、AGENTS.md、MCP catalog、eval、monitoring に戻さなければ次回も同じです。

導入手順

最初の permission review は、次の順で十分です。

  1. Claude Code / Codex / MCP / automation の権限面を1枚に並べる
  2. write / external action / secret / internet access だけを優先して見る
  3. すべての例外に owner、purpose、expires_at を付ける
  4. 30日使われていない MCP server と network domain を削る
  5. 継続する例外には review_evidence を残す
  6. 棚卸し結果を managed settings、environment、MCP catalog、eval へ戻す

最初から完璧な台帳を作る必要はありません。まず、広い権限が放置されない状態を作る方が大事です。

参考にした一次情報

まとめ

AIエージェントの権限管理は、最初に厳しいルールを書くことだけでは足りません。運用が進めば、例外、MCP scope、network allowlist、secrets、automation lane が少しずつ広がります。

permission review は、その広がりを定期的に戻すための仕組みです。owner、purpose、scope、expires_at、review_evidence を持たせ、使われていない権限は消し、必要な権限も狭くする。ここまでやって初めて、AIエージェントの便利さを組織で維持できます。

WRITTEN BY nidoneko

Full-stack engineer with 8+ years of experience in TypeScript, React, Node.js, and cloud-native development across healthcare, finance, HR, and IoT domains.

View Profile →