Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Cedar入門
Search
赤神青空
PRO
August 08, 2026
Video
Programming
33
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cedar入門
赤神青空
PRO
August 08, 2026
Video
More Decks by 赤神青空
See All by 赤神青空
【基本情報対策】CPU・メモリ・キャッシュ
akagami
PRO
0
9
【AIニュース】Anthropic が Git から Scion に移った理由
akagami
PRO
0
16
【AIニュース】Grok Voice 3.0 とは何か
akagami
PRO
0
18
【基本情報対策】探索・整列と計算量
akagami
PRO
0
13
【AIニュース】GPT-6 の Intelligent UI とは何か
akagami
PRO
0
20
【基本情報対策】スタック・キュー・木
akagami
PRO
0
16
【基本情報対策】AI・機械学習の基礎
akagami
PRO
0
22
【基本情報対策】浮動小数点と誤差
akagami
PRO
0
22
【AIニュース】Claude for Google Workspace とは何か
akagami
PRO
0
33
Other Decks in Programming
See All in Programming
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
880
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
390
ChromeでローカルLLM
ryu1013
0
140
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Writing Fast Ruby
sferik
630
63k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
The browser strikes back
jonoalderson
0
1.8k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Skip the Path - Find Your Career Trail
mkilby
1
260
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Building Applications with DynamoDB
mza
96
7.2k
Transcript
2026年08月08日(土) Cedar入門 認可を「言語」にする 赤神 青空
▪認可はどこに書かれているか ある日の実装 「このドキュメント、この人は編集していいんだっけ?」 の答えが、APIハンドラのif文の中にしかない。 所有者チェック doc.owner == user.id がハンドラごとに手書き 共有リストの参照
編集者リストの照合が、別の場所にもう1つ 共有機能が育つたび、同じ判定がコードのあちこちに散らばっていく。 今ココ はじめに 2/29
▪散らばせるか、集約するか 認可ロジックの置き場所 ✕ コードに埋め込む 判定がハンドラごとに重複する 「今どんなルールか」を一覧できない 変更のたびに全箇所を探して直す ◯ ポリシーとして外に出す ルールが1箇所に宣言的に集まる
コードと独立に監査・変更できる さらに「正しさ」を機械検証できる この右側を実現する言語が、今日の主役のCedarです。 今ココ はじめに 3/29
▪Cedarが引き受けるのは後者だけ 前提:認証と認可は別物 この2つの区別が、今日の話ぜんぶの土台になる。 01 02 03 あなたは誰か。 Cognito・OAuthの仕事 あなたに何が許されるか。 ここがCedarの守備範囲
「誰か」は変わらないが 「何が許されるか」は頻繁に変わる 認証(AuthN) 今ココ はじめに 認可(AuthZ) 分ける理由 4/29
01 Cedarとは 生まれと現在地 今ココ Cedarとは 5/29
▪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
▪共有ダイアログの正体 あなたは毎日「ポリシー」を書いている 共有:「企画書.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
▪認可の問いを4要素に分解する PARCモデル Cedarのポリシーは、すべてこの4つの語彙で書かれる。 P A R C 誰が。 User::"hikaru" など
何をする。 Action::"editDoc" など 何に対して。 Doc::"企画書" など どんな状況で。 リンク共有経由・時刻など Principal 今ココ Cedarとは Action Resource Context 8/29
▪アプリは「尋ねる」だけ 判定のしくみ 認可リクエスト P:誰が ポリシー集合 permit / forbid たち Allow
User::"hikaru" A:何をする Action::"editDoc" 認可エンジン R:何に対して Doc::"企画書" C:どんな状況で Cedar 許可(permitに合致) { via: "リンク共有" } Deny 拒否(既定値‧forbid) PARCの4つ組を渡すと、ポリシー集合に照らして Allow / Deny が返る 今ココ Cedarとは 9/29
▪permitの3点セット 最小のポリシー 「ひかるは、企画書を、閲覧してよい」をそのまま書く。 rust permit ( principal == User::"hikaru", action
resource == Action::"viewDoc", == Document::"企画書" ); 今ココ Cedarとは 10/29
02 書いてみる RBAC・ABAC・評価規則 今ココ 書いてみる 11/29
▪認可の書き方の二大流派 RBAC と ABAC RBAC(役割ベース) 「役割」で許可を決める 例:編集者グループなら編集できる 分かりやすいが、例外が増えると 役割が無限に増殖する ABAC(属性ベース)
「属性」の条件式で決める 例:文書の所有者本人なら削除できる 役割を増やさず例外を表現できるが 条件が読み解きにくくなる Cedarはどちらも同じ文法で書けて、混ぜられる。これが強み。 今ココ 書いてみる 12/29
▪in がメンバーシップを表す RBAC:グループで許可する 「デザインチームの全員が、企画書を閲覧・コメントできる」。 rust permit ( principal in Group::"design-team",
action in [Action::"viewDoc", Action::"commentDoc"], resource == Document::"企画書" ); 今ココ 書いてみる 13/29
▪when句が条件を受け持つ ABAC:属性で絞る 「所有者本人だけが、削除できる」。 役割を新設せず、属性の比較だけで例外を表す。 rust permit ( principal, action ==
Action::"deleteDoc", resource ) when { resource.owner == principal }; 今ココ 書いてみる 14/29
▪この潔さがCedarの安全性の核 評価規則は2行で言える デフォルトは拒否。 そして forbid は permit に必ず勝つ。 書き忘れ=拒否 permitを書かない限り、何も許可されない
例外は上書き不能 「アーカイブ済みは編集禁止」をforbid1本で保証できる 「うっかり許可」が構造的に起きにくいように言語が設計されている。 今ココ 書いてみる 15/29
▪横断的な禁止事項を1本で forbidの使いどころ どれだけ共有されていても、この1本がアーカイブ済み文書の編集を止める。 rust forbid ( principal, action == Action::"editDoc",
resource ) when { resource.archived == true }; 今ココ 書いてみる 16/29
▪切り出した代償を、宣言で払い戻す スキーマ:型チェックを取り戻す 外に出したポリシーは、放っておくとただの文字列。 owner を ownerId と書き間違えても、誰も怒ってくれない。 rust entity User
in [Group]; entity Document in [Folder] { owner: User, archived: Bool // ← 階層はここで宣言 // ← 属性の型もここで }; action editDoc appliesTo { principal: User, resource: Document }; この宣言があるから、次の階層ポリシーが書けて、後半の形式検証も動く 今ココ 書いてみる 17/29
▪グループ階層で「まとめて」許可する × フォルダ 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
▪テンプレート=動的な許可付与のしくみ 許可は、実行中に増えたり減ったりする ここまではあらかじめ書いておくルールの話だった。 でも共有ボタンは、ユーザーが押した瞬間に許可を1本増やしている。 穴あきポリシー(?principal / ?resource)を用意しておく 共有ボタン=穴に値を差して、ポリシーを1本生成 共有解除=生成したその1本を消す なぜ「テンプレート」という仕組みが要るのか
生成されるのは値だけ。ルールの形は開発者が握ったまま テンプレートを直せば、生成済みの全部に一括反映 認可ルールを、アプリの機能としてユーザーに開放できる 今ココ 書いてみる 19/29
▪組み込みか、マネージドか どうやって使うか ライブラリとして組み込む Rust crate(各言語バインディングあり) アプリ内で完結、追加コストなし ポリシーの保管・配布は自前 AVPに任せる ポリシーストアをAWSが管理 完全従量課金(2025年に大幅値下げ)
Cognitoトークン連携が組み込み どちらでもポリシーの書き方は同じ。移行も現実的。 今ココ 書いてみる 20/29
03 正しさを証明する Cedarが「形式」と呼ばれる理由 今ココ 形式検証 21/29
▪なぜ数学の出番なのか 認可のバグは、テストで見つけにくい テストは「試したケース」しか守れない。 認可で怖いのは試していない組み合わせのほう。 見つけにくい ポリシーが増えるほど、意図しない許可の隙間は組み合わ せの闇に沈む 形式検証なら すべての入力について成り立つ・成り立たないを数学的に 判定できる
Cedarはこの検証が可能なように、言語自体が設計されている。 今ココ 形式検証 22/29
▪誰が、何を検証するのか 検証は「2階建て」になっている ここから先、検証の対象が2つ出てくる。混ざりやすいので先に分けておく。 1F 2F 共通 認可エンジンにバグがないか。 AWSがすでにやってくれた 書いたルールが意図通りか。 あなたが自分でやる
Lean(定理証明支援系)と SMTソルバ Cedar自身の正しさ 今ココ 形式検証 あなたのポリシーの正しさ 支えている道具は同じ 23/29
▪検証駆動開発(VGD) 1F:Cedar自身はこう作られた 形式化 評価器・認可器の モデルをLeanで書く なぜ信用できるか 性質を証明 → 定理証明 forbid優先などを
数学的に保証 この体制で計25件のバグを発見・修正(証明で4件、テストで21 件)。レビューもテストもすり抜けたものたち。 今ココ 形式検証 実装と照合 → ランダム入力で 差分テスト Rust実装と突き合わせ つまり 「forbidが勝つ」は仕様書の約束ではなく、証明済みの定理。 24/29
▪2Fへ では、自分の書いたポリシーは? エンジンが正しくても、 書いたルールが意図通りかは別の問題。 例えば 「整理したつもりが、実は誰も削除できなくなっていた」 ここでも 同じ武器が使える。Cedarは解析できるように設計されて いる そのための道具が、次に出てくるSymCC。
今ココ 形式検証 25/29
▪cedar-policy-symcc 2F:SymCCに「問い」を投げる ポリシー集合をSMT論理式に翻訳し、総当たりせずに全入力を調べる。聞けるのは6種類。 1本のポリシーについて聞く 「エラーで落ちることはない?」(never errors) 「誰も通れない/誰でも通れる?」(always denies / allows)
2つの集合を見比べて聞く 「同じ挙動?」(equivalent)・「含まれる?」(implies) 「絶対に重ならない?」(disjoint) 答えがNoなら、SMTソルバが「破れる具体例」をリクエストの形で返す 今ココ 形式検証 26/29
▪リファクタリングの安全網 いちばん効くのは equivalent ポリシーを整理・書き換えたあと、 check_equivalent で「挙動が変わっていない」ことを証明できる。 これまで 書き換え後の挙動は、テストケースのぶんだけ祈る SymCC後 全入力で等価と証明、違えば反例が具体的に出る
認可の書き換えが、怖い作業から普通の作業になる。 今ココ 形式検証 27/29
▪principalいま、認可の前提が変わりつつある が人間とは限らなくなった これまで principal は人間だった。 いまそこにAIエージェントが入ってくる。 何が困るか エージェントはユーザーの代理で動く。本人の全権限をそ のまま渡すわけにはいかない どう解くか
ツール呼び出しそのものを action として認可の対象にする その認可基盤に Cedarが選ばれている(AgentCore、cedar-for-agents)。 今ココ おわりに 28/29
▪今日はこれだけ まとめ 01 認可はコードから切り出せる if文の散らばりは、PARCの語彙でポリシーに集約できる。 02 デフォルト拒否・forbid優先 2行の評価規則が「うっかり許可」を構造的に防ぐ。 03 正しさは証明できる
SymCCで等価性まで機械判定。しかも検証器自体がLeanで証明済み。 今ココ おわりに 29/29