コンテンツにスキップ

レシピ: least-privilege drift をトリアージする

目的: drift の結果 — エージェントが できる ことと、実際に 観測された こととのギャップ — を、diff が静かになるまで、一定の周期で判断に変えていく。

Terminal window
curl -ks "$BASE/v1/m/accessmap/drift" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" | python3 -m json.tool

(または、PR でのレビュー用に HCL で: Terraform データソース olivares_access_edgesinclude_drift = true を指定 — コードとして管理する。)

結果には三つのクラスがあり、それぞれ異なる問題である:

クラス意味問うべき問い
Unexpected access観測されたが、どの grant もそれをカバーしていないこれは欠落した grant か、それとも本物の違反か?
Unused grant付与されたが、行使が一度も観測されていないなぜこの権限が存在するのか?
Reconciliation pending観測されたが、エージェント↔identity のリンクが未解決これは identity の問題であり、(まだ) セキュリティの問題ではない

Unexpected access — 行動する前にエッジの honesty 軸を読む:

  • attribution_tier: firm + coverage_tier: clean は得られる中で最も 高品質な finding である: 特定の identity が特定のリソースに触れ、 そのストア自身の監査がそれを分類した。判断する: 正当であれば grant (ポリシーまたは binding) を宣言してマップが意図を反映するようにする; そうでなければ基底のアクセスを revoke し、インシデントとして扱う。
  • approximate の attribution は アクセス が起きたことは意味するが、 誰が は共有クレデンシャルであることを意味する。「どのエージェントだったか」 に調査を費やしてはならない — 永続的な修正は エージェントごとの identity であり、 それまではエッジは証明できないことを正直に述べる。
  • mcp_annotation のヒントのみに依拠するエッジは 証拠ではない — そのヒントは仕様上信用されていない。何かを判断する前に、観測された ソースで裏付けを取ること。

Unused grants はタダで見つかる過剰プロビジョニングである: それぞれが revoke の候補だが、観測の不在が意味を持つのはカバレッジが存在する場合に 限るという但し書きがある — 喜ぶ前にリソースのカバレッジ層を確認すること (階層化されたカバレッジ)。

Reconciliation pending は identity のバックログへ回る: そのクレデンシャルを バインドすべき roster ソースを組み込むか修正すれば、次のパスでエッジは解決する。

3. 判断し、記録し、再確認する

Section titled “3. 判断し、記録し、再確認する”

判断はそれがガバナンスされる場所で下す: grant をコードとして宣言する (Terraform) か、ガバナンスされた API 経由で宣言し、 リスクの高い方向は 承認 の背後にゲートし、 誰が何を判断したかを ledger に記録させる。それから drift を再取得する: reconcile されたエッジは diff から外れ — 本物のギャップだけが残る。その収束こそが 眼目である; デモ estate がそれを小規模に示している (quickstart)。

コンソールでは、Access mapPermitted vs observed パネルがこのレシピを ライブで描画したものである。

drift のトリアージは、短い週次ループに加えて、高シグナルのクラス (firm + clean の予期しない書き込み) 向けのアラート経路として機能する。 それらの finding は週次パスを待たずに、 通知先 経由で on-call に回すこと。