Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
入門Open Policy Agent: Policy as Codeを目指して / intr...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kurochan
September 16, 2021
Technology
0
680
入門Open Policy Agent: Policy as Codeを目指して / introduction-to-open-policy-agent
サイバーエージェントの社内エンジニアカンファレンス CA BASE CAMP 2021で発表した資料です
Kurochan
September 16, 2021
Tweet
Share
More Decks by Kurochan
See All by Kurochan
ABEMAのバグバウンティの取り組み
kurochan
1
780
2026年の個人的テーマ: 「計算機を燃やせ🔥」
kurochan
1
110
つなぐ、届ける、変える- コンテンツ配信の最前線ト——ク
kurochan
0
130
サイバーエージェント流クラウドコスト削減施策「みんなで金塊堀太郎」
kurochan
4
3.1k
AWS Elemental MediaPackageと格闘🤼
kurochan
2
96
サイバーエージェントでのSlack活用事例 @ 2025
kurochan
5
210
15年入社者に聞く! これまでのCAのキャリアとこれから
kurochan
1
360
入門 電気通信事業者
kurochan
13
5.8k
AWS x さくらのクラウドのハイブリッドクラウドによる安価なフレッツ閉域網接続の実装
kurochan
9
6.1k
Other Decks in Technology
See All in Technology
モジュラモノリス導入から4年間の総括:アーキテクチャと組織の相互作用について / Architecture and Organizational Interaction
nazonohito51
6
3k
Phase02_AI座学_応用
overflowinc
0
2.8k
_Architecture_Modernization_から学ぶ現状理解から設計への道のり.pdf
satohjohn
2
770
TUNA Camp 2026 京都Stage ヒューリスティックアルゴリズム入門
terryu16
0
370
A4)シラバスを超えて語る、テストマネジメント
moritamasami
0
130
事例から紐解くSHIFT流QA支援 ~大規模プロジェクトの品質管理支援、QA組織立ち上げ~ / 20260320 Nozomu Koketsu
shift_evolve
PRO
0
140
Astro Islandsの 内部実装を 「日本で一番わかりやすく」 ざっくり解説!
knj
1
280
スピンアウト講座06_認証系(API-OAuth-MCP)入門
overflowinc
0
1.1k
スケールアップ企業でQA組織が機能し続けるための組織設計と仕組み〜ボトムアップとトップダウンを両輪としたアプローチ〜
tarappo
4
370
Phase12_総括_自走化
overflowinc
0
1.5k
AI時代のIssue駆動開発のススメ
moongift
PRO
0
230
欠陥分析(ODC分析)における生成AIの活用プロセスと実践事例 / 20260320 Suguru Ishii & Naoki Yamakoshi & Mayu Yoshizawa
shift_evolve
PRO
0
390
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
130
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
280
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
89
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
150
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
770
Designing for Timeless Needs
cassininazir
0
170
Skip the Path - Find Your Career Trail
mkilby
1
89
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
150
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Transcript
גࣜձࣾαΠόʔΤʔδΣϯτ AIࣄۀຊ෦ ೖOpen Policy Agent Policy as CodeΛࢦͯ͠ ࠇ࡚ ༏ଠ
ࠇ࡚ ༏ଠ 2015 ৽ଔೖࣾ AIࣄۀຊ෦ DXຊ෦ ΞϓϦӡ༻ηϯλʔ @kurochan @kuro_m88 ج൫ٕज़ऀ
🆕 αΠόʔΤʔδΣϯτ CTO౷ׅࣨ #times_kurochan
ࠓճ͓͢Δ༰ • Open Policy Agentͱ͍͏ιϑτΣΞʹ͍ͭͯͷհ • Open Policy AgentೝՄͷจ຺Ͱհ͞ΕΔ͜ͱ͕ଟ͍͕ɺ ͏গ͠Ҿ͍ͯʮϙϦγʔʯͱ͍͏ࢹ͔Βհ
• ΞϓϦӡ༻ηϯλʔͰಋೖ͢Δ༧ఆ͕͋ΔͷͰ ఆ͍ͯ͠ΔϢʔεέʔεͷհ
1.Open Policy Agentͱ 2.Policy as Code 3.Open Policy Agentͷ͍ํ 4.Open
Policy Agentͷ͍ॴ 5.ΞϓϦӡ༻ηϯλʔͰͷ Open Policy Agentͷಋೖ༧ఆ
Open Policy Agentͱ
Open Policy Agentͱ • ܰྔͳ൚༻ͷʮϙϦγʔΤϯδϯʯ • ಠཱͯ͠ಈ͔͢͜ͱͰ͖Δ͠ɺαʔϏεʹϥΠϒϥϦͱͯ͠౷߹͢Δ͜ͱՄೳ • WebAssemblyαϙʔτͯͨ͠Γ •
OPAͱུ͞ΕΔ͜ͱ͕ଟ͍ • ΫΤϦʹରͯ͠ϙϦγʔΛద༻ɺ݁ՌΛੜ͢Δ • ϙϦγʔRegoͱ͍͏ݴޠͰੜ͢Δ
"Policy"ͱ • ϧʔϧͷू߹ • ೖྗΛ݅Ͱൺֱͨ͠Γ • rate limitͷΑ͏ʹಈతʹมΘΔΑ͏ͳͷͩͬͨΓ • ͦΕΒΛΈ߹ΘͤͨΓ
• ࠷ऴతʹԿ͔͠ΒͷҙࢥܾఆΛ͢Δ
ϙϦγʔΤϯδϯΛ͢Δͱ͍͏͜ͱ • ϙϦγʔͷ࣮͍͠ • ਖ਼࣮͘͠Ͱ͖·͔͢…ʁ • ෳࡶͳϙϦγʔϙϦγʔࣗମͷڍಈΛςετ͍ͨ͠ • ࠓճʮϙϦγʔΤϯδϯʯͱ͍͏෦͕༷ʑͳϢʔεέʔεʹద༻Մ ೳͰ͋Δ͜ͱΛ͓͠·͢
Policy as Code
Policy as Code • XXX as Code • Infrastructure as
CodeͳͲ • ϙϦγʔͦΕࣗମ͕γεςϜͷٕज़తͳ੍ηΩϡϦςΟͳͲɺ ॏཁͳࣝΛแ͍ͯ͠Δ • ΞϓϦέʔγϣϯίʔυதʹຒΊࠐ·ΕΔΑΓϙϦγʔͱͯ͠ ಠཱͯ͠ఆٛ͢Δ͜ͱͰ҉Խ͢Δ͜ͱ͙͜ͱ͕Ͱ͖Δ
Rego • ϙϦγʔΛهड़͢ΔͨΊͷݴޠ • ߏԽ͞Ε͍ͯͯ֊తͳσʔλߏΛ࣋ͯΔ • JSONͷΑ͏ͳߏѻ͑Δ • ϙϦγʔͷద༻݁Ռಉ༷ʹॊೈͳσʔλߏͰදݱͰ͖Δ •
ೖग़ྗͷσʔλߏ͕͔ͳΓࣗ༝ • ݅ࣜؔॆ࣮
Regoͷจ๏ྫ • งғؾ͚ͩհ͠·͢ • ਖ਼͍͠จ๏ެࣜυΩϡϝϯτΛࢀর͍ͯͩ͘͠͞ https://www.openpolicyagent.org/docs/latest/policy-language/
Regoͷจ๏ྫ: ม
Regoͷจ๏ྫ: Object
Regoͷจ๏ྫ: Rule
Regoͷจ๏ྫ: Rule
Regoͷจ๏ྫ: ݅ • ࢛ଇԋࢉɺ߸ɺෆ߸ɺϏοτԋࢉͳͲͪΖΜఆٛ͞Ε͍ͯΔ͕ ͜ΕΒͯ͢ϏϧτΠϯؔͱͯ͠ѻΘΕΔ
Regoͷจ๏ྫ: ϏϧτΠϯؔ • Ϗοτԋࢉɺू߹ԋࢉɺਖ਼نදݱɺจࣈྻૢ࡞ • Base64ɺURLɺJSON/YAMLɺUUID • ࣌ࠁ • άϥϑ
• ωοτϫʔΫ • τʔΫϯ(JWTͳͲ) • ଞʹศརͳ͕ؔ࠷ॳ͔Βͨ͘͞Μ༻ҙ͞Ε͍ͯΔ
؆୯ͳྫ • HTTPϦΫΤετͷೝՄ • user "alice" /hello ʹରͯ͠GETϦΫΤετ͕Ͱ͖Δ
The Rego Playground • ϒϥβ্ͰRegoΛॻ͍ͯࢼͤͯศར https://play.openpolicyagent.org/
Testable • ςετ͕ॻ͚Δʂ
Testable • ςετ͕ॻ͚Δʂ
Open Policy Agentͷ͍ํ
REST API
ೝՄػೳΛඋ͑ͨAPI • ೝূͱೝՄ • ೝূ(Authenticate) • ʮ୭ͳͷ͔ʯΛࣝผ͢Δ • ೝՄ(Authorize) •
ʮԿ͕Ͱ͖Δͷ͔(Ͱ͖ͳ͍ͷ͔)ʯΛஅ͢Δ
RBACΛ࣮ͯ͠ΈΔ
External Data • ͜͜·Ͱͷྫͩͱuser_rolesrole_permissions૬ݻఆ • ࣮༻్ͰಈతʹมԽͤͨ͞Γ૿ݮ͍ͤͨ͞ • ϙϦγʔΛධՁ͢Δʹ͋ͨͬͯඞཁͳใΛ֎෦͔Βऔಘ͢ΔΈ
ϦΫΤετʹຒΊࠐΉ • ϦΫΤετΛૹ৴͢Δଆ͕ՃใΛૹ৴͢Δ • ͪΖΜૹΒΕͯ͘Δ͕৴༻Ͱ͖ͳ͍ͱμϝ • ৴༻Ͱ͖Δͱ͍͏લఏ͔ɺ JWTͳͲͰॺ໊͞ΕͨΛݕূͯ͠͏͔ https://www.openpolicyagent.org/docs/latest/external-data/
σʔλΛ͢(push) • ֎෦͔Βߋ৽͕͋Δʹpush͢Δ • ಉظ࿙Εͱ͔ϥά͕ى͖Δͱ͜Θ͍͔ • ͋·Γେ͖ͳσʔλΕͳ͍ https://www.openpolicyagent.org/docs/latest/external-data/
σʔλΛΒ͏(pull) • OPA͕ಈతʹ֎෦ͷAPIΛݺͼग़ͤΔ(B) • OPAͷϨεϙϯελΠϜ૿Ճ͢Δ • ॊೈʹ࿈ܞͦ͢͠͏ https://www.openpolicyagent.org/docs/latest/external-data/
Testing
ςετ • ϙϦγʔͱಉ͡σΟϨΫτϦʹςετϑΝΠϧΛஔ͘ • "test_"Ͱ࢝·Δϧʔϧ͕ධՁ͞ΕɺͦΕ͕ςετʹͳΔ • opa testίϚϯυͰςετ͕࣮ߦͰ͖Δ • ΧόϨοδܭଌՄೳ
ͷϞοΫ • withΩʔϫʔυͰΛஔ͖͑ΒΕΔ
Open Policy Agentͷ͍Ͳ͜Ζ
Open Policy Agentͷ͍Ͳ͜Ζ • Kubernetesͷݖݶཧͷจ຺Ͱհ͞ΕΔ͜ͱ͕ଟ͍ҹ • ͦΕҎ֎ͷ༻్Λத৺ʹհ͠·͢
Envoy
Envoyͱ https://speakerdeck.com/kurochan/ru-men-envoy
Envoyͱ • OSSͷL4/L7ϓϩΩγ • ʮϞμϯͳαʔϏεࢦΞʔΩςΫνϟʯ͚ • ʮϢχόʔαϧσʔλϓϨʔϯʯΛࢦͯ͠։ൃ͞Ε͍ͯΔ • ύϑΥʔϚϯεʹ༏Εɺ֦ுੑ͕ߴ͘ɺAPIܦ༝ͰίϯτϩʔϧՄೳ https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy
Envoy࿈ܞ • EnvoyͱOPAΛ࿈ܞͤͯ͞ೝՄػೳ͖ͷήʔτΣΠΛߏՄೳ https://www.openpolicyagent.org/docs/latest/envoy-introduction/
Envoy࿈ܞ • EnvoyͱOPAΛ࿈ܞͤͯ͞ೝՄػೳ͖ͷήʔτΣΠΛߏՄೳ • ೝՄ͞ΕͨτϥϑΟοΫ͔͠௨ա͠ͳ͍ • ޙஈͷΞϓϦέʔγϣϯαʔόͷָ࣮͕ʹͳΔ
Terraform
TerraformʹϙϦγʔΛద༻͢Δʁ • terraform.analysisͱ͍͏ύοέʔδ͕༻ҙ͞Ε͍ͯΔ • terraform planͷ݁Ռ͕ҙਤ͍ͯ͠Δ͔Ͳ͏͔ͷνΣοΫ͕Ͱ͖Δ • CIͳͲʹΈࠐΉͱࣄނࢭͷνΣοΫʹͳΔ • ྫ
• ෆ༻ҙʹIAMͷઃఆมߋ͕͞Ε͍ͯͳ͍͔ʁ • ࣮ߦͨ͠ਓ͕ཧऀͰ͋ΕOKͳͲͷίϯςΩετ࣋ͨͤΒΕͦ͏ • ҰఆͷᮢҎ্ͷมߋ͕Ұʹͳ͞Ε͍ͯͳ͍͔ʁ • ޡͬͯڥΛഁյ͞Εͳ͍Α͏ʹͰ͖ͦ͏
Terraform࿈ܞͷྫ • terraform planͷ݁Ռʹରͯ͠ϙϦγʔΛద༻͢Δ
ϩάࢹ
ϩάʹϙϦγʔΛద༻͢ΔͱͲ͏ͳΔͷ͔ • ϩάࢹͰΑ͘Δ͜ͱ • ΤϥʔΧϯτ • ҟৗͷݕग़ • ෳࡶͳ݅Ͱͷϩάࢹ •
ಛఆͷIPΞυϨε͔Βͷෆਖ਼ͳΞΫηε • S3όέοτͷՄࢹൣғͷઃఆมߋ • ͳͲ • ͦΕɺOPAͰݕग़Ͱ͖ΔͷͰ…ʁ • Կ͔ͷҙࢥܾఆΛ͢ΔҎ֎ʹɺಛఆ݅ͷΞΫςΟϏςΟͷݕग़ʹ͔ͭ͑Δʂ
ΧελϚΠζ
͜͜·ͰͰ͔ͬͨ͜ͱ • Open Policy Agentҙͷೖྗʹରͯ͠ϙϦγʔΛద༻ͨ݁͠ՌΛ ฦ͢ύʔπͱ͔ͯ͠ͳΓ൚༻ੑ͕ߴ͍ • Open Policy AgentΛαʔϏεʹΈࠐΜͰ͏ʹ
Ͳ͏͢ΕΑ͍ͷ͔
REST API • input JSONͰPOST͢ΔͱɺϨεϙϯε͕JSONͰฦͬͯ͘Δ
Go API • GolangͷϥΠϒϥϦͱͯ͠ݺͼग़͢͜ͱ͕Մೳ
ΞϓϦӡ༻ηϯλʔͰͷ Open Policy AgentͷಋೖΞΠσΞ
ΞϓϦӡ༻ηϯλʔͱ • 140ஹԁͷڊେࢢɺখചۀքͷ࠶ൃ໌ʹΉ։ൃϓϩδΣΫτ https://speakerdeck.com/kurochan/retail-dx-project
ΞϓϦӡ༻ηϯλʔͰ։ൃ͍ͯ͠ΔγεςϜͨͪ • ڠಇൢଅ͚γεςϜ • ձһΞϓϦ • ECαΠτ • σʔλج൫ •
͜ΕΒͷཧը໘ • ༷ʑͳϙϦγʔͰΞΫηε੍ޚΛ͍ͨ͠
ΞϓϦӡ༻ηϯλʔͱ • খചۀքͷDXΛਪਐ͢ΔϓϩμΫτΛ։ൃ͢Δ෦ॺ • ͍ΖΜͳγεςϜΛ։ൃ͢Δ • ͍ΖΜͳγεςϜ = ͍ΖΜͳAPI •
ೝূೝՄ͕༷ʑͳγʔϯͰൃੜ͢Δ • ͦΕͧΕϏδωεཁ݅ඍົʹҟͳΔͷͰ͖ͪΜͱϧʔϧͱͯ͠ཧ͍ͨ͠ • Policy as Codeͷػӡ…ʂ • ೝূ => IdP, ೝՄ => ???
Open Policy AgentΛ༻͍ͨRBAC ڋ൱ ڐՄ ڐՄ ϦιʔεA ϦιʔεB A͞Μ B͞Μ
σʔλϕʔεͷͳͲʹԠͯ͡ಈతʹΞΫηεΛڐՄ͢Δ͔அ͍ͨ͠
Open Policy AgentΛ༻͍ͨRBAC https://www.openpolicyagent.org/docs/latest/external-data/ • ϢʔβA͕ϦιʔεBͷΞΫηεΛͯ͠Α͍͔͕ಈతʹมΘΔέʔε • External DataΛ༻͍ͯղܾ
൚༻తͳΞʔΩςΫνϟ • ೝূೝՄͷ͘͠ΈΛςϯϓϨʔτԽ͍ͨ͠ • Envoy + OPA + Backend API
• Envoy: ೝՄήʔτΣΠ • OPA: ೝՄϙϦγʔΤϯδϯ • Backend API: ϏδωεϩδοΫ
൚༻తͳΞʔΩςΫνϟ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ
ϦΫΤετ ϨεϙϯεͷྲྀΕ ϦΫΤετ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ ڐՄ͞ΕΔύλʔϯ
ϦΫΤετ ϨεϙϯεͷྲྀΕ ϦΫΤετ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ ڐՄ͞ΕΔύλʔϯ
ϦΫΤετ ϨεϙϯεͷྲྀΕ ϦΫΤετ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ ڐՄ ೝՄใ Ճใ ڐՄ͞ΕΔύλʔϯ
ϦΫΤετ ϨεϙϯεͷྲྀΕ ϦΫΤετ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ ϦΫΤετ ڐՄ ೝՄใ Ճใ
ڐՄ͞ΕΔύλʔϯ
ϦΫΤετ ϨεϙϯεͷྲྀΕ ϦΫΤετ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ ϦΫΤετ ڐՄ ೝՄใ Ճใ
ڐՄ͞ΕΔύλʔϯ
ϦΫΤετ ϨεϙϯεͷྲྀΕ ϦΫΤετ ΫϥΠΞϯτ ೝՄใ όοΫΤϯυ ೝՄใ Ճใ ڋ൱ ڋ൱͞ΕΔύλʔϯ
·ͱΊ
·ͱΊ • Open Policy Agentͱ͍͏OSSʹ͍ͭͯհ͠·ͨ͠ • ϙϦγʔΤϯδϯͷ൚༻ੑʹ͍ͭͯհ͠·ͨ͠ • ΞϓϦӡ༻ηϯλʔͰͷಋೖΞΠσΞʹ͍͓ͭͯ͠·ͨ͠ •
࣮ࡍʹಋೖࣄྫ͕Ͱ͖ͨΒͲ͔͜Ͱൃද͍ͨ͠ͱࢥ͍·͢
͝ࢹௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ