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

Cedar入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 Cedar入門

Avatar for 赤神青空

赤神青空 PRO

August 08, 2026

Video

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪AWS生まれ、いまはCNCFのOSS Cedar=認可ポリシー言語 認可の判定だけのために設計されたドメイン特化言語。 AWSが開発しOSS化(Apache 2.0)、Rust製で判定はミリ秒オーダー 採用サービスの「中の言語」でもある Amazon Verified Permissions(AVP) Amazon

    Bedrock AgentCore のPolicy CNCF(Kubernetesなどを預かる中立財団)に加入 =AWSが手を引いても残る言語になった 設計目標は「表現力・速度・安全性・解析可能性」の4点 今ココ Cedarとは 6/29
  2. ▪共有ダイアログの正体 あなたは毎日「ポリシー」を書いている 共有:「企画書.docx」 あ あおい(⾃分) オーナー デ デザインチーム 閲覧者 ひ

    ひかる 編集者 ⾒慣れたあの画⾯。実はこれが… permit (principal == User::"aoi", action, // ぜんぶ resource == Doc::"企画書"); permit (principal in Group::"design", action == Action::"viewDoc", resource == Doc::"企画書"); permit (principal == User::"hikaru", action in [viewDoc, editDoc], resource == Doc::"企画書"); …認可ポリシーの集合そのもの 共有設定の1行1行が、そのまま認可ポリシー1本1本に対応する 今ココ Cedarとは 7/29
  3. ▪認可の問いを4要素に分解する PARCモデル Cedarのポリシーは、すべてこの4つの語彙で書かれる。 P A R C 誰が。 User::"hikaru" など

    何をする。 Action::"editDoc" など 何に対して。 Doc::"企画書" など どんな状況で。 リンク共有経由・時刻など Principal 今ココ Cedarとは Action Resource Context 8/29
  4. ▪アプリは「尋ねる」だけ 判定のしくみ 認可リクエスト P:誰が ポリシー集合 permit / forbid たち Allow

    User::"hikaru" A:何をする Action::"editDoc" 認可エンジン R:何に対して Doc::"企画書" C:どんな状況で Cedar 許可(permitに合致) { via: "リンク共有" } Deny 拒否(既定値‧forbid) PARCの4つ組を渡すと、ポリシー集合に照らして Allow / Deny が返る 今ココ Cedarとは 9/29
  5. ▪認可の書き方の二大流派 RBAC と ABAC RBAC(役割ベース) 「役割」で許可を決める 例:編集者グループなら編集できる 分かりやすいが、例外が増えると 役割が無限に増殖する ABAC(属性ベース)

    「属性」の条件式で決める 例:文書の所有者本人なら削除できる 役割を増やさず例外を表現できるが 条件が読み解きにくくなる Cedarはどちらも同じ文法で書けて、混ぜられる。これが強み。 今ココ 書いてみる 12/29
  6. ▪この潔さがCedarの安全性の核 評価規則は2行で言える デフォルトは拒否。 そして forbid は permit に必ず勝つ。 書き忘れ=拒否 permitを書かない限り、何も許可されない

    例外は上書き不能 「アーカイブ済みは編集禁止」をforbid1本で保証できる 「うっかり許可」が構造的に起きにくいように言語が設計されている。 今ココ 書いてみる 15/29
  7. ▪切り出した代償を、宣言で払い戻す スキーマ:型チェックを取り戻す 外に出したポリシーは、放っておくとただの文字列。 owner を ownerId と書き間違えても、誰も怒ってくれない。 rust entity User

    in [Group]; entity Document in [Folder] { owner: User, archived: Bool // ← 階層はここで宣言 // ← 属性の型もここで }; action editDoc appliesTo { principal: User, resource: Document }; この宣言があるから、次の階層ポリシーが書けて、後半の形式検証も動く 今ココ 書いてみる 17/29
  8. ▪グループ階層で「まとめて」許可する × フォルダ Group::"design-team" Folder::"proposals" User::"aoi" Doc::"企画書" User::"hikaru" User::"sora" ほか計6⼈

    principal in で全員を指す × 6⼈ × 3件 Doc::"⾒積書" Doc::"議事録" resource in で配下すべてを指す 18通りの許可が、この1本に畳み込まれる permit (principal in Group::"design-team", action == Action::"viewDoc", resource in Folder::"proposals"); 「フォルダごとチームに共有」も、in を2箇所使うだけで表せる 今ココ 書いてみる 18/29
  9. ▪検証駆動開発(VGD) 1F:Cedar自身はこう作られた 形式化 評価器・認可器の モデルをLeanで書く なぜ信用できるか 性質を証明 → 定理証明 forbid優先などを

    数学的に保証 この体制で計25件のバグを発見・修正(証明で4件、テストで21 件)。レビューもテストもすり抜けたものたち。 今ココ 形式検証 実装と照合 → ランダム入力で 差分テスト Rust実装と突き合わせ つまり 「forbidが勝つ」は仕様書の約束ではなく、証明済みの定理。 24/29
  10. ▪cedar-policy-symcc 2F:SymCCに「問い」を投げる ポリシー集合をSMT論理式に翻訳し、総当たりせずに全入力を調べる。聞けるのは6種類。 1本のポリシーについて聞く 「エラーで落ちることはない?」(never errors) 「誰も通れない/誰でも通れる?」(always denies / allows)

    2つの集合を見比べて聞く 「同じ挙動?」(equivalent)・「含まれる?」(implies) 「絶対に重ならない?」(disjoint) 答えがNoなら、SMTソルバが「破れる具体例」をリクエストの形で返す 今ココ 形式検証 26/29