Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【AWS Dogwood入門】一語だけ違うポリシー

【AWS Dogwood入門】一語だけ違うポリシー

Avatar for 赤神青空

赤神青空

August 23, 2026

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪sum_within 一語だけ違うポリシー の1語を response に変えただけ すでに着金した額が $5,000 を超えていたら拒む。そう読めます。一見よさそうです。 dogwood forbid

    (principal, action == AgentCore::Action::"Transfer", resource) when temporal { sum_within(a, 1h, AgentCore::Action::"Transfer"::response{ input.amount: a }) > 5000 }; 今ココ 落とし穴 3/9
  2. ▪判定が起きるのは、送金を頼んだ時点 返事を待たずに投げると素通りする 上限は直近1時間で $5,000。2,000ドルの送⾦を、返事を待たずに3回頼む ← ここまでで3件とも判定ずみ。返事はまだ1件も返っていない 返事 1件⽬ 2件⽬ 3件⽬

    ✕ 返事 判定が起きるのは、この3か所(送⾦を頼んだ時点) 返事 sum_within( ... ::response ) ◯ sum_within( ... ::request ) 1件⽬ 合計 $0 → ALLOW 2件⽬ 合計 $0 → ALLOW 3件⽬ 合計 $0 → ALLOW 1件⽬ 合計 $2,000 → ALLOW 2件⽬ 合計 $4,000 → ALLOW 3件⽬ 合計 $6,000 → DENY 着⾦が済んだ送⾦だけを⾜す 頼んだ送⾦を全部⾜す(返事待ちも含む) 実際には $6,000 が出ていく 返事を待たずに投げれば、上限は素通りできる 3件⽬で⽌まる いま頼んでいる送⾦も、合計に⼊るため 違いは1語だけ。::response と書くか、::request と書くか 3件とも「まだ何も着金していない」状態で判定される 今ココ 落とし穴 4/9
  3. ▪同じトレースに、1語だけ違う2本を当てる 実際に replay した 1件目 2件目 3件目 4件目 結論 $2,000

    $2,000 $2,000 $2,000 3件目で割れた 今ココ 落とし穴 request版 ALLOW / response版 ALLOW request版 ALLOW / response版 ALLOW request版 DENY / response版 ALLOW request版 DENY / response版 ALLOW 説明どおりに再現できた 6/9
  4. ▪同じ理由で起きる、もう一つのずれ 自分も1回と数える 集計はいま判定中のリクエストも含む。だから数が1つずれます。 つい書いてしまう 「3回まで許可」のつもりで >= 3 と 書く 実際に起きること

    3回目の要求そのもので止まる 対処 しきい値の境界は replay で確かめ てから出す 返事待ちを数に入れるからこそ、境界が1つずれます。原因は同じです。 今ココ 落とし穴 7/9
  5. ▪同じトレースにしきい値だけ変えて当てる 境界を振ってみた >3 >= 3 >2 結論 4回目で DENY 3回目で

    DENY 3回目で DENY 自分も1回と数える 今ココ 落とし穴 実質3回まで許可 実質2回まで許可 実質2回まで許可 境界は replay で確かめてから出す 8/9
  6. ▪この回の持ち帰り まとめ 01 数えるなら request を数える 着金した分だけ数えると、着金する前に次が通ってしまいます。 02 自分も1回と数える 「3回まで」のつもりで

    >= 3 と書くと、3回目で止まります。 03 境界は replay で確かめる しきい値は机上で振ってから本番に出すのが安全です。 今ココ おわりに 9/9